Структура присваивания дает "ожидаемое выражение"

У меня есть структура, определенная как

typedef struct sCP {
    nuint32_t Fr;
    DrRange_t DR;
    uint8_t B; 
} CP_t;

Некоторые предопределенные значения

#define LC4  { 86, { ( ( D5 << 4 ) | D0 ) }, 0 }
#define LC5  { 87, { ( ( D5 << 4 ) | D0 ) }, 0 }

и функция

LMS_t LMCA(uint8_t id, CP_t params)

typedef enum eLoRaMacStatus {
    LM_STATUS_OK,
    LM_STATUS_BUSY,
    LM_STATUS_PARAMETER_INVALID,
    LM_STATUS_DEVICE_OFF,
} LMS_t;

В коде он используется как

Lmca( 3, ( CP_t )LC4 );
Lmca( 4, ( CP_t )LC5 );

При компиляции с IAR для ARM Cortex M3 я получаю Error[Pe29]: expected an expression на обеих линиях.

Если я сделаю

CP_t t = LC4;
Lmca( 3, t );

Это идет хорошо, но у меня та же ошибка, если я тогда пытаюсь позвонить

t = LC5;
Lmca( 4, t );

У кого-нибудь есть идеи, как мне преодолеть эту проблему?

1 ответ

Кажется, компилятор IAR не поддерживает составной литеральный синтаксис C99.

  • либо вы используете его в режиме C++, и этот синтаксис не поддерживается как расширение
  • или вы используете его в режиме до C99 (с --c89 опция командной строки).
Другие вопросы по тегам