加快can的报文处理实时性

This commit is contained in:
NeoZng 2023-07-11 16:16:19 +08:00
parent 2404edd4eb
commit df66794bf9
3 changed files with 16 additions and 14 deletions

View File

@ -125,7 +125,7 @@ void StartDefaultTask(void const *argument)
/* init code for USB_DEVICE */ /* init code for USB_DEVICE */
MX_USB_DEVICE_Init(); // 默认usb启动任务的位置 MX_USB_DEVICE_Init(); // 默认usb启动任务的位置
/* USER CODE BEGIN StartDefaultTask */ /* USER CODE BEGIN StartDefaultTask */
vTaskDelete(NULL); // 避免空置和切换占用cpu osThreadTerminate(NULL); // 避免空置和切换占用cpu
/* USER CODE END StartDefaultTask */ /* USER CODE END StartDefaultTask */
} }

View File

@ -150,7 +150,8 @@ static void CANFIFOxCallback(CAN_HandleTypeDef *_hcan, uint32_t fifox)
{ {
static CAN_RxHeaderTypeDef rxconf; // 同上 static CAN_RxHeaderTypeDef rxconf; // 同上
uint8_t can_rx_buff[8]; uint8_t can_rx_buff[8];
while (HAL_CAN_GetRxFifoFillLevel(_hcan, fifox)) // FIFO不为空,有可能在其他中断时有多帧数据进入
{
HAL_CAN_GetRxMessage(_hcan, fifox, &rxconf, can_rx_buff); // 从FIFO中获取数据 HAL_CAN_GetRxMessage(_hcan, fifox, &rxconf, can_rx_buff); // 从FIFO中获取数据
for (size_t i = 0; i < idx; ++i) for (size_t i = 0; i < idx; ++i)
{ // 两者相等说明这是要找的实例 { // 两者相等说明这是要找的实例
@ -165,6 +166,7 @@ static void CANFIFOxCallback(CAN_HandleTypeDef *_hcan, uint32_t fifox)
return; return;
} }
} }
}
} }
/** /**

View File

@ -16,6 +16,7 @@
#include "task.h" #include "task.h"
#include "daemon.h" #include "daemon.h"
#include "bsp_log.h" #include "bsp_log.h"
#include "cmsis_os.h"
#define RE_RX_BUFFER_SIZE 255u // 裁判系统接收缓冲区大小 #define RE_RX_BUFFER_SIZE 255u // 裁判系统接收缓冲区大小
@ -143,7 +144,6 @@ referee_info_t *RefereeInit(UART_HandleTypeDef *referee_usart_handle)
*/ */
void RefereeSend(uint8_t *send, uint16_t tx_len) void RefereeSend(uint8_t *send, uint16_t tx_len)
{ {
static TickType_t xLastWakeTime;
USARTSend(referee_usart_instance, send, tx_len, USART_TRANSFER_DMA); USARTSend(referee_usart_instance, send, tx_len, USART_TRANSFER_DMA);
vTaskDelayUntil(&xLastWakeTime, 120); // 裁判系统接收ui数据和多机通信最大支持频率为10Hz osDelay(115);
} }