硬件初始化需要根据HAL文件夹中的hal_board_cfg.h(头文件)文件配置寄存器8051的寄存器(比如说哪些I/O口与什么硬件相连)。
1.2.3.5 OSAL系统
顺利完成上述初始化后,开中断执行osal_start_system( )函数开始运行OSAL系统。
该任务调度函数按照优先级检测各个任务是否就绪,如果存在就绪的任务则调用tasksArr[ ]中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任务。
如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现低功耗。
osal_start_system( )一旦执行,则不再返回Main( )函数。 OSAL程序流程图
OSAL是协议栈的核心
Z-stack的任何一个子系统都作为OSAL的一个任务,因此在开发应用层的时候,必须通过创建OSAL任务来运行应用程序
通过osalInitTasks( )函数创建OSAL任务,其中TaskID为每个任务的唯一标识号
任何OSAL任务必须分为两步:
一是进行任务初始化。
二是处理任务事件。
一、任务初始化主要步骤如下:
(1)初始化应用服务变量。
const pTaskEventHandlerFn tasksArr[ ]数组定义系统提供的应用服务和用户服务变量
(2)分配任务ID和分配堆栈内存
void osalInitTasks( void )主要功能是通过调用osal_mem_alloc( )函数给各个任务分配内存空间,和给各个已定义任务指定唯一的标识号
(3)在AF层注册应用对象
通过填入endPointDesc_t数据格式的EndPoint变量,调用 afRegister( )在AF层注册EndPoint应用对象。 通过在AF层注册应用对象的信息,告知系统afAddrType_t地址类型数据包的路由端点
(4)注册相应的OSAL或者HAL系统服务
在协议栈中,Z-stack提供键盘响应和串口活动响应两种系统服务,但是任何Z-Stask任务均不自行注册系统服务,两者均需要由用户应用程序注册
二、处理任务事件:
处理任务事件通过创建“ApplicationName”_ProcessEvent( )函数处理。一个OSAL任务除了强制事件(Mandatory Events)之外还可以定义15个事件。
SYS_EVENT_MSG(0x8000)是强制事件。该事件主要用来发送全局的系统信息,包括以下信息:
AF_DATA_CONFIRM_CMD:该信息用来指示通过唤醒AF DataRequest( )函数发送的数据请求信息的情况
AF_INCOMING_MSG_CMD:用来指示接收到的AF信息
KEY_ CHANGE:用来确认按键动作
ZDO_ NEW_ DSTADDR:用来指示自动匹配请求
ZDO_STATE_CHANGE:用来指示网络状态的变化
OSAL层是与协议栈独立的,但是整个协议都要基于OSAL才能运行。
OSAL提供如下服务和管理:信息管理、任务同步、时间管理、中断管理、任务管理、内存管理、电源管理以及非易失存储管理
(1)信息管理API
信息管理为任务间的信息交换或者外部处理事件提供一种管理机制。包括允许任务分配或不分配信息缓存、发送命令信息到其他任务、接受应答信息等API函数。
(2)同步任务API
该API允许一个任务等待某个事件的发生并返回等待期间的控制。该API的功能是为某个任务设置事件,一旦任何一个事件被设置就修改该任务。
(3)时间管理API
该API允许定时器被内部(Z-Stack)任务和外部任务使用。该API提供开始和停止一个定时器的功能,这些定时器能用毫秒(ms)设置。
(4)中断管理API
这些API是外部中断和任务的接口。这些API函数允许一个任务为每个中断分配指定服务程序。这些中断能被允许或禁止。在服务程序内,可为其他的任务设置事件。
(5)任务管理API
该API用在管理OSAL中的任务,包括系统任务和用户自定义任务的创建、管理和信息处理等。 zigbee无线火灾报警系统设计+源程序+流程图+电路图(6):http://www.youerw.com/tongxin/lunwen_704.html