下面是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();
}
}