跑RTOS对单片机有什么要求?

原创 strongerHuang 2025-06-18 20:00
关注+星标公众,不错过精彩内容
作者 | strongerHuang
微信公众号 | strongerHuang

有初学的小伙伴问:跑RTOS系统,对单片机有什么要求?

这是一个很宽泛的问题,目前市面上的RTOS大大小小有上百种,你要说对MCU最低要求的话,我觉得要求很低,目前市面上的MCU都能跑RTOS。

但是......

RTOS对MCU的要求越低,它实现的功能也越简单,对应的一些功能也会受到限制。

这里,对MCU的要求,通常主要指:MCU性能(主频)和RAM、Flash资源大小。其他像外设、功耗、引脚数等这些都是次要的。

8位MCU也能跑RTOS

四十年前的8051也能跑RTOS,但8051的性能和RAM资源,你看看有多少?这种在8051上跑的RTOS,实现的功能很少,且跑了RTOS之后,应用代码(或者说任务数)就会受到限制。

现在的 8 位MCU大部分的性能和资源相对都很高了,跑一些常规的 RTOS 问题不大。

在8位单片机上跑的RTOS其实有很多,感兴趣的可以网上找找,这里分享一下之前的内容:8位单片机轻松跑RTOS操作系统

RTOS支持裁剪

什么是系统裁剪?
系统裁剪简单来说就是,把用到的系统组件留下,不用的裁掉(换句话说,需要什么系统资源才配置,不需要的就“屏蔽),以此来节省了MCU资源。

大部分嵌入式系统都支持裁剪,包括Linux也是一样的。市面上大部分的RTOS都有一个“裁剪文件”,通常是 xxOS + Config (系统配置)的文件。

比如:
  • FreeRTOS 的 FreeRTOSConfig.h 文件
  • ucos 的 os_cfg.h 文件
  • ......

而里面的配置,通常是宏定义开关,比如 os_cfg.h 文件
#ifndef OS_CFG_H#define OS_CFG_H
/* --------------------------- MISCELLANEOUS --------------------------- */#define OS_CFG_APP_HOOKS_EN                        1u           /* Enable (1) or Disable (0) application specific hooks                  */#define OS_CFG_ARG_CHK_EN                          1u           /* Enable (1) or Disable (0) argument checking                           */#define OS_CFG_CALLED_FROM_ISR_CHK_EN              1u           /* Enable (1) or Disable (0) check for called from ISR                   */#define OS_CFG_DBG_EN                              0u           /* Enable (1) or Disable (0) debug code/variables                        */#define OS_CFG_TICK_EN                             1u           /* Enable (1) or Disable (0) the kernel tick                             */#define OS_CFG_DYN_TICK_EN                         0u           /* Enable (1) or Disable (0) the Dynamic Tick                            */#define OS_CFG_INVALID_OS_CALLS_CHK_EN             1u           /* Enable (1) or Disable (0) checks for invalid kernel calls             */#define OS_CFG_OBJ_TYPE_CHK_EN                     1u           /* Enable (1) or Disable (0) object type checking                        */#define OS_CFG_OBJ_CREATED_CHK_EN                  1u           /* Enable (1) or Disable (0) object created checks                       */#define OS_CFG_TS_EN                               0u           /* Enable (1) or Disable (0) time stamping                               */
#define OS_CFG_PRIO_MAX                           64u           /* Defines the maximum number of task priorities (see OS_PRIO data type) */
#define OS_CFG_SCHED_LOCK_TIME_MEAS_EN             0u           /* Include code to measure scheduler lock time                           */#define OS_CFG_SCHED_ROUND_ROBIN_EN                1u           /* Include code for Round-Robin scheduling                               */
#define OS_CFG_STK_SIZE_MIN                       64u           /* Minimum allowable task stack size                                     */

/* --------------------------- EVENT FLAGS ----------------------------- */#define OS_CFG_FLAG_EN                             1u           /* Enable (1) or Disable (0) code generation for EVENT FLAGS             */#define OS_CFG_FLAG_DEL_EN                         1u           /*     Include code for OSFlagDel()                                      */#define OS_CFG_FLAG_MODE_CLR_EN                    1u           /*     Include code for Wait on Clear EVENT FLAGS                        */#define OS_CFG_FLAG_PEND_ABORT_EN                  1u           /*     Include code for OSFlagPendAbort()                                */

