MCU_ZigBee之OSAL运行机理

/*****************************************************************************************************************************************

*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;
        }
    }
}

 

你可能感兴趣的:(ZigBee)