【发布时间】:2018-05-17 01:04:09
【问题描述】:
我正在尝试使用 FreeRTOS API 运行两个任务。我关注了 Handson Tutorial pdf of FreeRTOS,但我的任务只运行一次就停止了。我在 x86 Intel 上使用 FreeRTOS 内核。我能够编译和运行代码。
我的操作系统是 Ubuntu,我正在使用带有 GCC 的 Eclipse 工具链。如果有人有这方面的经验,他们可以给我一些指导,告诉我如何正确地做。
这是我的代码:
static unsigned long uxQueueSendPassedCount = 0;
void vTask1(void *pvParameters)
{
const char *str_to_display="This is task1\n\r";
while(1)
{
printf("%s",str_to_display);
vTaskDelay(1000);
}
}
void vTask2(void *pvParameters)
{
const char *str_to_display="This is task2\n\r";
while(1)
{
printf("%s",str_to_display);
vTaskDelay(1000);
}
}
int main()
{
xTaskCreate(vTask1, (signed char *)"Task1",1000,NULL,3,NULL);
xTaskCreate(vTask2,(signed char *)"Task2",100,NULL,1,NULL);
vTaskStartScheduler();
while(1)
{
}
return 0;
}
更新: 我尝试过的其他事情:
只创建了一个任务,无限循环,它按预期运行,
只创建了一个任务,添加了
vTaskDelay,我收到错误“分段错误(核心转储)”
【问题讨论】:
-
为什么贴出来的代码调用了一个延迟函数,要求的延迟时间比任务执行率区间还长?如此长时间的延迟会导致问题。
-
任务调度率已经意味着任务调度之间有很多延迟。以如此大的延迟调用延迟例程会导致问题。
-
贴出的代码编译不干净! 1) 缺少所需头文件所需的包含语句 2) 包含未使用的“任务”参数。对于每个未使用的任务参数,作为任务正文的第一行,插入:
(void)pvParameters; -
据我所知,任务中的延迟函数模拟了执行时间。它现在适用于 Ubuntu,在我找到 Uuntu 的 Demo 后,修改了我的代码。它运行良好。
-
你给你的任务几乎没有堆栈空间。 (xTaskCreate 的 3. 参数)给他们更多。 printf 需要大量的堆栈空间。
标签: c gcc multitasking freertos