初级会员 
  
	- 积分
 - 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。 
 
谁优先级高谁接受数据就死机。 
我查到是由于任务调度的时候发生了些什么,导致这个问题。但是究竟是什么原因且不得而知。 
 
 |   
 
 
 
 
 
 |