ZigBee的OSAL机制
更新时间:2023-12-08 23:28:01 阅读量: 教育文库 文档下载
一、OSAL概述
首先OSAL是以实现多任务为核心的系统资源管理机制,它和标准的操作系统还是有很大区别的。简单而言,OSAL实现了类似操作系统的“某些”功能,但并不能称之为真正意义上的操作系统。Chipcon公司为自己设计的ZStack协议栈中提供了一个名为操作系统抽象层OSAL的协议栈调度程序。
二、OSAL任务运行方式
ZigBee协议栈的每一层都设计了一个事件处理函数,用来处理每一层相对应的各种事件,这些处理函数我们可以理解成是与各层相对应的任务函数,它们由OSAL来进行管理。
因为整个程序只有一个main函数,我们就从这个函数入手(在此我以sample这个例程为例来说明):
在ZMain.c中有: ZSEG int main( void ) {
osal_int_disable( INTS_ALL ); // Turn off interrupts 关中断
HAL_BOARD_INIT(); // Initialize HAL 初始化硬件抽象层
zmain_vdd_check(); // Make sure supply voltage is
high enough to run检测电源电压保证正常运行
zmain_ram_init(); // Initialize stack memory 初始化内存
InitBoard( OB_COLD ); // Initialize board I/O 初始化板子上的IO口
HalDriverInit(); // Initialze HAL drivers 初始化硬件抽象层驱动
osal_nv_init( NULL ); // Initialize NV System 初始化非易失存储系统
zmain_ext_addr(); // Determine the extended address 确定扩展地址也就是64位的IEEE地址
zgInit(); // Initialize basic NV items 初始化基本的NV条目
ZMacInit(); // Initialize the MAC 初始化MAC层
#ifndef NONWK
afInit(); // Since the AF isn't a task, call it's
initialization routine
#endif
osal_init_system(); // Initialize the operating system 初始化操作系统
osal_int_enable( INTS_ALL ); // Allow interrupts 打开中断
InitBoard( OB_READY ); // Final board initialization 最终板子的初始化
zmain_dev_info();// Display information about this device 显示关于设备的信息
#ifdef LCD_SUPPORTED /* Display the device info on the LCD */显示设备信息在LCD上
zmain_lcd_init(); #endif
osal_start_system(); // No Return from here 启动操作系统 没有返回值
} // main()
我们可以看出里面都是一些初始化函数,但main是按照一定的顺序对系统进行初始化的。在这些函数中与我们最相关的有两个: 1、 osal_init_system(); 操作系统初始化函数 2、 osal_start_system(); 启动操作系统 我们看osal_init_system()这个函数 byte osal_init_system( void ) {
osal_mem_init();// Initialize the Memory Allocation System初始化内存分配系统
osal_qHead = NULL; // Initialize the message queue 初始化消息队列(任务之间的通信就靠消息队列)
#if defined( OSAL_TOTAL_MEM ) osal_msg_cnt = 0; #endif
osalTimerInit(); // Initialize the timers 初始化定时器
osal_pwrmgr_init(); // Initialize the Power Management System初始化电源管理系统
osalInitTasks(); // Initialize the system tasks.初始化系统任务
osal_mem_kick(); // Setup efficient search for the first free block of heap.设置对堆上空闲块的有效查找 return ( ZSUCCESS ); }
在程序中对这个函数的描述是这样的:
This function initializes the \tasks defined in the task table (OSAL_Tasks.h).
这个函数通过创建任务(在OSAL_Tasks.h中的任务列表)来初始化“任务”系统。因此这个函数中最最主要的也就是osalInitTasks();这个函数了,跟踪它:
在OSAL_SampleApp.c中找到了它,也就是说这已经和我们设置自己的应用有关!!
void osalInitTasks( void ) {
uint8 taskID = 0; 任务ID 初始化为0.
tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
正在阅读:
ZigBee的OSAL机制12-08
人教班三年级上册各单元复习重点03-08
学生自我评语02-24
汽车构造03-31
每天看一遍让你成熟至少5岁01-29
市委党建工作汇报材料03-08
c语言12-30
道路设计总说明09-27
探析我国人力资源培训的问题及策略03-08
《建筑施工技术》试题及答案01-27
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 机制
- ZigBee
- OSAL
- 眼科复习题
- 2018-公需课最新最全电子商务考试答案(保通过).docx
- 严复 吴宓 梁启超
- STM32F4系列RTC模块中文翻译
- PS版梦幻模拟战1攻略+附日文官方网站针对隐藏物品说明
- 学期教育专业本科生专业认同情况的调查研究--开题报告
- 《传播学教程》郭庆光- 大理学院成教在线- 首页
- 新医改下医疗卫生机构国有资产管理探讨
- 中南大学研究生学位论文答辩程序与要求
- 塑料制小雕塑品及其他装饰品(HS 392640)2015-2016俄罗斯(1769个)进口商排名 - 图文
- 房屋建筑学 习题3
- 细说怎么实现企业高效经营管理
- 淋浴方案电热水器选型
- 第三章 跨国公司
- 数控铣床理论试题
- 2015-2011年国税面试真题
- 机械制造企业事故应急预案
- 以林冲的性格变化浅析狄德罗的
- 汽车电控技术复习题库
- 《小学语文课外阅读指导有效策略的研究》课题实施方案