码迷,mamicode.com
首页 > 其他好文 > 详细

OSAL的原理

时间:2016-07-30 19:46:06      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:

讲解协议栈怎么运行起来!!
回顾: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

技术分享

技术分享

技术分享

技术分享

技术分享

 

OSAL的原理

标签:

原文地址:http://www.cnblogs.com/gary-guo/p/5721449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!