TI论坛
直播中

贾佳斌

7年用户 222经验值
私信 关注
[问答]

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

如题

回帖(5)

贾佳斌

2020-4-24 09:15:54
CC2530/CC2538上的协议栈,谢谢VV
举报

王莹

2020-4-24 09:31:08
引用: wangchao28 发表于 2020-4-24 09:15
CC2530/CC2538上的协议栈,谢谢VV

轮询的吧,没有优先级
举报

贾佳斌

2020-4-24 09:42:18
那轮询又是怎样一个机制呢,如何控制优先级吗?
举报

王莹

2020-4-24 09:49:15
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(用户应用)是最后一号任务;系统顺序查询这些任务号有没有需要执行的任务,这就是轮询。
不知道说明白没,你在研究下
举报

更多回帖

发帖
×
20
完善资料,
赚取积分