完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近调试//发送两个队列
xResult = xSemaphoreTake(xSemaphore, (tickType_t)1); if(xResult == pdTRUE) { pm_CANcallBack->usLenth = CAN2udp((void *) g_CAN1RxMsg,pm_CANcallBack->ucData); xResult = xQueueSend(xQCAN12UDP,(void *) pm_CANcallBack,0); } xResult = xSemaphoreTake(xSemaphore2, (TickType_t)1); if(xResult == pdTRUE) { pm_CANcallBack->usLenth = CAN2udp((void *) g_CAN2RxMsg,pm_CANcallBack->ucData); xResult = xQueueSend(xQCAN22UDP,(void *) pm_CANcallBack,0); } //接收两个队列 xResult = xQueueReceive(xQCAN12UDP,(void *) m_tMsgudp2,(TickType_t)0); if(xResult == pdPASS) sendto(SOCK_UDPS,m_tMsgudp2->ucData,m_tMsgudp2->usLenth, remote_ip, remote_port); xResult = xQueueReceive(xQCAN22UDP,(void *) m_tMsgudp3,(TickType_t)0); if(xResult == pdPASS) sendto(SOCK_UDPS2,m_tMsgudp3->ucData,m_tMsgudp3->usLenth, remote_ip, remote_port); 接收队列的时候,操作频繁(周期大概40ms),发送错乱的情况:xQCAN12UDP 中有xQCAN22UDP 的数据; 操作不频繁的时候(周期大概400ms),不会发送该情况。 大家有没有遇到这种情况? |
|
相关推荐
2个回答
|
|
难道是数据太多导致失效?是否是发送顺序问题呢,是否是40ms时候延迟的原因呢
|
|
|
|
FreeRTOS队列错乱可能由多种原因导致,以下是一些可能的原因和解决方案:
1. **优先级反转**:如果高优先级任务等待低优先级任务释放队列,而低优先级任务又被其他中等优先级任务抢占,可能导致队列错乱。解决方案是使用优先级继承机制,让中等优先级任务临时提高优先级,以避免优先级反转。 2. **队列溢出**:如果向队列发送的数据超过了队列的容量,可能导致队列错乱。解决方案是增加队列的容量,或者在发送数据前检查队列是否已满。 3. **错误的同步机制**:如果使用了错误的同步机制,如在发送数据前没有正确地获取互斥量或信号量,可能导致队列错乱。解决方案是确保在访问队列之前正确地获取同步机制。 4. **中断服务例程(ISR)和任务之间的竞争**:如果ISR和任务同时访问队列,可能导致队列错乱。解决方案是在访问队列时使用中断安全的操作,如使用互斥量保护临界区。 5. **错误的任务调度**:如果任务之间的调度不正确,可能导致队列错乱。解决方案是检查任务的优先级和调度策略,确保任务按照预期的顺序执行。 6. **错误的队列操作**:如果在使用队列时使用了错误的API,如在发送数据时使用了接收数据的API,可能导致队列错乱。解决方案是仔细阅读FreeRTOS文档,确保正确使用队列API。 7. **内存问题**:如果FreeRTOS运行在有限的内存环境中,可能导致内存泄漏或内存碎片化,进而影响队列的正常工作。解决方案是优化内存管理策略,确保有足够的内存供FreeRTOS使用。 8. **错误的中断配置**:如果中断配置不正确,可能导致ISR无法正确处理队列操作。解决方案是检查中断配置,确保ISR能够正确地处理队列操作。 9. **错误的时序**:如果任务或ISR的执行时间超过了预期,可能导致队列错乱。解决方案是优化任务和ISR的执行时间,确保它们在预期的时间内完成。 10. **错误的调试信息**:如果调试信息不准确,可能导致误判队列错乱。解决方案是仔细检查调试信息,确保它们正确地反映了程序的执行情况。 总之,要解决FreeRTOS队列错乱的问题,需要仔细分析程序的实现和FreeRTOS的文档,找出导致错乱的根本原因,并采取相应的解决方案。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1804 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1629 浏览 1 评论
1097 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
736 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1686 浏览 2 评论
1944浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
748浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
581浏览 3评论
604浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
565浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 18:28 , Processed in 0.859631 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号