实时操作系统(RTOS)是一种专为实时应用程序设计的操作系统。实时应用程序需要在特定时间内做出预测的响应,因此 RTOS 专注于提供对时间约束的强调,以确保系统能够满足实时性能要求。
实时操作系统在对实时性能有严格要求的应用中发挥着关键作用。通过提供对任务调度、同步、通信和实时时钟的支持,RTOS 使得开发者能够设计和实现对时间要求极高的系统。在嵌入式系统和实时控制领域,RTOS 成为了不可或缺的工具。
FreeRTOS 是一个开源的实时操作系统,广泛用于嵌入式系统。FreeRTOS 提供了对任务调度、同步、通信和实时时钟的支持,使得开发者能够设计和实现对时间要求极高的系统。FreeRTOS 通过 MIT 开源许可免费分发,包括一个内核和一组不断丰富的 IoT 库,适用于所有行业领域。FreeRTOS 的构建突出可靠性和易用性。
FreeRTOS 的开发活动已从 SVN 迁移到 GitHub,现在可以直接在 FreeRTOS 的 Github页面上找到。从 GitHub 下载 FreeRTOS 早期版本 的标准 zip (.zip) 文件或自解压 zip 文件 (.exe) 。解压缩 源代码,同时确保不改动文件夹结构。
FreeRTOS 官方下载页有两个版本的下载包,一个是最新版,一个是长期支持(LTS)版。最新版下载包包含最新 FreeRTOS 内核 、 FreeRTOS-Plus 库 和 AWS IoT 库,以及示例项目。长期支持版下载包则包含 FreeRTOS LTS 库,其中包括 FreeRTOS 内核和 IoT 库,但没有示例项目。可以根据自己需要选择下载。
因为手上正好有 ESP32-C3 小飞控板,所以接下来的 playground 就以这个小板子为例了。而 ESP-IDF 中已经集成了 FreeRTOS,所以我们可以直接使用 ESP-IDF 来开发 FreeRTOS 应用。
配置好 ESP-IDF 开发环境后,按照以下步骤配置实现本示例项目:
确保你已经安装了 ESP-IDF。你可以按照 Espressif 的官方文档 ESP-IDF 安装指南进行安装。
idf.py create-project hello_world
这将创建一个包含默认项目结构的新目录。
cd < project-name >
idf.py menuconfig
这将打开一个菜单配置界面,你可以在其中配置项目的各种选项,包括串口设置、Wi-Fi 配置、组件选项等。配置完成后,保存并退出。
idf.py vscode
这将生成与 Visual Studio Code 兼容的配置文件。
在main
目录下找到hello_world_main.c
文件,写入以下内容:
#include < stdio.h >
#include < inttypes.h >
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
void app_main(void)
{
printf("Hello world!n");
/* Print chip information */
esp_chip_info_t chip_info;
uint32_t flash_size;
esp_chip_info(&chip_info);
printf("This is %s chip with %d CPU core(s), %s%s%s%s, ",
CONFIG_IDF_TARGET,
chip_info.cores,
(chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "",
(chip_info.features & CHIP_FEATURE_BT) ? "BT" : "",
(chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "",
(chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : "");
unsigned major_rev = chip_info.revision / 100;
unsigned minor_rev = chip_info.revision % 100;
printf("silicon revision v%d.%d, ", major_rev, minor_rev);
if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {
printf("Get flash size failed");
return;
}
printf("%" PRIu32 "MB %s flashn", flash_size / (uint32_t)(1024 * 1024),
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
printf("Minimum free heap size: %" PRIu32 " bytesn", esp_get_minimum_free_heap_size());
for (int i = 10; i >= 0; i--) {
printf("Restarting in %d seconds...n", i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
printf("Restarting now.n");
fflush(stdout);
esp_restart();
}
这段代码将输出"Hello World!",并打印一些芯片基本信息。
idf.py build
idf.py -p < PORT > flash
其中
是你的 ESP32 开发板连接到计算机的端口。你可以使用 ls /dev/tty*
(在 Linux/macOS)或 mode
命令(在 Windows)来查找端口。
idf.py -p < PORT > monitor
这将打开一个窗口,显示 ESP32 的串口输出。你可以看到程序的调试信息和日志。
idf.py -p < PORT > flash monitor
运行成功的话,应该会在控制台输出类似以下内容:
Hello world!
This is esp32c3 chip with 1 CPU core(s), WiFi/BLE, silicon revision v0.4, 2MB external flash
Minimum free heap size: 330392 bytes
Restarting in 10 seconds...
Restarting in 9 seconds...
Restarting in 8 seconds...
Restarting in 7 seconds...
Restarting in 6 seconds...
Restarting in 5 seconds...
Restarting in 4 seconds...
Restarting in 3 seconds...
Restarting in 2 seconds...
Restarting in 1 seconds...
Restarting in 0 seconds...
Restarting now.
全部0条评论
快来发表一下你的评论吧 !