• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы alx
  • Дата начала
A

alx

собственно скачал драйвера для некого железа. не могу собрать.
есть файл.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 код получится страшным, но знаний не хватает...
 
K

korisk

собственно скачал драйвера для некого железа. не могу собрать.
есть файл.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 код получится страшным, но знаний не хватает...

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

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

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

С уважением.
 
K

korisk

Все во вложении. Файл ae531xecos.c в архиве.Посмотреть вложение 3417
Интересно для чего проект?
Экзотическая ось такая ) 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, либо ищите новый драйвер, либо правьте согласно рецепту, но там наверное ещё много чего вылезет )


Удач. :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!