带有getchar()的低优先级任务会在FreeRTOS中停止较高的任务-如何解决该问题?

时间:2018-10-27 00:08:15

标签: freertos

我有两个功能:

shell()使用getchar()获取用户输入

playLED()播放LED动画

我有两个在FreeRTOS中运行的任务

    xTaskCreate(
                    shell,
                    "shell",
                    512,
                    NULL,
                    1,
                    NULL);

    xTaskCreate(
                    playLED,
                    "playLED",
                    512,
                    NULL,
                    15,
                    NULL );
    vTaskStartScheduler();

然后我注意到LED动画播放是逐步进行的,仅当getchar()接收到用户输入时才会更改,而不是平滑的动画。

我已经将LED优先级设置得更高,但这并不能解决停机问题。还有什么我应该在某处配置的吗?

代码在带有MCUXpresso的NXP LPC54018板上运行。在https://os.mbed.com/questions/781/Skip-getchar-if-no-input-using-interrupt/

上可以找到其他设备上的类似问题。

2 个答案:

答案 0 :(得分:1)

getchar()在接收输入时是否完全禁用中断?在这种情况下,FreeRTOS调度程序将无法运行高优先级任务。

答案 1 :(得分:0)

我认为使用getChar的任务开头的vTaskDelay(1)将解决此问题。

您还可以更改任务创建的顺序,它也可以提供帮助。