乐鑫技术交流
直播中

任凭风吹

10年用户 1084经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术 制造/封装 模拟技术
私信 关注
[问答]

esp32-c3工程中怎么创建多个freertos任务?

ESP-IDF中给出的ESP32-C3的例程都只有一个任务。即void app_main()
而且没看见这个app_main任务是在哪里被创建的???
如果我想建一个ESP32-C3的多任务的工程该怎么实现呢?

如果芯片设置成ESP32(idf.py set-target esp32),可以用带有多任务创建的例程。也可以编译成功。
就是不知道当把芯片选成esp32-c3时怎么做。

请大佬帮忙指点下

回帖(1)

王刚

2024-6-27 16:48:10
在ESP32-C3项目中创建多个FreeRTOS任务的方法与ESP32类似。以下是创建多个任务的步骤:

1. 首先,确保您已经安装了ESP-IDF开发框架。如果还没有安装,请访问https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/getting-started/index.html#installation-step-by-step 按照指南进行安装。

2. 创建一个新的ESP-IDF项目。打开终端,输入以下命令:
```
mkdir my_project
cd my_project
idf.py create-project my_project
```

3. 将目标设置为ESP32-C3:
```
idf.py set-target esp32c3
```

4. 在`main`文件夹下创建一个新的C文件,例如`task1.c`和`task2.c`。在这两个文件中分别编写任务的实现代码。

5. 在`main`文件夹下的`CMakeLists.txt`文件中添加新创建的C文件:
```
set(COMPONENT_SRCS "main.c" "task1.c" "task2.c")
```

6. 在`task1.c`和`task2.c`文件中,使用`xTaskCreate()`函数创建任务。以下是一个示例:
```c
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

void task1(void *pvParameters) {
    // 任务1的代码
    vTaskDelete(NULL);
}

void task2(void *pvParameters) {
    // 任务2的代码
    vTaskDelete(NULL);
}
```

7. 在`app_main()`函数中调用`xTaskCreate()`函数创建任务:
```c
#include "esp_system.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

extern void task1(void *pvParameters);
extern void task2(void *pvParameters);

void app_main() {
    xTaskCreate(task1, "Task1", 2048, NULL, 1, NULL);
    xTaskCreate(task2, "Task2", 2048, NULL, 1, NULL);
}
```

8. 编译并上传代码到ESP32-C3设备:
```
idf.py build
idf.py flash
```

9. 观察串口输出,确认两个任务是否正常运行。

通过以上步骤,您可以在ESP32-C3项目中创建多个FreeRTOS任务。注意,ESP32-C3与ESP32在FreeRTOS任务创建方面没有太大区别,因此您可以根据ESP32的多任务示例进行参考。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分