告別內存焦慮!最適合小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:
每個任務分配獨立??臻g,占用大量 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
評論