微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 如何正确地使用osal_set_event()

如何正确地使用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层中处理这个事件,可以最大程度的提高系统响应性能

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top