#ifdef __cplusplus
extern "C"
{
#endif
extern void osalAddTasks( void );
#ifdef __cplusplus
}
#endif
条件编译,如果定义了__cplusplus,则代码为
extern "C"
{
extern void osalAddTasks( void );
}
否则为:
extern void osalAddTasks( void );
上面讲到的就是一个zigbee操作系统提供的添加任务的接口函数,
该函数是应用层与os直接的链接桥梁,开发人员在开发自己的特殊功
能与应用时,要把功能与应用以任务的形式添加到操作系统队列中,
调用的正是void osalTaskAdd( pTaskInitFn pfnInit,
pTaskEventHandlerFn pfnEventProcessor,
byte taskPriority);
任务添加的过程分析
1.如果任务是空的,ptr = &tasksHead *prt = newTask
,//tasksHead = newTask
说明新建任务就是任务队列的头任务,理解起来没什么问题
2.如果任务不是空的,就要看新加入的任务的优先级了,如果优先级
较低,要求比已经存在的头任务的优先级低,那么它是这样加入的:
ptr = &tasksHead;
srchTask = tasksHead;
while(srchTask){
ptr = &srchTask->next;
srchTask = srchTask->next;
}
*ptr = newTask;
将任务插入点逐渐后移,直到插入点位空,在while()循环结束时,
srchTask指针为空,ptr保存的已经是这个空指针的地址,此时要做
的就是把新任务的指针赋值给这个空指针,这样,新任务就添加到队
列的末尾了,ptr即为新任务指针的地址。
3.如果任务不是空的,且新任务的优先级高于当前头任务的优先级,
处理起来只需将新任务添加在当前头任务的前面,
newTask->next = srchTask;
*ptr = newTask;
return;//函数立即返回
添加任务要注意,添加的信息即为任务初始化函数,任务事件处理函数,任务优先级。