【问题标题】:Implementing two tasks in FreeRTOS, unexpected results在 FreeRTOS 中实现两个任务,意外的结果
【发布时间】: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


【解决方案1】:

您使用的是哪个端口?或者你想在 Ubuntu 上运行代码?本书中的项目配置为在 Windows 上运行。

【讨论】:

  • 是的,我在 Ubuntu 上运行,我使用 [freertos.org/FreeRTOS-simulator-for-Linux.html] 作为参考。这个例子在 Linux 上也能正常运行,但不是我写的 demo,有没有办法让它们在 Linux 机器上运行。
猜你喜欢
  • 2019-01-23
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
相关资源
最近更新 更多