0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是实时操作系统(RTOS)

CHANBAEK 来源: FunIO 作者: FunIO 2023-11-23 17:14 次阅读

什么是实时操作系统RTOS

实时操作系统(RTOS)是一种专为实时应用程序设计的操作系统。实时应用程序需要在特定时间内做出预测的响应,因此 RTOS 专注于提供对时间约束的强调,以确保系统能够满足实时性能要求。

1. 实时性能:

  • 硬实时和软实时: RTOS 可以根据实时性能的要求分为硬实时和软实时。硬实时系统对任务的响应时间有极严格的要求,任何未能在规定时间内完成的任务都会被认为是失败。软实时系统也有时间要求,但相对灵活,任务未能在规定时间内完成并不会导致系统失败。

2. 任务调度:

  • 实时调度算法 RTOS 使用实时调度算法来确定哪个任务将在处理器上运行。这些算法考虑任务的优先级、截止期限和其他实时要求。
  • 时间片轮转: 在一些情况下,RTOS 可能使用时间片轮转调度,确保每个任务都有机会运行,以防止某个任务长时间独占处理器。

3. 任务管理:

  • 任务创建与删除: RTOS 允许创建和删除任务。任务可以是独立运行的单元,执行特定的功能。
  • 任务同步和通信 提供机制使任务能够同步和通信,如信号量、互斥锁、消息队列等。

4. 内存管理:

  • 动态内存分配: 一些 RTOS 支持动态内存分配,允许在运行时分配和释放内存。
  • 静态内存分配: 为了提高可预测性,一些 RTOS 可能支持静态内存分配,即在编译时为任务分配内存。

5. 中断处理:

  • 中断服务例程(ISR): RTOS 允许开发人员编写中断服务例程,以处理硬件中断事件。
  • 中断优先级: 中断服务例程可以具有不同的优先级,RTOS 确保高优先级的中断可以中断低优先级的中断或任务。

6. 实时时钟定时器

  • 实时时钟: 提供对实时时钟的支持,以便任务能够基于实际时间进行调度和同步。
  • 定时器: 允许设置和管理定时器,以在指定时间触发任务或事件。

7. 错误处理:

  • 错误检测与处理: RTOS 通常提供错误检测和处理机制,以确保系统在出现错误时能够采取适当的措施。

8. RTOS 应用领域:

9. 示例 RTOS:

  • FreeRTOS 一个开源的实时操作系统,广泛用于嵌入式系统。
  • VxWorks 用于嵌入式实时系统的商业 RTOS。
  • RTOS-32: 针对 Windows 平台的实时操作系统。

10. RTOS 与通用操作系统的区别:

  • 实时性能: RTOS 关注实时性能,而通用操作系统通常更注重吞吐量和响应时间。
  • 内核大小: RTOS 通常具有更小、更精简的内核,以确保快速启动和响应。
  • 任务调度: RTOS 使用实时调度算法,以确保任务在规定时间内完成。

实时操作系统在对实时性能有严格要求的应用中发挥着关键作用。通过提供对任务调度、同步、通信和实时时钟的支持,RTOS 使得开发者能够设计和实现对时间要求极高的系统。在嵌入式系统和实时控制领域,RTOS 成为了不可或缺的工具。

FreeRTOS

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 应用。

Hello World

配置好 ESP-IDF 开发环境后,按照以下步骤配置实现本示例项目:

步骤 1: 安装 ESP-IDF

确保你已经安装了 ESP-IDF。你可以按照 Espressif 的官方文档 ESP-IDF 安装指南进行安装。

步骤 2: 创建新项目

  1. 打开终端或命令提示符窗口,切换到你希望创建项目的目录。
  2. 运行以下命令来创建一个新的 ESP-IDF 项目:
idf.py create-project hello_world

这将创建一个包含默认项目结构的新目录。

步骤 3: 进入项目目录

cd < project-name >

步骤 4: 配置项目

  1. 运行以下命令配置项目:
idf.py menuconfig

这将打开一个菜单配置界面,你可以在其中配置项目的各种选项,包括串口设置、Wi-Fi 配置、组件选项等。配置完成后,保存并退出。

  1. (可选) 如果你想使用 VSCode 或其他 IDE 进行开发,可以运行以下命令生成 IDE 项目文件:
idf.py vscode

这将生成与 Visual Studio Code 兼容的配置文件。

步骤 5: 编译和烧录

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!",并打印一些芯片基本信息

  1. 使用以下命令编译项目:
idf.py build
  1. 使用以下命令烧录固件到 ESP32:
idf.py -p < PORT > flash

其中 是你的 ESP32 开发板连接到计算机的端口。你可以使用 ls /dev/tty*(在 Linux/macOS)或 mode 命令(在 Windows)来查找端口。

步骤 6: 监视串口输出

  1. 使用以下命令启动监视串口输出:
idf.py -p < PORT > monitor

