arduino - 将 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
是正确的。
我想问题可能是堆栈或堆大小太小,但我增加了堆栈和堆大小,但它仍然不起作用。
谁能告诉我问题可能出在哪里?
解决方案
在 setup() 结束时,您需要启动调度程序:
// 现在,任务调度程序会自动启动,它接管了对单个任务的调度控制。
vTaskStartScheduler();
这就是我看到的我的项目和你的项目之间的不同之处。
推荐阅读
- slurm - 从 SLURM 了解 MaxRSS
- python - 多线程:如何停止/编辑单个线程?
- c - Visual Studio 错误:“strcpy_s”:调用的参数太少
- windows - 带有 Unix docker 容器的 Windows 共享卷上的 Git Line Endings 问题
- mysql - 如何使用 TypeORM 列出 MySQL 中现有表中的数据
- google-sheets - 参数必须是一个范围
- php - 使用 PHP 显示用户名或密码反馈消息
- javascript - 无法获取数据库信息以显示到我的网页
- pygame - 从 pymunk 到现实世界的单位
- json - 如何通过密钥访问 JSON 中的数据