### 测试 串口中断发送通过测试 spi_flash读写通过测试 对智能模块通信串口,阻塞发送数据通过测试。 ### 问题 #### 串口中断 25/02/24 在freerots环境下,中断不生效 解决 > 25/02/25 > > 需要启动freerots任务 > > 同时中断部分 > > ```c > void UART5_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); > ``` > > 变为 > > ```c > void UART5_IRQHandler(void) __attribute__((interrupt())); > ``` > > 其他中断同上,由硬件压栈变为软件压栈 #### 串口发送的数据不正确 25/02/28 解决 将数据通过队列发送,需要将buff的位置移动到起始位置+结构体长度 ```c uint8_t *Buff = (uint8_t *)pvPortMalloc(200); if (Buff == NULL) { log_error("Memory allocation failed\n"); return; } queueUartSendInfo *sendBuff = (queueUartSendInfo *)Buff; sendBuff->length = sizeof("hello world\n"); sendBuff->data = Buff + sizeof(queueUartSendInfo); strlcpy((char *)sendBuff->data, "hello world\n", sizeof("hello world\n")); // for (int i = 0; i < sizeof("hello world\n"); i++) { // sendBuff->data[i] = data[i]; // } // *sendBuff->data = *data; // *sendBuff->data = 'H'; log_info("dataLen:%d\n", sendBuff->length); log_info("data:%s\n", sendBuff->data); xQueueSend(upward_uart_Queue, &Buff, 10); vTaskDelay(1000); ``` #### 中断中不能分配和释放内存 解决 中断中添加信号量,通知任务来释放。 ## 接收解析 #### su806传来的数据 见网关单片机通信协议 #### 传感器传来的数据