新手上路
- 积分
- 41
- 金钱
- 41
- 注册时间
- 2018-12-6
- 在线时间
- 10 小时
|
7金钱
OSAL系统操作原理中,使用了一个定时器中断,并启动了自动重装函数osal_start_reload_timer();定时器事件做的是LED1每隔2MS取反一次。
if ( SBP_PERIODIC_EVT_PERIOD )
{
// SBP_PERIODIC_EVT_PERIOD 为2ms
// 下面的这个函数是自动重装的函数,只要启动之后,就会定时 产生 SBP_PERIODIC_EVT 事件
osal_start_reload_timer( SimpleBLETest_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );
}
同时新增了一个事件用于计算数据的,代码如下,是用osal_set_event()函数触发事件的,
void SaO2_Init( uint8 task_id )
{
SaO2_TaskID = task_id;
osal_set_event( SaO2_TaskID, SaO2_EVT );
}
uint16 SaO2_ProcessEvent( uint8 task_id, uint16 events )
{
VOID task_id;
if( events & SaO2_EVT )
{
SaO2_Heart_Process();
osal_set_event( SaO2_TaskID, SaO2_EVT );
return(events ^ SaO2_EVT);
}
return 0;
}
然后问题就是:如果单独使用 osal_start_reload_timer() 或者 osal_set_event() 的时候都能正常运行,达到预期效果,但是两个函数同时使用之后,就会导致定时器事件触发的频率改变,LED不再是2MS做一次取反。
有大神来解决下我的疑问吗
|
最佳答案
查看完整内容[请看2#楼]
问题已解决,因为这两个函数都是用系统定时器计数的,所以会产生冲突;我把其中一个换成TIMER1就解决这个问题了
|