初级会员

- 积分
- 148
- 金钱
- 148
- 注册时间
- 2017-9-18
- 在线时间
- 40 小时
|
5金钱
大家好,我是一个新人,平时就逛帖子但是不会发帖,最近在项目中遇到一个问题。希望各位大牛能给握指一条明路。
项目中,有了一个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。
谁优先级高谁接受数据就死机。
我查到是由于任务调度的时候发生了些什么,导致这个问题。但是究竟是什么原因且不得而知。
|
|