Bonjour,
J'utilise MPLAB X v3.61 et XC16 3.31 (version gratuite) et je rencontre un problème de variable qui devient aléatoire alors qu'elle est passée en argument d'une fonction.
- Déclaration de la fonction :
- Utilisation :Code:INT32 loadDataArray(UINT8 arrayID, UINT16 dotNumber, UINT16*outBuffer) { UINT16 index = 0; for(index = 0; index < dotNumber; index++) { outBuffer[index] = EEPROM_readWord(arrayStartAddress[arrayID] + (index*2)); } return 0; }
J'avais d'énormes erreurs de lecture dans l'EEPROM, alors que la lecture occasionnelle d'un byte ou word ne posait aucun problème (donc EEPROM OK).Code:#define MY_ARRAY 0 #define ARRAY_DOTS 500 UINT16 arrayStartAddress[2]={ 1000, 2000 }; UINT16 myBuffer[500]; loadDataArray(MY_ARRAY, ARRAY_DOTS, myBuffer);
En mettant des retours un peu partout, il s'avère que la variable "dotNumber" n'était pas de 500 comme définie par ARRAY_DOTS, mais quelque chose comme 23000, ce qui créait bien sur un overflow et un buffer rempli de 0x00 et 0xFF.
J'ai pu "rafistoler" ma fonction en utilisant une variable intermédiaire déclarée en local, mais c'est dégueulasse et je retrouve ce type d'erreurs dans plusieurs projets...
Et là je retrouve bien "dotNum=500"Code:INT32 loadDataArray(UINT8 arrayID, UINT16 dotNumber, UINT16*outBuffer) { UINT16 dotNum=dotNumber; UINT16 index = 0; for(index = 0; index < dotNum; index++) { outBuffer[index] = EEPROM_readWord(arrayStartAddress[arrayID] + (index*2)); } return 0; }
Est-ce que quelqu'un a déjà rencontrer ce type d'erreurs? Je ne trouve aucune explication et assez c'est difficile à détecter, et pénible... (j'ai l'impression que c'est de plus en plus récurrent avec la version gratuite du compilateur).
Merci
-----