完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
硬件:STM32F429IGT6核心板 DEBUG的时候,打断点停止程序运行,让上位机一直发送数据。然后在恢复程序运行。会发现线程被挂起了。。。。 打断点运行了一下,发现DMA的半满中断,全满中断,和空闲中断都进了一次后,线程才会进入一次去接收读到的长度。导致RINGBUFFER缓冲长度与接收消息长度不一致。 裸机使用时,dma+串口接收+fifo缓冲区。我放入中断进入时就做判断处理。这样就不会有问题的。 是不是可以做个啥判断,保证线程处理的长度值一定是最新运算后的呢? 代码如下 /**
//初始化modbusRTU,从站地址为0x01,波特率为115200,无校验。 eMBRTUInit(&ucRTU_DCB,&ucMB_RTU_PORT,SLAVE_ADDRESS,BAUD_RATE,MB_PAR_NONE); eMBRTUStart(&ucRTU_DCB); ucRTU_DCB.eRcvState = STATE_RX_IDLE; rt_err_t result = rt_mq_recv(rx_mq, &msg, sizeof(msg), { } xMBPortEventPost(&ucRTU_DCB,EV_FRAME_RECEIVED); //改变事件状态为接收事件 rt_mutex_take(mb_slave_mutex, RT_WAITING_FOREVER);//保存内存 eMBRTUPoll(&ucRTU_DCB); //读写内存 rt_mutex_release(mb_slave_mutex); //允许操作内存 rt_sem_release(mb_buff_sem); //释放MB处理线程信号量 } } @brief This function will set the reception indication callback function. This
data.
if (recv_len < size)
rx_fifo->rx_cpt_index = size; rt_completion_wait(&(rx_fifo->rx_cpt), RT_WAITING_FOREVER); } |
|
相关推荐
2个回答
|
|
放弃 v2 吧。说多了好像我是来拆台的
|
|
|
|
还没到受不了的程序程度。等程序其他部分稳定了,或者实在是问题很大,再尝试一下。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
529 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2000 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1174 浏览 0 评论
1674 浏览 0 评论
1439 浏览 0 评论
74728 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 15:14 , Processed in 0.656185 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号