/* ------------------------ MEMORY MANAGEMENT -------------------------  */#define OS_CFG_MEM_EN                              1u           /* Enable (1) or Disable (0) code generation for the MEMORY MANAGER      */

/* ------------------- MUTUAL EXCLUSION SEMAPHORES --------------------  */#define OS_CFG_MUTEX_EN                            1u           /* Enable (1) or Disable (0) code generation for MUTEX                   */#define OS_CFG_MUTEX_DEL_EN                        1u           /*     Include code for OSMutexDel()                                     */#define OS_CFG_MUTEX_PEND_ABORT_EN                 1u           /*     Include code for OSMutexPendAbort()                               */

/* -------------------------- MESSAGE QUEUES --------------------------  */#define OS_CFG_Q_EN                                1u           /* Enable (1) or Disable (0) code generation for QUEUES                  */#define OS_CFG_Q_DEL_EN                            1u           /*     Include code for OSQDel()                                         */#define OS_CFG_Q_FLUSH_EN                          1u           /*     Include code for OSQFlush()                                       */#define OS_CFG_Q_PEND_ABORT_EN                     1u           /*     Include code for OSQPendAbort()                                   */

/* ---------------------------- SEMAPHORES ----------------------------- */#define OS_CFG_SEM_EN                              1u           /* Enable (1) or Disable (0) code generation for SEMAPHORES              */#define OS_CFG_SEM_DEL_EN                          1u           /*     Include code for OSSemDel()                                       */#define OS_CFG_SEM_PEND_ABORT_EN                   1u           /*     Include code for OSSemPendAbort()                                 */#define OS_CFG_SEM_SET_EN                          1u           /*     Include code for OSSemSet()                                       */

/* -------------------------- TASK MANAGEMENT -------------------------- */#define OS_CFG_STAT_TASK_EN                        1u           /* Enable (1) or Disable (0) the statistics task                         */#define OS_CFG_STAT_TASK_STK_CHK_EN                1u           /*     Check task stacks from the statistic task                         */
#define OS_CFG_TASK_CHANGE_PRIO_EN                 1u           /* Include code for OSTaskChangePrio()                                   */#define OS_CFG_TASK_DEL_EN                         1u           /* Include code for OSTaskDel()                                          */#define OS_CFG_TASK_IDLE_EN                        1u           /* Include the idle task                                                 */#define OS_CFG_TASK_PROFILE_EN                     1u           /* Include variables in OS_TCB for profiling                             */#define OS_CFG_TASK_Q_EN                           1u           /* Include code for OSTaskQXXXX()                                        */#define OS_CFG_TASK_Q_PEND_ABORT_EN                1u           /* Include code for OSTaskQPendAbort()                                   */#define OS_CFG_TASK_REG_TBL_SIZE                   1u           /* Number of task specific registers                                     */
#define OS_CFG_TASK_STK_REDZONE_EN                 0u           /* Enable (1) or Disable (0) stack redzone                               */#define OS_CFG_TASK_STK_REDZONE_DEPTH              8u           /* Depth of the stack redzone                                            */
#define OS_CFG_TASK_SEM_PEND_ABORT_EN              1u           /* Include code for OSTaskSemPendAbort()                                 */#define OS_CFG_TASK_SUSPEND_EN                     1u           /* Include code for OSTaskSuspend() and OSTaskResume()                   */

/* ------------------ TASK LOCAL STORAGE MANAGEMENT -------------------  */#define OS_CFG_TLS_TBL_SIZE                        0u           /* Include code for Task Local Storage (TLS) registers                   */

/* ------------------------- TIME MANAGEMENT --------------------------  */#define OS_CFG_TIME_DLY_HMSM_EN                    1u           /* Include code for OSTimeDlyHMSM()                                      */#define OS_CFG_TIME_DLY_RESUME_EN                  1u           /* Include code for OSTimeDlyResume()                                    */

