如何正确地使用osal_set_event()
时间:10-02
整理:3721RD
点击:
最近做蓝牙开发,在应用层自定义了一些事件,有时搞不清楚到底是该调用osal_set_event(),还是该直接调用相应的函数,问题举例如下:
在应用层中,配置了P1_6引脚上的中断处理函数,当中断触发时,需要执行相应的操作,如下:
#pragma vector=P1INT_VECTOR __interrupt void P1_IRQ(void) { if(P1IFG&(1<<6)) //P1.6的中断 { BATT_Check_Event(); } P1IFG &= ~(1<<6); //清P1.6中断 P1IF = 0; //清中断标志位 }
同时,由于需要,定义了一个事件,应用层事件处理函数中的事件代码如下:
if ( events & SBP_BATTERY_CHECK_EVT ) { BATT_Check_Event(); return ( events ^ SBP_BATTERY_CHECK_EVT ); }
那么,在中断处理函数中,我是应该直接调用BATT_Check_Event(),还是使用osal_set_event(taskID,SBP_BATTERY_CHECK_EVT)?
求指点,谢谢!
我觉得应该是调用osal_set_event()发了一个event到回调函数里面,然后在回调函数里面处理中断事件
这样做也许会损失掉一些中断响应时间,但是不容易让处理事件的时间阻塞中断处理。
基本原则:中断应该尽量少的执行代码
所以,在ISR中设置标志位或者事件标准,在APP层中处理这个事件,可以最大程度的提高系统响应性能