这将打开一个窗口,显示 ESP32 的串口输出。你可以看到程序的调试信息和日志。

  1. 如果你修改了代码并重新编译,可以使用以下命令重新烧录并启动监视:
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.
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    40

    文章

    3430

    浏览量

    128220
  • 操作系统
    +关注

    关注

    37

    文章

    6284

    浏览量

    121880
  • RTOS
    +关注

    关注

    20

    文章

    776

    浏览量

    118796
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61347
  • 实时操作系统

    关注

    1

    文章

    184

    浏览量

    30516
收藏 人收藏

    评论

    相关推荐

    一文详解实时操作系统(RTOS)

    实时操作系统 (RTOS) 是管理微处理器或微控制器时间的软件。实时系统指如果系统的逻辑和时序正
    发表于 08-30 11:10 9124次阅读

    实时操作系统RTOS有什么要点?

    对许多嵌入式项目来说,系统设计师都倾向于选择实时操作系统(RTOS)。但RTOS总是必要的吗?答案是取决于具体的应用,因此了解我们要达到什么
    发表于 04-01 07:48

    嵌入式实时操作系统RTOS

    前言自20世纪90年代,鉴于多任务支持、开发便捷、便于维护等特性,同时能够提高系统的稳定性和可靠性,嵌入式实时操作系统RTOS)逐渐为广大嵌入式从业人员所接受和认可,越来越多的工程师
    发表于 08-05 06:14

    怎样去更好地使用嵌入式实时操作系统RTOS

    为什么嵌入式实时操作系统RTOS会被广泛使用?怎样去更好地使用嵌入式实时操作系统RTOS呢?
    发表于 11-02 06:41

    实时操作系统RTOS)是指什么

    计算机三级知识点总结五嵌入式系统实时系统(RTS)实时操作系统RTOS
    发表于 12-23 06:39

    选择实时操作系统(RTOS)的要点详解

      对许多嵌入式项目来说,系统设计师都倾向于选择实时操作系统(RTOS)。但RTOS总是必要的吗?答案是取决于具体
    发表于 10-28 10:41 9113次阅读
    选择<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>(<b class='flag-5'>RTOS</b>)的要点详解

    MSP432 MCU 提供多个实时操作系统 (RTOS) 解决方案

    MSP432 MCU平台上。用32位ARM系统进行开发时通常需要立即应对多个操作在这种情况下,实时操作系统 (RTOS) 会派得上用场。
    发表于 04-26 16:30 3105次阅读
    MSP432 MCU 提供多个<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b> (<b class='flag-5'>RTOS</b>) 解决方案

    如何安装实时操作系统RTOS

    要想最大限度地发挥Zynq All Programmable SoC的优势,您需要一款操作系统。本文将介绍如何安装实时操作系统—这里特指μC/OS-III。要想从最大限度地发挥赛灵思Zynq
    发表于 11-18 10:08 5908次阅读
    如何安装<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b><b class='flag-5'>RTOS</b>

    什么是实时操作系统(RTOS)

    Windows等操作系统与嵌入式系统中常用的RTOS的主要区别,在于对外部事件的响应时间。Windows等普通OS提供对事件的不确定性响应,即使试图保持响应速度也无法保证何时处理事件。
    的头像 发表于 04-29 14:49 1.5w次阅读

    实时操作系统RTOS相比裸机的优势有哪些?

    足等。   针对这部分朋友,今天分享几点相关内容:  嵌入式系统中,有很多方式实现任务调度。功能有限的小系统中,无限循环足够实现小系统的功能。当软件设计变得庞大且复杂时,开发者应该考虑使用实时
    的头像 发表于 12-25 15:48 6237次阅读

    选择实时操作系统(RTOS)的要点详解

    对许多嵌入式项目来说,系统设计师都倾向于选择实时操作系统RTOS)。但RTOS总是必要的吗?答案是取决于具体的应用,因此了解我们要达到什么
    的头像 发表于 11-18 10:02 2797次阅读

    实时操作系统RTOS简介

      要了解RTOS,让我们退后一步,看看什么是“通用操作系统”(GPOS)。您可能已经熟悉 GPOS,因为它们可以在您每天使用的设备上找到,例如智能手机和工作电脑(例如 Android、Windows 等)。
    的头像 发表于 11-30 14:56 3138次阅读

    选择实时操作系统(RTOS)的要点详解

    对许多嵌入式项目来说,系统设计师都倾向于选择实时操作系统(RTOS)。但RTOS总是必要的吗?答案是取决于具体的应用,因此了解我们要达到什么
    发表于 05-30 09:45 779次阅读

    实时操作系统(RTOS)和分时操作系统(TSOS)的区别

    大家平时玩单片机基本上对于µC/OS、FreeRTOS、ThreadX这些操作系统非常熟悉了,他们都属于实时操作系统RTOS),在工业领域比较广泛;然而对于linux这样的基于时间片
    发表于 09-21 10:19 3318次阅读

    带你认识实时操作系统(rtos)

    实时操作系统RTOS)是为嵌入式系统实时应用提供一个稳定、可预测和高效运行环境的操作系统
    的头像 发表于 04-16 16:30 126次阅读
    带你认识<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>(<b class='flag-5'>rtos</b>)