2017-01-14 8 views
1

je une structure définie commeL'attribution de structure donne "attend une expression"

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

Certaines valeurs prédéfinies

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

et une fonction

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; 

Dans le code, il est utilisé comme

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

Lors de la compilation avec IAR pour ARM Cortex M3, j'obtiens un Error[Pe29]: expected an expression sur les deux lignes.

Si je

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

Cela va bien, mais j'ai la même erreur si j'essaie alors d'appeler

t = LC5; 
Lmca(4, t); 

Quelqu'un a une idée comment je peux résoudre ce problème?

+1

L'une est une liste d'initialisation désignée, l'autre un littéral composé. C++ n'a pas de littéraux composés, AFAIK, alors assurez-vous de compiler avec un compilateur ** C ** moderne. – EOF

+0

Est-ce que ce 't = (CP_t) LC5;' fonctionne? Si ce n'est pas le cas, il semble que le compilateur ne supporte pas les littéraux composés. – alk

+0

@alk même résultat avec 't = (CP_t) LC5;' – mirmit

Répondre

1

Il semble que le compilateur IAR ne supporte pas la syntaxe littérale composée C99.

  • soit vous utilisez en mode C++ et cette syntaxe est pas pris en charge comme une extension
  • ou vous utilisez en mode pré-C99 (avec l'option de ligne de commande --c89).
+0

Ceci est un code C intégré avec le code cpp. GNU G ++ compile le code, tandis que IAR ne le fait pas. IAR peut compiler ceci dans le projet C (C99). Je me demande comment surmonter cela, car je prévois de supporter plusieurs chaînes d'outils avec la même base de code. – mirmit

+0

@mirmit: Vous ne pouvez pas "incorporer du code C avec du code C++". Soit vous compilez en C++ ou C. Ils sont des langages distincts, chacun avec des caractéristiques et une sémantique uniques. – Olaf