讲解协议栈怎么运行起来!!
回顾: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;该函数体,如下:
它的本质是把应用层任务事件变量和我们的事件同时进行或起来,如果有事件,那么或起来肯定非零,那么系统判断任务事件变量不为零,那么就进入任务处理事件函数里面来,那么再用该任务事件变量与事件变量进行与的时候,肯定能执行对应事件的代码。
几乎每一个层都是一个任务,那么每一个层都有一个任务ID,都有一个任务处理函数,任务事件变量;
系统把所有任务事件处理A,任务事件处理B,任务事件处理C,等等放到一个函数数组里面;
系统把所有的任务事件变量放到一个变量数组里面来;
验证:进入主函数ZMain.c里面,主要关注osal_init_system();函数和osal_start_system()函数
我们来显示SDApp_TaskID这个值到底是多少,
那么显示为8.
tasksCnt总共有多少任务函数。
以上是任务的初始化,
下面进入函数osal_start_system