讲解协议栈怎么运行起来!!
回顾: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的原理的更多相关文章

  1. ZStack串口通信

    要使用ZStack就不得不先了解ZStack的OSAL工作原理 http://blog.csdn.net/qinpeng_zbdx/article/details/20990797 http://we ...

  2. CC2540 OSAL 学习其中原理,以及 给任务 添加 一个事件(定时发送串口消息)

    参考学习大神博客: http://blog.csdn.net/feilusia/article/details/51083953 : http://blog.csdn.net/xiaoleiacmer ...

  3. 【CC2530入门教程-06】CC2530的ADC工作原理与应用

    第6课  CC2530的ADC工作原理与应用 广东职业技术学院  欧浩源 一.A/D转换的基本工作原理 将时间上连续变化的模拟量转化为脉冲有无的数字量,这一过程就叫做数字化,实现数字化的关键设备是AD ...

  4. DAVINCI开发原理

    本文中约定: [host] 表示主机PC机Linux [target] 表示目标板Linux DAVINCI开发原理之一----ARM端开发环境的建立(DVEVM) 1. 对DAVINCI平台,TI在 ...

  5. IAR平台移植TI OSAL到STC8A8K64S4A12单片机中

    玩过TI 的ZigBee或者BLE的人,都会接触到OSAL.OSAL是什么?OSAL英文全称:operating system abstraction layer(操作系统抽象层).基于OSAL的调度 ...

  6. 奇异值分解(SVD)原理与在降维中的应用

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...

  7. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  8. 线性判别分析LDA原理总结

    在主成分分析(PCA)原理总结中,我们对降维算法PCA做了总结.这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结. ...

  9. [原] KVM 虚拟化原理探究(1)— overview

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

随机推荐

  1. (转)Inno Setup入门(十六)——Inno Setup类参考(2)

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250967 这里将接着在前面的基础上介绍如何在自定义页面上添加按钮 ...

  2. kotlin学习三:初步认识kotlin(第二篇)

    上一章熟悉了kotlin基本的变量和函数声明,并明白了如何调用函数.本章再来看一些其他有用的东西 包括: 1. kotlin代码组织结构 2. when语法 3. 循环迭代语法 4. try表达式 1 ...

  3. PHP中exit,exit(0),exit(1),exit('0'),exit('1'),die,return的区别

    die('1')  die()和exit()都是中止脚本执行函数:其实exit和die这两个名字指向的是同一个函数,die()是exit()函数的别名.该函数只接受一个参数,可以是一个程序返回的数值或 ...

  4. python学习(二十七) 元组

    # 元组是不可变的,不能改变元素的值,也不能增加.减少元素my_tuple = (1, 2, 3, 3)print(my_tuple) # 查找元素位置print(my_tuple.index(2)) ...

  5. form中的input的redonly和disable区别

    Readonly和Disabled是用在表单中的两个属性,它们都能够做到使用户不能够更改表单域中的内容.但是它们之间有着微小的差别,总结如下: Readonly只针对input(text / pass ...

  6. Django的路由层(URLconf)

    URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对 ...

  7. [Python] WeChat_Robot

    在微信中接入一个聊天机器人 1. WeChat 个人接口itchat 2. 图灵机器人 #-*- coding:utf-8 -*- import itchat import requests apiU ...

  8. quartz报错 Couldn't retrieve job because the BLOB couldn't be deserialized: null

    今天线上添加定时任务之后 定时任务查询页面报出如上错误, 原因有两点 1.org.quartz.jobStore.useProperties = true 这个属性的意思存储的JobDataMaps是 ...

  9. 设置请求头解决浏览器同源问题,ajx跨域获取cookie问题

    思想: 添加过滤器 设置请求头 代码如下 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.F ...

  10. redis的二种启动方式

    .直接启动  进入redis根目录,执行命令:  #加上‘&’号使redis以后台程序方式运行 1 ./redis-server & 2.通过指定配置文件启动  可以为redis服务启 ...