微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > Zstack协议栈中如何确定任务优先级?

Zstack协议栈中如何确定任务优先级?

时间:10-02 整理:3721RD 点击:

 如题

请问是CC2530/CC2538上的协议栈,还是CC2630上面的协议栈

CC2530/CC2538上的协议栈,谢谢VV

轮询的吧,没有优先级

那轮询又是怎样一个机制呢,如何控制优先级吗?

OSAL.C里osal_run_system( void )这个函数就是处理所有事件的。

...

uint8 idx = 0;

do {
if (tasksEvents[idx]) // Task is highest priority that is ready.
{
break;
}
} while (++idx < tasksCnt);

...

这段意思就是idx从0号任务至tasksCnt号任务挨个找,哪个号有任务就break出去执行这个任务。

这个任务号顺序是固定的,如下:

const pTaskEventHandlerFn tasksArr[] = {
macEventLoop,
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

SAPI_ProcessEvent
};

const uint8 tasksCnt = sizeof( tasksArr ) / sizeof( tasksArr[0] );

可以看到macEventLoop是第一号任务,SAPI_ProcessEvent(用户应用)是最后一号任务;系统顺序查询这些任务号有没有需要执行的任务,这就是轮询。

不知道说明白没,你在研究下

我研究下,非常感谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top