Для всех Mode передавать пакеты при обновлении данных и повторять каждый через 1300 мс от последнего CAN ACK. Отдельно отправлять heartbeat раз в секунду. Сохранить маски рассылки, отключение потоков нулевым периодом и неблокирующее восстановление после ошибок TX. Проверены границы периодов, все Mode, занятый mailbox, отмена без CANAA, отсутствие ACK, переполнение Timer1, первый снимок и справедливость потоков. Изменённые модули ecan.c и main.c скомпилированы компилятором TI C2000.
12 lines
939 B
C
12 lines
939 B
C
/* Телеметрия eCAN и фоновая выдача ответов логгера.
|
||
* UMP_CAN_service вызывается из main, не из приёмного IRQ.
|
||
*/
|
||
void InitCan(int Port, int DevNum);
|
||
int CAN_send(int Port, int data[], int Addr); /* 0: занят, 1: кадр поставлен, 2: подтверждённые данные не изменились и 1,3 с ещё не прошли. */
|
||
void CAN_heartbeat_service(void); /* Планирует отдельный heartbeat по Timer1 с периодом одна секунда. */
|
||
void CAN_telemetry_service(void); /* В main обслуживает heartbeat, изменения данных и повтор каждого разрешённого пакета через 1,3 с. */
|
||
extern int CAN_input_data[];
|
||
|
||
/* Неблокирующая передача ответов логгера отдельным CAN mailbox. */
|
||
void UMP_CAN_service(void);
|