告别内存焦虑!最适合小RAM MCU的RTOS,来了!
BasicOS 是一个面向小内存嵌入式系统(如 8KB RAM MCU)的轻量级、协作式 RTOS,它的最大特点是 共享栈技术。以下是对你提供内容的整理和总结,方便你理解和介绍该操作系统:
什么是 BasicOS?
BasicOS 是一个简洁、高效的 协作式内核 RTOS(非抢占式),专门为 RAM 极其紧张的嵌入式平台设计,尤其适用于 8KB~20KB RAM 的 MCU。
核心理念:
简单
易用
极低资源占用
强调开发友好性
为什么开发 BasicOS?
背景项目:
在开发 BasicOS 之前,作者曾开发过 EventOS 和 EventOS Nano,它们以 事件驱动、控制反转、OOP 等理念为核心,虽然资源占用极低,但 上手难度较高。
问题:
很多嵌入式工程师难以掌握事件驱动模型
阅读和维护事件驱动代码成本较高
RTOS 占用 RAM 高,不适用于小 RAM 芯片
解决方案:
借助网友“光哥”的建议,作者引入了 “共享栈”技术,在协作式 RTOS 模型下大大节省内存。
什么是共享栈?
传统 RTOS:
每个任务分配独立栈空间,占用大量 RAM。
BasicOS:
所有任务共享一个物理栈区,在任务切换时:
收缩并保存 当前任务的堆栈
扩展并恢复 下一个任务的堆栈
特点:
显著节省 RAM
切换过程多了内存复制,牺牲了一点性能
适合任务数少、对实时性要求不高的系统
为什么使用协作式内核?
协作式(Cooperative)特点:
任务主动释放 CPU
没有资源竞争问题
调试简单,逻辑可控
相比抢占式(Preemptive):
并发问题更少
更适合大多数非硬实时系统
响应时间可达 <10ms,足以满足大部分产品
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
或用微信扫描左侧二维码