mirror of
https://github.com/Show-maket/IR-protocol.git
synced 2026-09-18 19:13:58 +00:00
fix(tx): приоритет IRQ DMA-TX явно ниже SysTick/EXTI — millis() замедлялся под передачей
HAL_NVIC_EnableIRQ без SetPriority оставлял DMA-каналы TX на приоритете 0 (уровень SysTick на G4). Длинный refill кольца BSRR (полубуфер 2048 слов = ~3.3мс при HCLK 12МГц) не вытеснялся, тики SysTick слипались: millis() замедлялся в 1.6x (один излучатель) / 2.2x (два) на всё время передачи. На машинке это ~37% вранья часов в каждый ИК-кадр: PID dt, планировщик, тайминги протокола. Мерено на стенде TofSickHunt 2026-08-11 (Car raw/idle_cur_vs_coup*): прогоны «60с» шли 85-95 реальных секунд. Фикс: irproto::kDmaTxIrqPriority=8 — ниже EXTI приёмника (6), выше дна; SysTick честный. ISR-TX путь (F401/КУ) не подвержен: его refill на TIM-приоритете 14. Верификация дилатации на стенде — раунд 4 (прерван, перезапустить). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@ -87,6 +87,10 @@ public:
|
||||
s_instance = this;
|
||||
|
||||
for (uint8_t i = 0; i < streamCount_; i++) {
|
||||
// Приоритет ЯВНО и ДО включения: без SetPriority канал остаётся на 0 (уровень
|
||||
// SysTick), длинный refill не вытесняется и глотает тики millis. Обоснование
|
||||
// и измерения — у irproto::kDmaTxIrqPriority (IR_config.h).
|
||||
HAL_NVIC_SetPriority(streams_[i].dmaIrq, irproto::kDmaTxIrqPriority, 0);
|
||||
HAL_NVIC_EnableIRQ(streams_[i].dmaIrq);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user