完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
硬件:STM32F429IGT6核心板 操作系统:RTT V4.1.5 串口框架:使用串口V2。配置如下 / 以 DMA 接收及轮询发送方式打开串口设备 / rt_device_open(serial, RT_DEVICE_FLAG_RX_BLOCKING | RT_DEVICE_FLAG_TX_BLOCKING); 使用场景:使用MODBUSRTU通信协议。上位机1ms时间间隔发送数据,串口线程读取后处理并返回。 问题点:1.串口线程来不及接收消息队列内容,导致线程阻塞,假死。 复现情况:PWM中断开启,优先级为1. 串口中断优先级为2.DMA优先级为0. 发送100Khz以下频率,通信正常感受不到延时。 发送100KhZ以上频率,发送一小会,串口通信正常。持续发送,串口通信掉线。 调整PWM中断优先级为3.发送100khz频率以上,通信不掉线。 问题点:2.DEBUG的时候,触发断点不继续运行。上位机串口发送数据没有关闭,持续一会在继续运行程序。这时也会导致线程假死。甚至系统崩溃,触发看门狗。 问题点:3.下载代码的时候。上位机串口发送数据没有关闭,这时也会导致线程假死。甚至系统崩溃,触发看门狗。 使用DEBUG断点查看,线程假死后,上位机发送数据,可以进入接收回调函数。 但是断点在线程中,始终无法进入线程。 怀疑是消息队列满了,无法处理导致假死。尝试过对消息队列清空,失败了。 另一个是怀疑串口V2的缓存满了没有清空,尝试过清空对应的ringbuffer缓存,也失败了。 请不要说是串口线程太卡了,接收太慢处理不过来。 我想知道的是,线程假死后怎么恢复。 或者说是消息队列没处理过来的话怎么保证线程不会异常,可以抛弃消息队列内的所有内容。 代码如下。其中的信号量与互斥量取消过。没有改善。 /**
*/ static void modbus_thread(void* p) { //初始化modbusRTU,从站地址为0x01,波特率为115200,无校验。 eMBRTUInit(&ucRTU_DCB,&ucMB_RTU_PORT,SLAVE_ADDRESS,BAUD_RATE,MB_PAR_NONE); eMBRTUStart(&ucRTU_DCB); //F4使能空闲中断不会立马进入中断函数进行状态转换,手动切换 ucRTU_DCB.eRcvState = STATE_RX_IDLE; while(1) {
} } / 串口收发处理函数 **************************/ /**
*/ static rt_err_t uart_input(rt_device_t dev, rt_size_t size) {
} /**
*/ static int serial_receive(uint8_t *buf, int bufsz) {
// LOG_HEX(UART_NAME,8,buf,rx_length);
} /**
*/ static int serial_send(uint8_t *buf, int len) { rt_size_t send_len = 0; /* 通过串口设备 serial 输出读取到的消息 */ send_len = rt_device_write(serial, 0, buf, len); if(send_len == len) {
} else {
} } /**
*/ static int Modbus_Slave1_Init(void) {
} /* 导出到 msh 命令列表中 */ INIT_APP_EXPORT(Modbus_Slave1_Init); |
|
相关推荐
4个回答
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1094 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
3798 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1517 浏览 0 评论
2252 浏览 0 评论
1705 浏览 0 评论
75523 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 18:24 , Processed in 0.778287 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号