//任務初始化函數(shù)
/*********************************************************************
* @fn osalInitTasks
*
* @brief This function invokes the initialization function for each task.
*
* @param void
*
* @return none
*/
void osalInitTasks( void )
{
uint8 taskID = 0;
//osal_mem_alloc為當前OSAL中各任務分配存儲空間,函數(shù)返回指向任務緩沖區(qū)的指針
//因此tasksEvents 指向該任務數(shù)組
tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
//把開辟的內(nèi)存全部設置為0;sizeof( uint16 )為4個字節(jié),即一個任務的長度,乘以任務數(shù)量tasksCnt,為全部內(nèi)存空間
osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));
//初始化MAC層任務,mac_taskID=0
macTaskInit( taskID++ );
//初始化網(wǎng)絡層任務,nwk_taskID=1
nwk_init( taskID++ );
//初始化硬件任務,hal_taskID=2
Hal_Init( taskID++ );
//初始化MT層任務
//MT層:實現(xiàn)通過串口可控制各層,并與各層進行直接交互
#if defined( MT_TASK )
MT_TaskInit( taskID++ );
#endif
//初始化APS層任務
//應用層由三個部分組成,APS 子層,ZDO(包含 ZDO 管理平臺) 和制造商定義的應用對象
//APS:提供NWK層和APL層之間的接口,又名應用支持子層
APS_Init( taskID++ );
//是否已定義分包傳輸
//初始化化APSF層任務
//APSF層是啥東西,還不明白??
#if defined ( ZIGBEE_FRAGMENTATION )
APSF_Init( taskID++ );
#endif
//初始化ZDO應用層任務
ZDApp_Init( taskID++ );
//初始化網(wǎng)絡管理任務
#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
ZDNwkMgr_Init( taskID++ );
#endif
//自定義任務初始化
SampleApp_Init( taskID );
}
說明:
1、任務初始化,就是為系統(tǒng)的各個任務分配存儲空間,當然,這個空間初始化時為全0(NULL),然后為各任務分配taskID;這里的順序要注意.
系統(tǒng)主循環(huán)函數(shù)里tasksEvents[ idx]和tasksArr[ idx]的idx與這里taskID是一一對應關系。
2、指針數(shù)組tasksEvents[ ]里面最終分別指向的是各任務存儲空間
指針數(shù)組tasksArr[ ]里面最終分別指向的是各任務事件處理函數(shù)
這兩個指針數(shù)組里面各元素的順序要一一對應,因為后面需要相應任務調(diào)用相應事件處理函數(shù).