[an error occurred while processing this directive]
|
Работаю с T89C51CC01. В даташите написано, что при получении сообщения CAN, размер данных можно прочитать в младших 4-х битах регистра CANCONCH, и что этот размер не может превышать 8. Следующий код вызывает переполнение массива:
char can_data[8];
len = CANCONCH & 0x0F;
for (i = 0; i < len; i++)
can_data[i] = CANMSG;
Со следующим кодом все в порядке:
char can_data[8];
len = CANCONCH & 0x0F;
if (len > 8)
len = 8;
for (i = 0; i < len; i++)
can_data[i] = CANMSG;
Вывод: значение длины данных, полученное в CANCONCH, на самом деле может быть больше 8? Кто-нибудь сталкивался с подобной ситуацией? Почему такое может быть? (Посмотреть реальное значение регистра в отладчике нет возможности.) На SJA1000 у меня ничего подобного не было.
E-mail: info@telesys.ru