告别内存焦虑!最适合小RAM MCU的RTOS,来了!

嵌入式系统   作者:嵌入式芯视野 时间:2025-07-15来源:今日头条


BasicOS 是一个面向小内存嵌入式系统(如 8KB RAM MCU)的轻量级、协作式 RTOS,它的最大特点是 共享栈技术。以下是对你提供内容的整理和总结,方便你理解和介绍该操作系统:


什么是 BasicOS?

BasicOS 是一个简洁、高效的 协作式内核 RTOS(非抢占式),专门为 RAM 极其紧张的嵌入式平台设计,尤其适用于 8KB~20KB RAM 的 MCU。

核心理念:


为什么开发 BasicOS?

背景项目:

在开发 BasicOS 之前,作者曾开发过 EventOS 和 EventOS Nano,它们以 事件驱动、控制反转、OOP 等理念为核心,虽然资源占用极低,但 上手难度较高。

问题:

解决方案:

借助网友“光哥”的建议,作者引入了 “共享栈”技术,在协作式 RTOS 模型下大大节省内存。


什么是共享栈?

传统 RTOS:

每个任务分配独立栈空间,占用大量 RAM。

BasicOS:

所有任务共享一个物理栈区,在任务切换时:

  1. 收缩并保存 当前任务的堆栈

  2. 扩展并恢复 下一个任务的堆栈

特点:


为什么使用协作式内核?

协作式(Cooperative)特点:

相比抢占式(Preemptive):


BasicOS 的技术特点

特性

描述

协作式调度

无抢占,任务必须主动让出 CPU

共享任务栈

多个任务使用一个栈区,降低 RAM 占用

Export 机制

每个任务只占用 16 字节内存,通过 bos_task_export 宏定义任务

不支持 FPU

为降低占用,默认不支持浮点运算,需在 MDK 中关闭 FPU 配置

可扩展基础设施

支持加入消息队列、信号量等 RTOS 基础设施

计划与 EventOS 结合

将事件驱动与共享栈线程模型结合,提升系统灵活性

CMSIS-RTOS 适配中

支持 CMSIS 标准,计划加入 eLab 平台


示例代码

主函数初始化:

int main(void){
   bsp_init(); // 初始化外设

   static uint8_t stack[4096];
   basic_os_init(stack, sizeof(stack));  // 初始化 BasicOS(分配共享栈)
   basic_os_run();                       // 启动 BasicOS

   return 0;
}

任务定义方式(通过宏导出):

static void task_entry_led(void){    while (1)
   {
       bos_delay_ms(500); // 任务延迟
       bos_delay_ms(500);
   }
}

bos_task_export(led, task_entry_led, 2, NULL); // 注册任务,优先级为2

SysTick 中断(用于系统心跳):

void SysTick_Handler(void){
   bos_tick(); // 系统时间推进}

项目目录结构说明

路径

说明

BasicOS/basic_os.c

内核核心实现

BasicOS/basic_os.h

内核头文件

01_basic_os_iar/

针对 IAR 的 Cortex-M0 示例

02_basic_os_mdk/

针对 MDK 的 Cortex-M0 示例


总结

BasicOS 是一个非常适合 极小 RAM 嵌入式平台 的协作式操作系统,它通过共享任务栈技术,将任务切换的 RAM 成本压缩到极致,适合低资源、低实时性需求的项目。它的出现,为那些无法使用主流 RTOS 的 MCU 提供了新思路。

开源网站:
https://gitee.com/event-os/basic-os


关键词: BasicOS

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版