1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Ошибка компилятора Gcc. Требуется помощь.

Тема в разделе "С и С++", создана пользователем alx, 23 июн 2010.

  1. alx

    alx Гость

    Репутация:
    0
    собственно скачал драйвера для некого железа. не могу собрать.
    есть файл.h
    там такой фрагмент кода:
    <!--shcode--><pre><code class='с'>#define AE531X_DESC_SWPTR_GET(ptr) \
    (void *)(*(volatile UINT32 *) ((UINT32)ptr + AE531X_DESC_SWPTR))

    #define AE531X_DESC_SWPTR_SET(ptr,val) \
    AE531X_DESC_SWPTR_GET(ptr) = (void *)(val)[/CODE]
    и в самой программке
    ...........
    <!--shcode--><pre><code class='с'>AE531X_DESC_SWPTR_SET(txDesc, TxBuf);[/CODE]
    вызывает ошибку компилятора error: lvalue required as left operand of assignment...
    понимаю, что после преобразований define код получится страшным, но знаний не хватает...
     
  2. korisk

    korisk Гость

    Репутация:
    0
    Получается что-то типа
    (void *)(*(volatile UINT32 *) ((UINT32)txDesc + AE531X_DESC_SWPTR)) = (void *)(TxBuf)

    чтобы посмотреть во что превращается код можно использовать опцию -E (gcc -E main.c), которая выдает код после разворачивания макросов.

    Проблема скорее всего в типе txDesc. Покажите описание переменных.

    С уважением.
     
  3. alx

    alx Гость

    Репутация:
    0
  4. korisk

    korisk Гость

    Репутация:
    0
    Интересно для чего проект?
    Экзотическая ось такая ) eCos.
    А по сути..
    Возможно стоит более свежую версию скачать :).

    Ещё вариант убрать в макросе:
    <!--shcode--><pre><code class='С'>#define AE531X_DESC_SWPTR_GET(ptr)[/CODE]

    преобразование (void *), так чтобы получилось
    <!--shcode--><pre><code class='С'>#define AE531X_DESC_SWPTR_GET(ptr) \
    (*(volatile UINT32 *) ((UINT32)ptr + AE531X_DESC_SWPTR))[/CODE]

    Преобразование типа левой части операции присваивания запрещено в современных версиях gcc. (в 4.4) точно.
    Так что либо используйте старый gcc, либо ищите новый драйвер, либо правьте согласно рецепту, но там наверное ещё много чего вылезет )
    тыц

    Удач. :)
     
Загрузка...
Похожие Темы - Ошибка компилятора Gcc
  1. recrut
    Ответов:
    13
    Просмотров:
    134
  2. Петручо
    Ответов:
    0
    Просмотров:
    30
  3. Tayrus
    Ответов:
    6
    Просмотров:
    111
  4. OneDollar
    Ответов:
    12
    Просмотров:
    175
  5. ViSol
    Ответов:
    2
    Просмотров:
    110

Поделиться этой страницей