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





OSAL的原理的更多相关文章
- ZStack串口通信
要使用ZStack就不得不先了解ZStack的OSAL工作原理 http://blog.csdn.net/qinpeng_zbdx/article/details/20990797 http://we ...
- CC2540 OSAL 学习其中原理,以及 给任务 添加 一个事件(定时发送串口消息)
参考学习大神博客: http://blog.csdn.net/feilusia/article/details/51083953 : http://blog.csdn.net/xiaoleiacmer ...
- 【CC2530入门教程-06】CC2530的ADC工作原理与应用
第6课 CC2530的ADC工作原理与应用 广东职业技术学院 欧浩源 一.A/D转换的基本工作原理 将时间上连续变化的模拟量转化为脉冲有无的数字量,这一过程就叫做数字化,实现数字化的关键设备是AD ...
- DAVINCI开发原理
本文中约定: [host] 表示主机PC机Linux [target] 表示目标板Linux DAVINCI开发原理之一----ARM端开发环境的建立(DVEVM) 1. 对DAVINCI平台,TI在 ...
- IAR平台移植TI OSAL到STC8A8K64S4A12单片机中
玩过TI 的ZigBee或者BLE的人,都会接触到OSAL.OSAL是什么?OSAL英文全称:operating system abstraction layer(操作系统抽象层).基于OSAL的调度 ...
- 奇异值分解(SVD)原理与在降维中的应用
奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 线性判别分析LDA原理总结
在主成分分析(PCA)原理总结中,我们对降维算法PCA做了总结.这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结. ...
- [原] KVM 虚拟化原理探究(1)— overview
KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...
随机推荐
- FPGA时序约束一点总结
时序约束的一点总结. 打拍.掌握好时序. 手动分配位置,这个不是一定有效. 打破层级或者物理综合,或者自动加流水等综合优化参数调整. 根据实际情况使用异步时钟策略. 换速度更快的片子. 最也进接手一个 ...
- HTML转义字符表
- 使用wifi网卡笔记4---工具dhcp及全自动使用wifi
dhcp : 使得WIFI网卡动态获取IP ·1.源码获取 输入dh看有哪些应用程序,输入dhclient -v查看一下相关信息,源码获取的网址 2.开发环境配置 解压 tar xzf dhcp-4. ...
- ALSA声卡笔记3--ASoC驱动重要结构体关系图
1.ASoC中重要的数据结构之间的关联方式 (1)Kernel-2.6.35-ASoC中各个结构的静态关系 ASoC把声卡实现为一个Platform Device,然后利用Platform_devic ...
- Druid.io系列(一):简介
原文链接: https://blog.csdn.net/njpjsoftdev/article/details/52955676 Druid.io(以下简称Druid)是面向海量数据的.用于实时查询与 ...
- Angular2 如何使用jquery
网上找了很多版本尝试都不行,最后在stackoverflow上找到一个,尝试完美解决 具体操作步骤如下 1. 安装jquery npm install jquery 2.安装 type for jqu ...
- JAVA中的IO流介绍(2)
一.流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端, ...
- python 之 Collections模块
官方文档:https://yiyibooks.cn/xx/python_352/library/collections.html 参考: https://blog.csdn.net/songfreem ...
- [Cpp primer] Library string Type
In order to use string type, we need to include the following code #include<string> using std: ...
- python中的json的基本使用方法
在python中使用json的时候,主要也就是使用json模块,json是以一种良好的格式来进行数据的交互,从而在很多时候,可以使用json数据格式作为程序之间的接口, #!/usr/bin/env ...