完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,我是一个新人,平时就逛帖子但是不会发帖,最近在项目中遇到一个问题。希望各位大牛能给握指一条明路。
项目中,有了一个RS485和Ble的任务。 代码的框架逻辑是这样的。 uart2中断接受数据 + RS485任务中读取数据&分析数据是否完整 + 解析任务里处理数据帧 uart1中断接受数据 + Ble任务中读取数据&分析数据是否完整 + 解析任务里处理数据帧 处理的方式是:状态机 中断里的状态机: 1> sp_rec_apply 2>sp_rec_filling 3>sp_apply_failed 任务读取数据和分析的状态机: 1>sp_wait_rec_done 2>sp_rec_done 在sp_wait_rec_done 这个状态中使用了信号量 OSSemPend(rs485_sft_cntr.sem, 0, &err_rs485); 实现的功能就是,有数据就运行,没数据就休眠。 但是有一个问题: BLE_REC_TASK_PRIO 7 蓝牙任务的优先级 RS485_REC_TASK_PRIO 8 RS485任务的优先级 在这个优先级的时候一旦蓝牙收数据,就死机,就进hardfault。 BLE_REC_TASK_PRIO 9 蓝牙任务的优先级 RS485_REC_TASK_PRIO 8 RS485任务的优先级 在这个优先级的时候一旦485收数据,就死机,就进hardfault。 谁优先级高谁接受数据就死机。 我查到是由于任务调度的时候发生了些什么,导致这个问题。但是究竟是什么原因且不得而知。 |
|
相关推荐
4个回答
|
|
大多数都是内存溢出造成的,你每个任务的堆栈空间设置多大?
|
|
|
|
是这样的。我蓝牙的堆栈开了50,RS485堆栈开了50。数据帧解析的任务是128个字节。后来我把蓝牙和RS485的堆栈都改到了60.现在测试不死机了。谢谢
|
|
|
|
你好,我能再问你一个问题嘛?我后来测试了下,当蓝牙和485都是 100ms/次发送。还是会进硬件错误。我把堆栈测试了 :
1>堆栈 80 659个数据后死机。 200ms一次 2>堆栈 90 876个数据后死机。 100ms一次 3>堆栈 100 409个数据后死机。 100ms一次 4>堆栈128 230个数据后死机。 100ms一次 好像没什么规律,但是这次还是堆栈引起的嘛? |
|
|
|
每个任务配置128再试试,os貌似有一个函数可以获取每个任务所用的堆栈空间的,找找
|
|
|
|
只有小组成员才能发言,加入小组>>
679 浏览 0 评论
1099 浏览 1 评论
2463 浏览 5 评论
2796 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2634 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
645浏览 9评论
640浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
771浏览 6评论
617浏览 5评论
659浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-16 18:22 , Processed in 0.560771 second(s), Total 82, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号