Z-Stack协议栈开发指导:OSAL操作系统框架详解.pdfVIP

  • 0
  • 0
  • 约7.48千字
  • 约 7页
  • 2026-02-13 发布于北京
  • 举报

Z-Stack协议栈开发指导:OSAL操作系统框架详解.pdf

OSAL系统框架

OSAL的全称是OperatingSystem(OS)AbstractionLayer,是一个轻量级的操作系

统,在TI公司的很多产品中,都采用了这套操作系统作为基本的平台,比如ZStack,RemoTI,

BLEStack等等,所以掌握这套操作系统的基本运行原理,对理解Zigbee协议栈以及以后的应

用开发都是非常有帮助的。

首先从main函数的主循环开始入手(main函数位置:

Projects\zstack\ZMain\TI2530DB):

1、主循环任务处理机制

在开始之前,先解释两个重要的概念:任务(task)与事件(event)。

1.1事件(event)的概念

OSAL操作系统以事件驱动为核心,所谓“事件”指的是操作系统管辖的设备及软件模块

中所发生的“事情”,比如按键事件、定时中断事件、无线数据到达事件等等。操作系统的一

个核心功能就是有效地管理这些“事件”,以保证所有事件得以正确完成。

1.2任务(task)的概念

在OSAL中,所有的“事件”会被安排到不同的“任务”里进行执行,比如按键、串口、

LCD等外设均被安排在Hal任务中,而无线数据的底层收发则放在mac任务中等等。

以一个简单的OSAL项目为例:

macTaskInit(taskID++);

nwk_init(taskID++);

Hal_Init(taskID++);

MT_TaskInit(taskID++);

APS_Init(taskID++);

APSF_Init(taskID++);

ZDApp_Init(taskID++);

ZDNwkMgr_Init(taskID++);

SampleApp_Init(taskID);

在系统初始化代码中,初始化了9个任务,各自有一个ID号-taskID。每个任务中又

可以同时处理多个事件,通过一个核心处理函数来管理其下属的每一个事件:

constpTaskEventHandlerFntasksArr[]={

macEventLoop,

nwk_event_loop,

Hal_ProcessEvent,

MT_ProcessEvent,

APS_event_loop,

APSF_ProcessEvent,

ZDApp_event_loop,

ZDNwkMgr_event_loop,

1

SampleApp_ProcessEvent

};

1.3、主循环任务处理机制

主循环代码:

voidosal_start_system(void)

{

#if!defined(ZBIT)!defined(UBIT)

for(;;)//ForeverLoop

#endif

{

osal_run_system();

}

}

下面我们将针对osal_run_system函数处理机制进行解析:

注:为了便于直观,以下涉及到数据地址的地方都是由上而下,地址由高变低。主循

环中的两个关键数组,*tasksEvents与*tasksArr,从图一中我们可以看出来,tasksEvents

这个数组存放的是从序号为0到tasksCnt,表示每个任务在本次循环中是否要被运行。需

要运行的任务其值非0(用橙色表示),否则为0。而tasksArr数组则存放了对应每个任

务的入口地址,只有在tasksEvents中记录的需要运行的任务,在本次循环中才会被调用

到。

所以说,tasksEvents数据存放的内容就是:本任务中是否有事件发生,有哪些事件发生。

如果有事件发生,则执行本任务,否则直接跳到下一个任务中进行判断。当事件处理完成后

文档评论(0)

1亿VIP精品文档

相关文档