完善资料让更多小伙伴认识你,还能领取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,而是使用自定义的数据结构来存储接收到的数据。 通过检查和修改您的代码,您应该能够找到导致中断失效的原因,并解决这个问题。希望这些建议对您有所帮助。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32串口接受中断使用C++STL中的queue导致所有中断失效
5843 浏览 1 评论
3002 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1322 浏览 0 评论
3844 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
3678 浏览 4 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-11 10:31 , Processed in 0.574540 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191