完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
MCU是STM32F413,移植的ucosII,程序创建了4个任务,有一个和触摸屏通讯任务,串口232通讯方式。在只开启两个任务(另两个屏蔽),一个触摸屏任务,一个只运行LED,这种情况下,在操作触摸屏(实际是有读写,串口中断方式发送和接收),通讯数据量50字节以内,这种情况下,未出现死机(进入HardFault_Handler)。但当把另两个任务开启,(都为CAN通讯),任务之间有信号量的传递以及数据锁。当操作触摸屏时,(读写数据,字节少于50),程序会死掉,按照网上的进入HardFault_Handler解决方法跟踪到是死在OS_Sched,当屏蔽掉写触摸屏的部分代码,程序不会毕现的死掉。偶尔死掉也是在切换页面(读写触摸屏,或者读写其他串口)。在中断中都有调用OSIntEnter();OSIntEnter();(由于外部晶振没有,使用的是内部晶振。)
尝试过更改任务优先级,更改任务延时时间(实际这块也不是很会设置),更改任务的堆栈大小(改到4096)都失败。 此问题困扰几天,不知有没有遇到相似问题的朋友或者是这方面的大神、原子哥不吝赐教,谢谢了!!! |
|
相关推荐
9个回答
|
|
有哪位可以给个建议或者方向的?
|
|
|
|
|
|
原子哥,能不能给点建设性帮助?谢谢!
|
|
|
|
把启动文件.S里面的栈大小改大一点,在把所有的任务的任务堆栈也改大试试,如果还不行就接上STLINK调试,看看是哪一行代码进入的hardfault
|
|
|
|
谢谢,按照你说的,我改了.S文件里栈的大小(4096),任务堆栈(4096),现象依然出现,DEBUG调试,程序死在OS_Sched函数最后跳出那一行。还在持续找问题所在,再次谢谢!
|
|
|
|
你好,针对这个问题,我刚测试的现象。我有两个CAN通讯任务,一个CAN通讯,我的接收是定义的消息队列和内存块,接收到CAN数据都放在内存块里,再调函数去取。把这个任务和触摸屏的任务一起运行(均有数据的发送接收),不会出现死机。而另一个CAN通讯任务,我的接收存储只是定义了一个结构体和一个标志位,发完数据,等待(OSTimeDly(1))CAN数据接收标志置位,再取数据。把这个CAN通讯任务和触摸屏的任务一起运行,当CAN任务只发送不接收(命令帧不需要回复),此时并不会死机,当发CAN命令需要回复时(有CAN中断接收时),就死机,毕现。问题似乎出在这个地方,不知有何指导?多谢多谢!(我继续解决中)
|
|
|
|
OS_Sched函数最后跳出那一行出错,说明恢复之前的线程现场出错啊!很可能是堆栈问题。
|
|
|
|
楼主,你的问题解决了没,我也碰到OS_Sched进入HardFault_Handler 的问题,能否给点意见?
|
|
|
|
堆栈?任务堆栈还是启动文件的堆栈?
|
|
|
|
只有小组成员才能发言,加入小组>>
671 浏览 0 评论
1095 浏览 1 评论
2461 浏览 5 评论
2790 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2625 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
643浏览 9评论
639浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
770浏览 6评论
614浏览 5评论
656浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 11:31 , Processed in 1.240475 second(s), Total 95, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号