打开工程:
基于GenericApp无线收发实验\Projects\zstack\Samples\GenericApp\CC2530DB。
OSAL_Example.c
#include "ZComDef.h"
#include "hal_drivers.h" //硬件驱动头文件
#include "OSAL.h" //操作系统头文件
#include "OSAL_Tasks.h" //操作系统任务头文件
#if defined ( MT_TASK ) //串口应用头文件
#include "MT.h"
#include "MT_TASK.h"
#endif
#include "nwk.h" //网络层头文件
#include "APS.h" //应用支持层头文件
#include "ZDApp.h" //设备对象头文件
#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
#include "ZDNwkMgr.h"
#endif
#if defined ( ZIGBEE_FRAGMENTATION )
#include "aps_frag.h"
#endif
#include "Common.h"
// 任务注册
const pTaskEventHandlerFn tasksArr[] = {
macEventLoop, //MAC任务循环
nwk_event_loop, //网络层任务函数
Hal_ProcessEvent, //硬件层函数
#if defined( MT_TASK )
MT_ProcessEvent, //串口支持层定义
#endif
APS_event_loop, //应用支持层任务事件函数
#if defined ( ZIGBEE_FRAGMENTATION )
APSF_ProcessEvent,
#endif
ZDApp_event_loop, //设备对象层函数
#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
ZDNwkMgr_event_loop,
#endif
GenericApp_ProcessEvent //自己定义的任务处理函数
};
const uint8 tasksCnt = sizeof( tasksArr ) / sizeof( tasksArr[0] );
uint16 *tasksEvents;
void osalInitTasks( void )//完成了任务ID的分配,以及所有任务的初始化
{
uint8 taskID = 0;
//分配内存空间
tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));
macTaskInit( taskID++ );//MAC层的任务ID号
nwk_init( taskID++ ); //网络ID分配
Hal_Init( taskID++ ); //硬件ID分配
#if defined( MT_TASK )
MT_TaskInit( taskID++ );
#endif
APS_Init( taskID++ );
#if defined ( ZIGBEE_FRAGMENTATION )
APSF_Init( taskID++ );
#endif
ZDApp_Init( taskID++ );
#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
ZDNwkMgr_Init( taskID++ );
#endif
GenericApp_Init( taskID );//自己任务初始化函数
}
第 1-22 行包含一些相关函数的头文件,相对固定不用过多研究
第 24-41 行 tasksArr 数组里面存放所有任务的任务处理函数,如果操作系查询到了该任务的 ID那么就会调用对应的任务处理函数,该数组的顺序必须和 osalInitTasks 函数的初始化顺序相同。
第 43 行 tasksCnt 保存了任务的个数
第 44 行 tasksEvent 这是一个指针,指向了事件标的首地址
第 45-68 行完成了任务 ID 的分配,以及所有任务的初始化。GenericApp_Init( taskID );是自己任务初始化函数。我们程序初始化部分都可写在此函数中,具体详解在协调器程序中给出。
|