/* ------------------------- TIMER MANAGEMENT -------------------------- */#define OS_CFG_TMR_EN                              1u           /* Enable (1) or Disable (0) code generation for TIMERS                  */#define OS_CFG_TMR_DEL_EN                          1u           /* Enable (1) or Disable (0) code generation for OSTmrDel()              */

/* ------------------------- TRACE RECORDER ---------------------------- */#define OS_CFG_TRACE_EN                            0u           /* Enable (1) or Disable (0) uC/OS-III Trace instrumentation             */#define OS_CFG_TRACE_API_ENTER_EN                  0u           /* Enable (1) or Disable (0) uC/OS-III Trace API enter instrumentation   */#define OS_CFG_TRACE_API_EXIT_EN                   0u           /* Enable (1) or Disable (0) uC/OS-III Trace API exit  instrumentation   */
#endif

所以,通过系统裁剪,RTOS可以支持很少资源的MCU。

其实,很多RTOS在宣传页面都会有类似的宣传:系统最小可以支持1K RAM、8K ROM的MCU等。

其实不止RTOS这类系统可以裁剪,很多嵌入式的模块都支持裁剪,比如GUI、协议栈等。

跑RTOS对MCU有什么要求?

回头来看,你觉得跑RTOS对MCU有什么要求?

绝大部分RTOS都支持裁剪,MCU性能和资源不充足的情况下,可以裁剪只保留主要的功能。

性能和资源丰富的MCU,可以运行RTOS自带的各种组件,也就是实现的功能更丰富。

当然,不同RTOS的内核源码不同,裁剪的力度也不同,最低能支持多少,还要看RTOS本身的情况。

但是,就单纯的说跑RTOS,对MCU的要求,可以说很低很低。

最后,你跑过RTOS,最低的MCU的资源是多少?欢迎大家留言讨论。

------------ END ------------



●专栏《嵌入式工具

●专栏《嵌入式开发》

●专栏《Keil教程》

●嵌入式专栏精选教程


关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。


点击“阅读原文”查看更多分享。

