在 AWR1642 srrdemo_16xx_mss例程中,task优先级为6的SRR_MSS_mmWaveCtrlTask一直在循环执行,程序是怎么跳转到MmwDemo_mboxReadTask的?
Annie Liu:
执行任何基于事件的任务,大多数都会在信号量上被阻止。
SRR_MSS_mmWaveCtrlTask-> MMWave_execute() ->
/* Pending on the semaphore: Waiting for events to be received */
SemaphoreP_pend (ptrMMWaveMCB->linkSemHandle, SemaphoreP_WAIT_FOREVER);如果是mmwDemo_mboxReadTask,则在'gSrrMSSMCB.mboxSemHandle'信号量上将其阻止:
Semaphore_pend(gSrrMSSMCB.mboxSemHandle, BIOS_WAIT_FOREVER);
因此,当此信号量从邮箱中断中发出时,上面的代码行将被解除阻塞,并且控件将继续执行mboxReadTask中的进一步任务。
请问是否在客户端不继续读取mboxReadTask中的邮箱数据?
user6124565:
回复 Annie Liu:
感谢您的回复,我还有一个问题
在SYS/BIOS中,一个低优先级的task里发布了一个高优先级的task,这个高优先级task是creat完就立即执行?
还是等低优先级task所有语句运行完后才执行?
例如在srrdemo_16xx_mss例程中,SRR_MSS_initTask优先级为3,
在task最后有:
Task_create(SRR_MSS_mmWaveCtrlTask, &taskParams, NULL);
/***************************************************************************** * Setup the CLI *****************************************************************************/ SRR_MSS_CLIInit ();
其运行顺序是立即执行SRR_MSS_mmWaveCtrlTask还是先执行SRR_MSS_CLIInit ()?
Annie Liu:
回复 user6124565:
我不确定以高优先级调用Task_create时任务切换的确切时间。
建议您可以在最后进行实验,在SRR_MSS_mmWaveCtrlTask和SRR_MSS_CLIInit函数中设置标记,看哪个先执行。
或者,您可以为任务设置“ HOOK FUNCTIONS”(挂钩功能),然后根据“钩子命中”来确定它是否已切换到另一个任务。同时,尝试在SysBios论坛中搜索类似的问题。