2016-06-29 3 views
1

J'ai une base de code qui compile à la fois pour PIC18 et PIC24.Erreur: (195) syntaxe d'expression

Alors que l'écriture d'un pilote pour un nouveau capteur sur le PIC24, je recompiler pour le PIC18 et le calcul de la pression tombe en panne:

{ 
    // Normal operation, valid data 
    uint32_t rawPressure = ((ssc_sr_1[0] & 0x3F) << 8) + ssc_sr_2[0]; 
    filter_pressure_left = (uint16_t)(MIN_PRESSURE_PA + (rawPressure - MIN_PRESSURE_RAW)*(MAX_PRESSURE_PA-MIN_PRESSURE_PA)/(MAX_PRESSURE_RAW-MIN_PRESSURE_RAW)); 
} 

Sur la compilation, l'erreur i2c.c:546: error: (195) expression syntax (où la ligne 546 est la ligne filter_pressure_left =) Est lancé.

Je ne vois rien de syntaxiquement erroné à lancer cette erreur, qui est sauvegardée par le fait qu'il n'est pas lancé lors de la compilation avec xc16-gcc.

Versions du compilateur:

  • XC16-GCC v1.23
  • XC8 v1.33

informations complémentaires demandées valeurs environnantes utilisées:

DECLARE unsigned char ssc_sr_1[2]; 
DECLARE unsigned char ssc_sr_2[2]; 
#define MAX_PRESSURE_PA     249 
#define MIN_PRESSURE_PA     -249 
#define MAX_PRESSURE_RAW    14745 // 90% of 2^14 
#define MIN_PRESSURE_RAW    1638 // 10% of 2^14 
+0

quelle est la valeur attendue et qu'est-ce qui a été retourné? –

+0

Message du compilateur est le titre de cette question "Erreur: (195) syntaxe d'expression" et se produit sur la deuxième ligne. Ce n'est pas un problème de valeur erronée retournée, c'est que le compilateur n'acceptera pas cette ligne - J'ai inclus la ligne auparavant en raison des questions précédentes posées à propos de l'erreur provenant des points-virgules manquants sur la ligne précédente. –

+0

Je suppose que ssc_sr_1 est uint8_t ou une autre valeur de 8 bits? Sinon, potentiellement le compilateur pourrait détecter une opération invalide. – Neil

Répondre

2

espaces espaces espaces!

Modification de la seconde ligne à:

filter_pressure_left = (uint16_t)(MIN_PRESSURE_PA + (rawPressure - MIN_PRESSURE_RAW) * (MAX_PRESSURE_PA - MIN_PRESSURE_PA)/(MAX_PRESSURE_RAW - MIN_PRESSURE_RAW)); 

compile sans erreur.

Pour référence aux personnes rencontrant cela dans le futur - diviser votre équation en plusieurs lignes pour identifier exactement quelle partie est défaillante - dans mon cas, (MAX_PRESSURE_PA-MIN_PRESSURE_PA) a causé l'erreur et ajouter des espaces de manière abstraite et recompiler le traitement.

+1

Pour être complet, '(MAX_PRESSURE_PA-MIN_PRESSURE_PA)' précompile à '(249-249)', ce qui est syntaxiquement très ambigu, d'où l'erreur. –