Всем привет опять!
Бьюсь, обессилил.
Со стороны передатчика - FreeRTOS и два таска:
Код
/* continuously send CAN packets ID 0x151 with max speed (approx 1000Hz) */
static void send_function2( void *x)
{
(void)x;
static CAN_packet packet={0x151, 8, "\0\0\0\0\0\0\0\0"};
for(;; )
{
can_send( &packet, 10, 10);
packet.data[1]++;
vTaskDelay(500);
}
}
/* periodically send CAN packet ID 0x150 */
static void send_function( void *x)
{
(void)x;
static CAN_packet packet;
packet.id=0x150;
packet.length=2;
packet.data[0]=0x00;
packet.data[1]=0xaa;
for(;; )
{
can_send( &packet, 13, 500);
packet.data[0]++;
vTaskDelay(1000);
}
}
Приемник - без изменений echo & spy из Атмеловских библиотек:
Код
-0- RxCAN @ C20C: 0x00000150(Ext.), L=2, 81-AA
-0- RxCAN @ 047D: 0x00000151(Ext.), L=8, 00-03-00-00-00-00-00-00
-0- RxCAN @ 4686: 0x00000150(Ext.), L=2, 82-AA
-0- RxCAN @ 88FB: 0x00000151(Ext.), L=8, 00-05-00-00-00-00-00-00
-0- RxCAN @ CAFD: 0x00000150(Ext.), L=2, 83-AA
-0- RxCAN @ 0D72: 0x00000151(Ext.), L=8, 00-07-00-00-00-00-00-00
-0- RxCAN @ 4F75: 0x00000150(Ext.), L=2, 84-AA
-0- RxCAN @ 91EB: 0x00000151(Ext.), L=8, 00-09-00-00-00-00-00-00
-0- RxCAN @ D3EC: 0x00000150(Ext.), L=2, 85-AA
-0- RxCAN @ 1663: 0x00000151(Ext.), L=8, 00-0B-00-00-00-00-00-00
Т.е. каждый второй фрейм более "частого" таска - теряется. Ошибок нет, смотрел через JTAG регистры.
Вот теперь я гадаю, где теряется фрейм - на приемнике, или на передатчике.
Может кто-нибудь сталкивался?
Update: Вот еще глюк, это уже серьезно ИМХО:
Код
-0- RxCAN @ E373: 0x00000151(Ext.), L=8, 00-0F-00-00-00-00-00-00
-0- TxCAN @ B704: 0x00000152(Ext.), L=8, 00-0F-00-00-00-00-E3-73
-0- RxCAN @ 2579: 0x00000150(Ext.), L=2, 08-AA
-0- TxCAN @ D47F: 0x00000151(Ext.), L=8, 08-AA-00-00-00-00-25-79
-0- RxCAN @ 67EB: 0x00000151(Ext.), L=8, 00-11-00-00-00-00-00-00
Отсюда видно, что пакетик в D47F есть суперпозиция пересылки пакета 2579 и D47F (08-AA и 00-10-00...). Где же гарантированная целостность?