完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
工程参数
遇到问题串口发送是没有问题的,如果不是使用STL的 最奇怪的是之前这一套方案是可行的,但是写完定时器的代码后就不行了, 尽管不开定时器也不行 。 代码串口相关类成员变量定义:
中断函数定义:
自定义分配器
祝各位看到帖子和解决问题的大佬们身体健康,万事如意 |
|
相关推荐
1个回答
|
|
|
根据您的描述,您在使用STM32串口接收中断时,使用了C++ STL中的queue,导致所有中断失效。您使用的是Keil的AC5编译器,搭配C++11,在Keil环境中开发STM32F103C8T6,并移植了FreeRTOS。您已经定义了内存分配器OSAllocator,并使用heap4.c中的pvPortMalloc重载new。
首先,我们需要检查您的代码,以确保没有错误或冲突。以下是一些建议和可能的解决方案: 1. 确保您的FreeRTOS配置正确。检查FreeRTOSConfig.h文件中的配置参数,确保与您的硬件和需求相匹配。 2. 检查您的中断优先级设置。确保串口接收中断和定时器中断的优先级设置正确,以避免优先级冲突。 3. 检查您的串口中断服务例程(ISR)。确保在ISR中正确地处理数据,并将其放入queue中。同时,确保在ISR中没有使用过多的时间,因为这可能会导致其他中断被阻塞。 4. 检查您的queue实现。确保queue的大小足够大,以避免溢出。同时,确保在queue中正确地处理数据,以避免死锁。 5. 检查您的定时器中断服务例程。确保定时器中断服务例程正确地处理定时器中断,并避免与其他中断冲突。 6. 如果可能,尝试使用其他数据结构代替queue,例如使用环形缓冲区。这可能会减少中断失效的问题。 7. 检查您的代码,确保没有其他可能导致中断失效的问题。例如,确保没有使用过多的堆栈空间,或者在中断服务例程中调用了可能导致阻塞的函数。 8. 如果问题仍然存在,您可以尝试使用不同的内存分配器,或者不使用STL的queue,而是使用自定义的数据结构来存储接收到的数据。 通过检查和修改您的代码,您应该能够找到导致中断失效的原因,并解决这个问题。希望这些建议对您有所帮助。 |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 15:21 , Processed in 0.459696 second(s), Total 46, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3156