|
STM32U575芯片。
一个队列,在uart中断中接收uart数据,然后一个任务用于处理uart数据。期间还使用了usbx不断接收windows发来的usb信息。怀疑是usb发信息的时候发生了什么错误。当usb快速发送消息时,有大概50%的概率队列的tx_queue_id的值有被改变为0x180(正常应该是0x51554555,刚刚开机时都是正常的值)。
下面是详细情况:
队列是
TX_QUEUE Mcu_Uart_QueueHandle;
uint32_t Mcu_Uart_QueueBuf[10*64];
队列创建
tx_queue_create(&Mcu_Uart_QueueHandle,
"Mcu_Uart_QueueHandle",
TX_16_ULONG,
(VOID *)Mcu_Uart_QueueBuf,
sizeof(Mcu_Uart_QueueBuf));
在串口中断HAL_UART_RxCpltCallback里如果接收到uart消息,就将消息加入队列status = tx_queue_send(&Mcu_Uart_QueueHandle,&message,TX_NO_WAIT);
第1个任务,串口队列处理任务McuUartCmdHldTask里会处理uart消息,任务优先级为3,TX_NO_TIME_SLICE。
status = tx_queue_receive(&Mcu_Uart_QueueHandle, &message, TX_WAIT_FOREVER);
这个队列平常只会每3秒接收到一个心跳包,除此之外没有其他的信息接收。
第2个任务,usbX的usb消息接收任务,任务优先级为1,TX_NO_TIME_SLICE。接收到usb命令之后,放入usb接收队列中,第3个任务负责处理usb队列中的数据,处理任务的任务优先级为2,TX_NO_TIME_SLICE。大概接收了3000多个usb命令的时候,就会出错,队列的tx_queue_id的值有被改变为0x180,此时其他队列和任务都正常运行。仅这处不正常。 |
|