|
各位坛友,我用的开发板是TL138_1808_6748_EVM,学习sysbios例程GPIO_LED时,例程中创建了一个任务——循环点亮4个led灯,然后我自己创建了一个idle线程,程序摘抄如下:
/*任务*/
Void taskMain(UArg a0, UArg a1)
{
System_printf("Enter taskMain()-------------\n");
UChar i;
// 循环
for(i = 0; i < 5; i++)
{
Task_sleep(1000);
GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_0, GPIO_BANK_PIN_2);// D10灭D7亮
Task_sleep(1000);
GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_5, GPIO_BANK_PIN_0);// D7灭D6亮
Task_sleep(1000);
GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_1, GPIO_BANK_PIN_5);// D6灭D9亮
Task_sleep(1000);
GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_2, GPIO_BANK_PIN_1);// D9灭D10亮
}
// 点亮所有 LED
GPIOPinWrite(SOC_GPIO_0_REGS, 1, GPIO_PIN_HIGH); // D7 亮 GPIO0[0]
GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_HIGH); // D6 亮 GPIO0[5]
GPIOPinWrite(SOC_GPIO_0_REGS, 2, GPIO_PIN_HIGH); // D9 亮 GPIO0[1]
GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_HIGH); // D10 亮 GPIO0[2]
System_printf("Exit taskMain()-------------\n");
System_flush();
}
/*空闲线程*/
Void Idle_task(void)
{
System_printf("Idle thread is running!\n");
System_flush();
}
/*主函数*/
Int main()
{
......
Task_create(taskMain, NULL, NULL);// 创建任务
BIOS_start();// 启动 SYS/BIOS 系统
return(0);
}
关于程序的运行我有两个疑问:
问题1:任务线程taskMain中运行Task_sleep(1000)后,任务线程被Idle线程抢占,Console窗口一直打印“Idle thread is running!”,4个led也没有被循环点亮,证明taskMain没有被执行,这是为什么?难道不应该是Task_sleep(1000)到时间后Idle线程被任务线程抢占而继续执行taskMain吗?
问题2:去掉Idle线程后,任务线程taskMain会被执行一次,但是为什么只执行一次?难道不是任务线程taskMain被循环执行吗?
|
|