嵌入式开发者社区

标题: sysbios任务线程和空闲线程运行疑问 [打印本页]

作者: shxsxlh    时间: 2021-2-18 17:52
标题: sysbios任务线程和空闲线程运行疑问
各位坛友,我用的开发板是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被循环执行吗?

作者: shxsxlh    时间: 2021-2-24 15:33
和裸机单片机程序一样

作者: 广州创龙莫工    时间: 2021-2-25 18:01
相关问题可以通过support@tronlong.com确认一下
作者: shxsxlh    时间: 2021-3-11 16:43
广州创龙莫工 发表于 2021-2-25 18:01
相关问题可以通过确认一下

好的,谢谢




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4