This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

有关多两个Task进程实时操作,为什么分别设置了两个Task的优先级别看不出效果了?

Other Parts Discussed in Thread: SYSBIOS

下面是main函数
int main(void)
{
/* Call board init functions */
Board_initGeneral();
Board_initGPIO();

/* Start BIOS */
BIOS_start();

return (0);
}

下面是.cfg文件中静态设置的两个Task函数
/* ================ Kernel configuration ================ */
/* Use Custom library */
var BIOS = xdc.useModule('ti.sysbios.BIOS');
BIOS.libType = BIOS.LibType_Custom;
BIOS.logsEnabled = true;
BIOS.assertsEnabled = true;

var task0Params = new Task.Params();
task0Params.instance.name = "heartBeat";
task0Params.stackSize = 512;
task0Params.priority = 1;
Program.global.heartBeatTask = Task.create("&heartBeatFxn", task0Params);

var task1Params = new Task.Params();
task1Params.instance.name = "heartBeat1";
task1Params.arg0 = 1000;
task1Params.stackSize = 512;
task1Params.priority = 15;
Program.global.heartBeatTask = Task.create("&heartBeatFxn1", task1Params);

下面是两个heartBeatFxn函数

Void heartBeatFxn(UArg arg0, UArg arg1)
{
while (1) {
GPIO_toggle(Board_LED0);//LED0为蓝色灯

Task_sleep(1000);

}
}
Void heartBeatFxn1(UArg arg0, UArg arg1)
{
while (1) {
GPIO_toggle(Board_LED2);//LED2为红色灯

Task_sleep(1000);

}
}

我存在的问题:当我没有设置两个Task的优先级的时候,三色灯显示的颜色的效果是红色跟蓝色的混合颜色亮一段时间,熄灭,亮一段时间熄灭,当我设置Task的两个优先级的时候,显示的还是这蓝色跟红色的混合颜色,然后熄灭,与之前没有设置优先级的时候产生的效果相同,为什么从灯的颜色上面不能够体现出两个Task的优先级那。

当我将两个heartBeatFxn函数改成用Task_yield()写函数(如下)时候,其它程序不变,当设置成相同的优先级的时候,灯显示的颜色为蓝色跟红色的混合色,当我将红色灯Task的优先级设置成高优先级的时候,却只能执行高优先级的程序,三色灯一直显示红色,为什么用Task_sleep(1000)函数通过灯的颜色看不出来Task的优先级,而用Task_yield()函数通过灯的颜色体现出Task的优先级,对这一点感觉理解不了,写了这么多不知道自己是否能表达清楚自己的问题了,希望您能给仔细读下,帮忙给解答下疑惑,谢谢!

Void heartBeatFxn(UArg arg0, UArg arg1)
{
while (1) {
GPIO_toggle(Board_LED0);
SysCtlDelay(20000); //延迟一段时间
Task_yield();


}
}
Void heartBeatFxn1(UArg arg0, UArg arg1)
{
while (1) {
GPIO_toggle(Board_LED2);
SysCtlDelay(20000); //延迟一段时间
Task_yield();
}
}