首页 > 解决方案 > 将 freeRTOS 与两个任务一起使用时出现意外行为

问题描述

我正在使用带有 Arduino Uno 的 MPU9250 分线板。
我使用的图书馆来自这里
下面是我的代码。

#include <Arduino_FreeRTOS.h>

#include "mpu9250.h"

MPU9250 IMU(Wire,0x68);
int status;

void task_1(void *pvParameters)
{
  (void) pvParameters;

  for (;;)
  {
  }
}

void task_2(void *pvParameters)
{
  (void) pvParameters;

  for (;;)
  {
  }
}

void setup() {
  Serial.begin(115200);
  while(!Serial) {}

  status = IMU.begin();
  if (status < 0) {
    Serial.println("IMU initialization unsuccessful");
    Serial.println("Check IMU wiring or try cycling power");
    Serial.print("Status: ");
    Serial.println(status);
    while(1) {}
  }

  xTaskCreate(
  task_2,
  (const portCHAR *)"task2", // A name just for humans
  128, // Stack size
  NULL,
  1, // priority
  NULL);

  xTaskCreate(
  task_1,
  (const portCHAR *)"task1", // A name just for humans
  128, // Stack size
  NULL,
  1, // priority
  NULL);

}

void loop()
{

}

问题是当定义了两个任务时,程序会自动重启。但是当我注释掉时task_1,程序运行良好。的结果值xTaskCreate是正确的。

我想问题可能是堆栈或堆大小太小,但我增加了堆栈和堆大小,但它仍然不起作用。

谁能告诉我问题可能出在哪里?

标签: arduinoarduino-unofreertos

解决方案


在 setup() 结束时,您需要启动调度程序:

// 现在,任务调度程序会自动启动,它接管了对单个任务的调度控制。

vTaskStartScheduler();

这就是我看到的我的项目和你的项目之间的不同之处。


推荐阅读