【发布时间】:2021-02-05 05:29:12
【问题描述】:
下面的代码 sn-p 创建了两个任务,即尝试打印单词。任务 2 已创建 具有更高的优先级。因为这两个任务都在无限循环中运行并且不放弃 自愿开始时间,那么任务 1 永远不会得到(开始时间......如果这是正确的话)。
如何修改“任务 2”回调函数,“任务 1”也将获得开始时间?
void vTaskFunction ( void *pvParameters ) {
for( ;; ) {
vPrintString((char *) pvParameters );
}
}
static const char *pcTextForTask1 = "Task 1 is running\r\n";
static const char *pcTextForTask2 = "Task 2 is running\r\n";
int main( void ) {
/* ...MCU initialization...*/
xTaskCreate( vTaskFunction, "Task 1", 1000, (void*)pcTextForTask1, 1, NULL ); // Task with priority 1
xTaskCreate( vTaskFunction, "Task 2", 1000, (void*)pcTextForTask2, 2, NULL ); // Task with priority 2
vTaskStartScheduler();
for( ;; );
}
我希望这是有道理的
【问题讨论】:
-
这是期望的行为吗?为什么不更改
configUSE_PREEMPTION?您想要获得什么行为?您希望多久运行一次其他函数?为什么不vTaskDelay(10)? -
这是完全可以预料的,一个永远运行的高优先级任务会阻塞任何低优先级的任务。您需要考虑一种方法来为这些优先级较低的任务留出时间。延迟是一种方式。