Просмотр исходного кода

CAN: handle higher packet rate

don't get stuck in rx at very high packet rates
Andrew Tridgell 2 лет назад
Родитель
Сommit
34cfcb9f0a
2 измененных файлов с 3 добавлено и 2 удалено
  1. 1 1
      RemoteIDModule/CANDriver.cpp
  2. 2 1
      RemoteIDModule/DroneCAN.cpp

+ 1 - 1
RemoteIDModule/CANDriver.cpp

@@ -46,7 +46,7 @@ void CANDriver::init(uint32_t bitrate, uint32_t acceptance_code, uint32_t accept
 
 static const twai_general_config_t g_config =                      {.mode = TWAI_MODE_NORMAL, .tx_io = PIN_CAN_TX, .rx_io = PIN_CAN_RX, \
                                                                     .clkout_io = TWAI_IO_UNUSED, .bus_off_io = TWAI_IO_UNUSED,      \
-                                                                    .tx_queue_len = 5, .rx_queue_len = 5,                           \
+                                                                    .tx_queue_len = 5, .rx_queue_len = 50,                           \
                                                                     .alerts_enabled = TWAI_ALERT_NONE,  .clkout_divider = 0,        \
                                                                     .intr_flags = ESP_INTR_FLAG_LEVEL2
                                                                    };

+ 2 - 1
RemoteIDModule/DroneCAN.cpp

@@ -267,7 +267,8 @@ void DroneCAN::processTx(void)
 void DroneCAN::processRx(void)
 {
     CANFrame rxmsg;
-    while (can_driver.receive(rxmsg)) {
+    uint8_t count = 60;
+    while (count-- && can_driver.receive(rxmsg)) {
         CanardCANFrame rx_frame {};
         uint64_t timestamp = micros64();
         rx_frame.data_len = CANFrame::dlcToDataLength(rxmsg.dlc);