zigbee协议栈OSAL运行原理-----个人理解

OSAL按照应用层、硬件层、MAC层等多层运行,每一层被视为一个任务。osal_init_system()初始化任务ID,osal_start_system()通过for循环检查tasksEvents[],若非零则执行相应函数。tasksArr[]存储各层处理事件的函数地址,tasksEvents[]指示是否有事件发生。当tasksEvents[i]非零时,调用tasksArr[i]处理事件。
摘要由CSDN通过智能技术生成

OSAL运行原理:

前提:OSAL是按照不同层运行的。分别是应用层(App)、硬件层(HAL)、mac层(MAC).......等多个层。我们现在把每一层可以当成一个任务。也可以比喻每一层是一个房间。

开始运行:程序从main函数开始执行,一开始是初始化各个模块。然后初始化osal_init_system(),在这个函数里主要给各个层(各个房间)定义任务ID号。从0开始 假设应用层被分到的任务号是8。开始运行OSAL也就是这个函数osal_start_system();在这个函数里用了一个for循环这条语句for(;;),for循环就是来观察哪一层(哪个房间)有事件发生就去处理哪个层(房间)。这就是像高中老师查宿舍一下,如果哪个房间有声音、不熄灯等,   老师就去处理,否则一直在走廊来回检查。

重点内容:我们人很复杂可以通过眼睛、耳朵等知道房间有事情发生,但是程序不知道。它是怎么处理的呢?

先来介绍  每一层(房间)可能发生的事情或者处理的事情怎么表示。

其中tasksArr[]是函数指针。每个层(房间)会发生或者处理各种事情,比如应用层(应用房间)会处理模块类型,还有其他的事情。所有应用层能处理的事情用一个函数a来运行,所有硬件层处理的事物也用一个函数b表示,其它层分别是函数c、函数d等等那么我们把函数a,函数b,函数c。。。他们的地址放到tasksArr[]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值