OSAL的原理

讲解协议栈怎么运行起来!!
回顾:1.应用层是一个任务,它有一个系统分配给他的数值唯一的编号叫做任务ID

2.任务可以处理事件,处理事件的这些代码都在一个函数里,这个函数叫任务事件处理函数

3.应用层任务还有一个2个字节的变量,叫做任务事件变量;

任务事件变量和应用层定义的事件的关系,如果事件变量和某个事件的宏值与操作为1,那么表示应用层任务将要处理这个事件。

系统在运行的时候会不断的去读应用层任务事件变量(events),当它发现这个变量为0,则认为应用层当前没有事件需要去处理,如果发现这个变量不为0,它就认为应用层任务有事件将要去处理,它就会去调用应用层任务事件处理函数UINT16 SDApp_ProcessEvent(byte task_id,UINT16 events),并且把任务事件变量的值传给events;在这个事件处理函数里,events这个变量会分别和应用层定义的所有事件宏值进行与操作,如果发现那个值为1,那么就会去处理相应的事件。

设置任务事件函数osal_set_event(SDApp_TaskID,SDApp_MY_MSG_EVT);叫任务SDApp_TaskID来处理事件SDApp_MY_MSG_EVT;该函数体,如下:

OSAL的原理

它的本质是把应用层任务事件变量和我们的事件同时进行或起来,如果有事件,那么或起来肯定非零,那么系统判断任务事件变量不为零,那么就进入任务处理事件函数里面来,那么再用该任务事件变量与事件变量进行与的时候,肯定能执行对应事件的代码。

几乎每一个层都是一个任务,那么每一个层都有一个任务ID,都有一个任务处理函数,任务事件变量;

系统把所有任务事件处理A,任务事件处理B,任务事件处理C,等等放到一个函数数组里面;

系统把所有的任务事件变量放到一个变量数组里面来;

OSAL的原理

验证:进入主函数ZMain.c里面,主要关注osal_init_system();函数和osal_start_system()函数

OSAL的原理

OSAL的原理

OSAL的原理

OSAL的原理

我们来显示SDApp_TaskID这个值到底是多少,

OSAL的原理

那么显示为8.

OSAL的原理

OSAL的原理

tasksCnt总共有多少任务函数。

以上是任务的初始化,

下面进入函数osal_start_system

OSAL的原理

OSAL的原理

OSAL的原理

OSAL的原理

OSAL的原理