strongerHuang 作者黄工,高级嵌入式软件工程师,分享嵌入式软硬件、物联网、单片机、开发工具、电子等内容。
评论
  • 在物联网无线通信领域,随着行业应用场景的不断拓宽,同一频段下的设备通信需求正呈指数级增长,然而这一增长趋势却与频谱资源的有限性形成了鲜明对立,信道拥挤、信号串扰与非线性失真等不良现象所造成的“通信压力”正在持续放大。从智能家居的设备互联到工业物联网的实时控制,从智慧楼宇的广域组网到智慧城市的海量数据传输,有限的频谱资源不仅需要满足不断增长的设备通信需求,还需要适配不同场景对速率、时延与可靠性等差异化要求。在此背景下,如何在有限的频谱资源中实现更为稳定的无线通信质量,已成为物联网行业发展路径中的核
    华普微HOPERF 2025-07-07 16:13 673浏览
  • 现代人对于影音效果的追求持续增加,在多数影音产品中,HDMI是最为重要的接口,而HDMI 2.1中有一新增功能eARC可以透过HDMI线材来传输数字Audio,除了支持Dolby TrueHD、Atoms等声音格式外,也可以支持8声道喇叭,满足消费者对于声音的追求。新时代的高阶电视都具备支援eARC的功能,然而却有些号称支持的电视产品,因为在设计上的疏忽,造成eARC无法输出8声道Audio,以致eARC的功能大打折扣,对于花大钱欲享受高规格电视的消费者来说自然难以接受,对于该电视品牌也会产生负
    百佳泰测试实验室 2025-07-04 14:42 2032浏览
  • 在全球广泛倡导绿色低碳与可持续发展的时代浪潮中,新能源汽车作为实现节能减排的重要载体之一,正受到各国政府与企业的加速培育。在此背景下,为提升新能源汽车的市场渗透率,我国已率先进入充电基础设施建设的加速期,从私人专用充电桩到社区公用充电桩,从高速路网补能节点到城市公用充电桩,汽车补能网络正在急速膨胀中。图源:摄图网(已授权)据中国充电联盟(EVCIPA)最新统计数据显示,截止2025年5月份,我国充电基础设施累计数量为1440万台,同比上升45.1%。其中,在2025年1月~5月期间,我国充电基础
    华普微HOPERF 2025-07-09 16:13 358浏览
  • SPI概述ESP IDF中SPI LCD的相关API简单使用LVGL完整代码总结SPI概述当进入嵌入式行业开始,SPI总线是最需要且基础的知识了,它是高速全双工串行总线,可做到同时收发数据。时序和控制根据各家的芯片或者屏幕等设备的数据手册进行阅读和进行编程,比如总线模式就有四种,通过寄存器CPOL和CPHA配置模式CPOLCPHA数据采样时刻适用场景000SCK下降沿,第1个跳变沿采样多数传感器(如BME280)101SCK下降沿,第2个跳变沿采样部分ADC芯片210SCK上升沿,第1个跳变沿采
    二月半 2025-06-29 20:40 1484浏览
  • 提要:采用LOXIM的微孔雾化专用芯片LX8201,能突破压电陶瓷驱动电压超标(24伏)的技术难题,满足全球市场对喷雾玩具的电压安规认证要求。玩具行业尤其是喷雾玩具行业内人士都知道,喷雾玩具的压电陶瓷驱动电压超标(常需60-100V)与强制安规标准(中国,日本,欧美,都一样)对玩具电压的限制(≤24V)存在根本性冲突,如果采用“多层压电堆叠(MPA)技术“(比如日本TDK公司),成本将增加至现有微孔雾化片的10倍以上,这个矛盾一直没有得到好的解决。喷雾玩具在国内热销(淘宝/抖音),能卖的原因,无
    Loximonline 2025-07-08 10:55 312浏览
  • 本文主要针对分立方案高速输出电路,由于MOS管、稳压管、PCB布局布线都存在一些寄生电容,这些寄生电容都会影响高速输出电路的占空比,所以本文对这些寄生电容的影响进行简单说明。测试工况:电压:24V,负载类型:阻性负载2K,输出频率:200Khz,要求占空比45%~55%;电路拓扑如下图所示:图1寄生电容分布情况:如下图所示,MOS管寄生电容为Cgd、Cgs、Cds,稳压管寄生电容为Cd;图2而MOS管手册常见的参数如下图所示为Ciss、Coss、Crss(为啥是这些参数,而不改成Cgs、Cgd、
    用户1751282873645 2025-07-08 23:58 275浏览
  •   去年底,整理旧物,扔的扔了,留的留了,这不,十四个几十年前留下来的工业级小型排风扇,下图左上角处,又拿出来,下决心把它们再利用发挥余热。  呵呵,这回不是拆而是装了。怎么装呢?组装、固定、机架、接线,简单,也不简单,原则是一切都用手头现有废旧材料,争取做到一个不买!DIY,废物利用,如今时髦的话,以旧换新!摆上台面,找来木条,策划怎么做?  比一比,看一看,觉得合适,按尺寸锯开木条。  咋走线?想到了,在有限空间内弯转,从一个螺丝孔穿出来,整体拼凑整齐。   咋固定风扇呢?找来木片条,锯断,
    自做自受 2025-07-06 21:37 628浏览
  •   几个月前,一个老旧的大风扇的散风圈(俺不知其专业名称)的开关按钮不起作用,就是锁不住了,散风圈也就不转了。今天,有空,就拿到工作台,开始拆解分析故障原因,能修好更好。  看看,用的时间够长了吧!皮肤都变颜色了。看标签,合格品2005年的。  底部四个螺丝固定,很容易拆开了。  看到掉下一个标签圆纸片,拿起来看看,是那个横向摇头的电机的。  找到那个按钮开关位置  应该是开关内部的有缺陷了。把它拆下来,一看就是正规合格品。  拿出我日积月累的分类藏宝盒,呵呵,找到一款螺丝孔位正好合适的。   
    自做自受 2025-07-10 11:16 444浏览
  • 在数字化、自动化高速发展的今天,光电耦合器正以一种低调却不可或缺的方式,悄然改变着我们的生活。它不仅是电子电路中的“安全卫士”,更是连接信号世界的“桥梁”,凭借出色的电气隔离能力,为各类设备提供稳定可靠的信号传输保障。电气隔离——让系统更安全在工业控制系统中,安全始终是重中之重。光电耦合器通过光信号进行电气隔离,能够有效防止高压电流侵入低压控制电路。例如,在智能电网系统中,它广泛应用于电表与通信模块之间,确保数据传输的安全性,防止电网高压对低压设备造成冲击。在电动汽车的电池管理系统(BMS)中,
    腾恩科技-彭工 2025-07-05 13:56 473浏览
  • 曾经靠“砍一刀”撕裂传统电商格局的拼多多,如今疲态尽显。数据显示,拼多多今年第一季度实现营收957亿元,同比增长10%,市场预估1016亿元,相比预期低了近60亿元;经营利润为161亿元,相比去年同期下降38%;归属于普通股股东的净利润为147亿元,同比下降47%。与此同时,拼多多市值也坐上了“过山车”。去年市值一度突破 2180 亿美元,力压国内电商巨头阿里,今年(7月1日收盘)市值仅余 1497.59 亿美元,已不足阿里(市值2718.63亿美元)一半
    用户1742991715177 2025-07-05 14:24 469浏览
  • 什么是LoRaWAN? LoRaWAN技术及应用LoRaWAN(Long Range Wide Area Network)是一种低功耗、长距离、广域网络通信协议,特别设计用于连接物联网(IoT)设备。LoRaWAN采用无线通信技术,能够覆盖数十公里的范围,提供长时间的电池寿命,适用于智能城市、农业、工业自动化、环境监测,与健康医疗等领域应用。来源: LoRa Alliance一探究竟:LoRaWAN物联网应用优势营运商采用 LoRaWAN 具有多方面的优势,除了长距离覆盖范围及低功耗的特点外,还
    百佳泰测试实验室 2025-07-10 14:51 411浏览
  • 工业物联网时代,作为一种普遍应用在汽车电子、工业控制与医疗器械等领域中的串行总线通信技术——CAN(Controller Area Network)总线基于消息广播模式,通过双绞线传输差分信号,是一种多主控(Multi-Master)的总线系统,具备极强的抗干扰能力、极低的传输延迟和高速数据传输性能。一种典型的CAN总线网络示意图在CAN总线通信过程中,CAN收发器作为物理层上的接口芯片,位于CAN控制器(MCU)和CAN总线之间,主要负责将来自CAN控制器(MCU)的数字信号与总线上的差分信号
    华普微HOPERF 2025-07-04 14:44 1980浏览
  • 在万物互联浪潮席卷全球的时代背景下,数字气压传感器作为物联网环境感知层的核心硬件之一,正凭借精准、实时的数字化气压测量能力,快速消融着现实世界与数字世界之间的沟通壁垒,其不仅能为物联网终端提供与环境进行对话的“媒介语言”,还能与其他环境感知技术形成协同效应,是物联网社会实现高效沟通的基石之一。数字气压传感器主要通过检测压敏元件在不同环境气压下的电信号变化,实现对气压的测量,并能直接输出数字信号以满足物联网终端对气压数据的传输、储存与记录等需求。现阶段,由于数字气压传感器具备着低功耗、高精度、快速
    华普微HOPERF 2025-07-01 09:20 1651浏览
  • 据知名市场研究机构Counterpoint Research发布的数据概览,2025年第二季度,中国智能手机销量预计将迎来小幅回暖,增长率约为1%。在这场销量微增的背后,华为与苹果两大品牌成为了推动市场前行的核心力量。其中华为手机的表现最为亮眼,数据显示,华为在中国市场的智能手机销量份额实现了12%的同比增长,这一成绩不仅使其成为了当季增长最快的品牌,更助力华为重新夺回销量榜首的位置。相比之下,vivo的表现就有些尴尬了。虽然还是位列第二,但vivo在第二季度的智能手机销量份额同比下降了9%,下
    用户1742991715177 2025-07-09 08:19 292浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