完善资料让更多小伙伴认识你,还能领取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 吧。说多了好像我是来拆台的
|
|
|
|
|
|
还没到受不了的程序程度。等程序其他部分稳定了,或者实在是问题很大,再尝试一下。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
999 浏览 0 评论
2781 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9368 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2895 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2300 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 20:29 , Processed in 0.875001 second(s), Total 95, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3966