/*****************************************************************************************************************************************
*Author:JYW
*Time:2019_02_27
*Describe:学而记之进而习之
*****************************************************/
OSAL运行机理:
OSAL就是一种支持多任务运行的系统资源分配机制;
OSAL(Operating System Abstraction Layer)操作系统抽象层;OSAL与标准的操作系统还是有一定的区别的,OSAL实现了类似操作系统的某些功能,例如:任务切换,提供了内存管理功能等,但OSAL并不能称为真正意义上的操作系统;
在ZigBee协议栈中OSAL负责调度各个任务的运行,如果有事件发生了,则会调用相应的事件处理函数进行处理。
事件和任务的事件处理函数是如何联系起来的呢?
Zigbee中采用的方法是:建立一个事件表,保存各个任务的对应的事件,建立另一个函数表,保存各个任务事件处理函数的地址,然后将这两张表建立某种对应关系,当某一事件发生时则查找函数表找到对应的事件处理函数即可;。
在ZigBee协议栈中有三个
/***********************************************
*Time;2019_02_27
*Describe:Zigbee无线传感器网络设计与实现
P74_OSAL运行机理
***********/
//简化后的osal_start_system()函数如下:
void osal_start_system(void)
{
for(;;)
{
uint8 idx = 0; //
osalTimeUpdate();
Hal_ProcessPoll();
do
{
if(tasksEvents[idx])
{
break;
}
}while(++idx < tasksCnt);
if(idx < tasksCnt)
{
uint16 events;
events = tasksEvents[idx];
tasksEvents[idx] = 0;
events = (tasksArr[idx])( idx, events );
tasksEvents[idx] |= events;
}
}
}