日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 告別內(nèi)存焦慮!最適合小RAM MCU的RTOS,來了!

          告別內(nèi)存焦慮!最適合小RAM MCU的RTOS,來了!

          作者:嵌入式芯視野 時(shí)間:2025-07-15 來源:今日頭條 收藏


           是一個(gè)面向小內(nèi)存嵌入式系統(tǒng)(如 8KB RAM MCU)的輕量級(jí)、協(xié)作式 RTOS,它的最大特點(diǎn)是 共享?xiàng)<夹g(shù)。以下是對(duì)你提供內(nèi)容的整理和總結(jié),方便你理解和介紹該操作系統(tǒng):


          什么是 ?

           是一個(gè)簡(jiǎn)潔、高效的 協(xié)作式內(nèi)核 RTOS(非搶占式),專門為 RAM 極其緊張的嵌入式平臺(tái)設(shè)計(jì),尤其適用于 8KB~20KB RAM 的 MCU。

          核心理念:

          • 簡(jiǎn)單

          • 易用

          • 極低資源占用

          • 強(qiáng)調(diào)開發(fā)友好性


          為什么開發(fā) BasicOS?

          背景項(xiàng)目:

          在開發(fā) BasicOS 之前,作者曾開發(fā)過 EventOS 和 EventOS Nano,它們以 事件驅(qū)動(dòng)、控制反轉(zhuǎn)、OOP 等理念為核心,雖然資源占用極低,但 上手難度較高。

          問題:

          • 很多嵌入式工程師難以掌握事件驅(qū)動(dòng)模型

          • 閱讀和維護(hù)事件驅(qū)動(dòng)代碼成本較高

          • RTOS 占用 RAM 高,不適用于小 RAM 芯片

          解決方案:

          借助網(wǎng)友“光哥”的建議,作者引入了 “共享?xiàng)!奔夹g(shù),在協(xié)作式 RTOS 模型下大大節(jié)省內(nèi)存。


          什么是共享?xiàng)#?/span>

          傳統(tǒng) RTOS:

          每個(gè)任務(wù)分配獨(dú)立??臻g,占用大量 RAM。

          BasicOS:

          所有任務(wù)共享一個(gè)物理?xiàng)^(qū),在任務(wù)切換時(shí):

          1. 收縮并保存 當(dāng)前任務(wù)的堆棧

          2. 擴(kuò)展并恢復(fù) 下一個(gè)任務(wù)的堆棧

          特點(diǎn):

          • 顯著節(jié)省 RAM

          • 切換過程多了內(nèi)存復(fù)制,犧牲了一點(diǎn)性能

          • 適合任務(wù)數(shù)少、對(duì)實(shí)時(shí)性要求不高的系統(tǒng)


          為什么使用協(xié)作式內(nèi)核?

          協(xié)作式(Cooperative)特點(diǎn):

          • 任務(wù)主動(dòng)釋放 CPU

          • 沒有資源競(jìng)爭(zhēng)問題

          • 調(diào)試簡(jiǎn)單,邏輯可控

          相比搶占式(Preemptive):

          • 并發(fā)問題更少

          • 更適合大多數(shù)非硬實(shí)時(shí)系統(tǒng)

          • 響應(yīng)時(shí)間可達(dá) <10ms,足以滿足大部分產(chǎn)品


          BasicOS 的技術(shù)特點(diǎn)

          特性

          描述

          協(xié)作式調(diào)度

          無搶占,任務(wù)必須主動(dòng)讓出 CPU

          共享任務(wù)棧

          多個(gè)任務(wù)使用一個(gè)棧區(qū),降低 RAM 占用

          Export 機(jī)制

          每個(gè)任務(wù)只占用 16 字節(jié)內(nèi)存,通過 bos_task_export 宏定義任務(wù)

          不支持 FPU

          為降低占用,默認(rèn)不支持浮點(diǎn)運(yùn)算,需在 MDK 中關(guān)閉 FPU 配置

          可擴(kuò)展基礎(chǔ)設(shè)施

          支持加入消息隊(duì)列、信號(hào)量等 RTOS 基礎(chǔ)設(shè)施

          計(jì)劃與 EventOS 結(jié)合

          將事件驅(qū)動(dòng)與共享?xiàng)>€程模型結(jié)合,提升系統(tǒng)靈活性

          CMSIS-RTOS 適配中

          支持 CMSIS 標(biāo)準(zhǔn),計(jì)劃加入 eLab 平臺(tái)


          示例代碼

          主函數(shù)初始化:

          int main(void){
             bsp_init(); // 初始化外設(shè)

             static uint8_t stack[4096];
             basic_os_init(stack, sizeof(stack));  // 初始化 BasicOS(分配共享?xiàng)#?br/>    basic_os_run();                       // 啟動(dòng) BasicOS

             return 0;
          }

          任務(wù)定義方式(通過宏導(dǎo)出):

          static void task_entry_led(void){    while (1)
             {
                 bos_delay_ms(500); // 任務(wù)延遲
                 bos_delay_ms(500);
             }
          }

          bos_task_export(led, task_entry_led, 2, NULL); // 注冊(cè)任務(wù),優(yōu)先級(jí)為2

          SysTick 中斷(用于系統(tǒng)心跳):

          void SysTick_Handler(void){
             bos_tick(); // 系統(tǒng)時(shí)間推進(jìn)}

          項(xiàng)目目錄結(jié)構(gòu)說明

          路徑

          說明

          BasicOS/basic_os.c

          內(nèi)核核心實(shí)現(xiàn)

          BasicOS/basic_os.h

          內(nèi)核頭文件

          01_basic_os_iar/

          針對(duì) IAR 的 Cortex-M0 示例

          02_basic_os_mdk/

          針對(duì) MDK 的 Cortex-M0 示例


          總結(jié)

          BasicOS 是一個(gè)非常適合 極小 RAM 嵌入式平臺(tái) 的協(xié)作式操作系統(tǒng),它通過共享任務(wù)棧技術(shù),將任務(wù)切換的 RAM 成本壓縮到極致,適合低資源、低實(shí)時(shí)性需求的項(xiàng)目。它的出現(xiàn),為那些無法使用主流 RTOS 的 MCU 提供了新思路。

          開源網(wǎng)站:
          https://gitee.com/event-os/basic-os



          關(guān)鍵詞: BasicOS

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