2017-06-04 3 views
1

J'ai du mal à faire fonctionner un morceau de code, j'ai un code utilisant une fonction avec buffer local, quand le tampon local est initialisé alors j'ai une exception, mais quand je viens de le déclarer sans initialisation ça marche bien, je ne peux pas comprendre pourquoi. J'ai également augmenté la taille de la pile dans l'éditeur de liens, mais cela ne semble pas être le problème. NB: Je compile avec l'option de compilation c99/c11 qui supporte toute l'initialisation du tampon.L'initialisation complète du buffer mène à l'exception

#define UDS_SRV_CFG2_MAX 20 

NCS_PRI_FCT tUdsStatus UDS_RdbiManagement(u16 *puwLen, u8 *aubUdsData) { 

    tUdsStatus eUdsStatus; 
    u8 ubTableCfgIdx[UDS_SRV_CFG2_MAX] = { 0 }; // this leads to exception 
    //... 
} 

NCS_PRI_FCT tUdsStatus UDS_RdbiManagement(u16 *puwLen, u8 *aubUdsData) { 

    tUdsStatus eUdsStatus; 
    u8 ubTableCfgIdx[UDS_SRV_CFG2_MAX]; // code works fine here 
    // ... 
} 
+1

Vous ne pouvez pas "compiler avec l'option de compilation c99/c11". Vous construisez en mode C99, * ou * vous construisez en mode C11. Vous ne pouvez pas faire les deux, ils sont mutuellement exclusifs. –

+0

Que voulez-vous dire "initialisation de tampon complet"? En C (C89, C99, C11) il n'y a pas d'initialisation partielle. Les objets sont non initialisés ou complètement (tous les octets actifs) initialisés. – pmg

+0

Et * où * obtenez-vous l'exception? Quand 'UDS_RdbiManagement' est appelé? Ailleurs? Vous * avez * utilisé un débogueur pour localiser où le crash se produit dans * votre * code? –

Répondre

1

Merci bien pour vos réponses, le problème était en fait un alignement de la pile, ce qui conduit à des exceptions, car l'alignement de la pile de la plate-forme est 4byts, 20 tampon d'octets passent le test, mais 15 octets de mémoire tampon a échoué avec une exception, car de mauvais alignement du compilateur. ceci a été résolu en ajoutant l'option de compilation pour la pile de désalignement et en activant dans le matériel l'indicateur correct.

Nabil,

ingénieur système embbeded/électronique.