完善资料让更多小伙伴认识你,还能领取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貌似有一个函数可以获取每个任务所用的堆栈空间的,找找
|
|
|
|
只有小组成员才能发言,加入小组>>
772 浏览 0 评论
1148 浏览 1 评论
2527 浏览 5 评论
2858 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2709 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1065浏览 3评论
190浏览 2评论
453浏览 2评论
366浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
453浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 02:34 , Processed in 1.218893 second(s), Total 84, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号