1
Bus CAN / Re : Problème reception rapide CAN
« le: mars 06, 2019, 03:23:22 pm »
Problème résolu 
Le problème venait du faite que j'ai rempli le unsigned char _Circule[256] par un unsigned int _CirculeV[256] car j'utilise des identifiants CAN plus grand que 255. Sauf qu'un sizeof(_CirculeV) d'un unsigned int ne donne plus 256 mais 512...
Je divise donc par 2 la valeur du sizeof dans les comparaisons et je n'ai plus de probléme. Il faut bien faire la modification dans la boucle qui écrit dans Circule mais aussi dans la boucle qui récupère les valeurs dans Circule.
while (_NcanV > 2) { // chaque message dans _Circule occupe au moins 3 octets
_NcanV--;
RIdV = _CirculeV[_indexRV]; // recup Id
_indexRV++;
if (_indexRV == sizeof(_CirculeV) / 2) {_indexRV = 0;}
_NcanV--;
RlenV = _CirculeV[_indexRV]; // recup longueur
_indexRV++;
if (_indexRV == sizeof(_CirculeV) / 2) {_indexRV = 0;}
for (int k = 0; k < RlenV; k++) {
_NcanV--;
RbufV[k] = _CirculeV[_indexRV]; // recup octets message
_indexRV++;
if (_indexRV == sizeof(_CirculeV) / 2) {_indexRV = 0;}
}
}

Le problème venait du faite que j'ai rempli le unsigned char _Circule[256] par un unsigned int _CirculeV[256] car j'utilise des identifiants CAN plus grand que 255. Sauf qu'un sizeof(_CirculeV) d'un unsigned int ne donne plus 256 mais 512...
Je divise donc par 2 la valeur du sizeof dans les comparaisons et je n'ai plus de probléme. Il faut bien faire la modification dans la boucle qui écrit dans Circule mais aussi dans la boucle qui récupère les valeurs dans Circule.
while (_NcanV > 2) { // chaque message dans _Circule occupe au moins 3 octets
_NcanV--;
RIdV = _CirculeV[_indexRV]; // recup Id
_indexRV++;
if (_indexRV == sizeof(_CirculeV) / 2) {_indexRV = 0;}
_NcanV--;
RlenV = _CirculeV[_indexRV]; // recup longueur
_indexRV++;
if (_indexRV == sizeof(_CirculeV) / 2) {_indexRV = 0;}
for (int k = 0; k < RlenV; k++) {
_NcanV--;
RbufV[k] = _CirculeV[_indexRV]; // recup octets message
_indexRV++;
if (_indexRV == sizeof(_CirculeV) / 2) {_indexRV = 0;}
}
}