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;该函数体,如下:

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

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

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

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

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

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

那么显示为8.

tasksCnt总共有多少任务函数。

以上是任务的初始化,

下面进入函数osal_start_system

 

posted on   gary_123  阅读(1700)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示