很多工程师在移植内核时最怕的就是“牵一发而动全身”。在 Anbo-MOS 这里,我把移植难度分成了三档,大家可以根据自己的需求“对号入座”。

一、 三档移植方案:总有一款适合你

我不强迫你实现所有的硬件底层接口(Arch 函数)。根据你想实现的功能,工作量完全不同:

第 0 档:零移植(直接当工具库用)

如果你只需要高效的底层数据结构,Anbo-MOS 的 List(链表)Ring Buffer(环形缓冲区) 是纯 C99 实现,零平台依赖

  • 用法:直接把源码拖进工程,头文件一引就能用。

  • 代价:0 行底层代码实现。

第 1 档:最小移植(仅需 2 个函数)

如果你想用 Anbo 的事件总线(EBus)对象池(Pool)或者状态机(FSM),你只需要实现最基础的临界区保护:

  • 实现接口Anbo_Arch_Critical_Enter/Exit

  • 收益:解锁异步事件分发和层次化状态机,让你的业务逻辑彻底解耦。

第 2 档:完整移植(工业级闭环)

如果你要开启软件定时器多路看门狗异步日志系统,则需要实现完整的 5-6 个桩函数(包括 GetTickUART_DMA 等)。

二、 模块依赖矩阵:要多少,取多少

为了做到极致的轻量,我给所有非核心模块都加了开关。你在 anbo_config.h 里把宏设为 0,对应的 .c 文件编译出来就是空的,零代码体积,零 Arch 依赖

模块核心能力是否可直接使用(无依赖)
List / RB基础数据结构 是
EBus / FSM异步信号发布订阅 / 状态机 需临界区保护
Timer / WDT软件定时器 / 多路看门狗需 Tick 接口
Log异步日志输出需 UART 驱动

三、 Anbo_Device:是“工具”而不是“枷锁”

这是我在移植文档里着重写的一点。很多人问:我要不要把驱动都包装成内核提供的 Anbo_Device 接口?

我的建议是:看场景,不硬套

1. 什么时候该用?(推荐包装)

  • 字节流设备:比如 UART、USB CDC。

  • 原因:这类设备天然需要环形缓冲、TX 忙状态跟踪和异步 I/O。包装成 Anbo_Device 后,日志系统可以开箱即用,RX 事件也能自动发布到总线上。

2. 什么时候不该用?(直接调 BSP)

  • 寄存器级传感器:比如 I2C/SPI 的 IMU 或 ADC。

  • 原因:这种“写寄存器地址 -> 读数据”的同步操作,包装成 Read/Write 流模型反而累赘。直接暴露 BSP_IMU_ReadFIFO() 这种带语义的 API,代码更清晰,性能更高。

结论: Anbo-MOS 支持两种方式并存。USART1 用 Anbo_Device 接入系统,IMU 则直接调用 BSP 函数,架构上完全不冲突。

四、 快速上手清单

想在你的项目里跑起来?对一下这个清单:

  1. [ ] 选档位:决定你要 0 档、1 档还是 2 档移植。

  2. [ ] 拷源码:将 anbo/kernel/ 复制到项目。

  3. [ ] 设宏定义:在 anbo_config.h 里关掉不需要的模块。

  4. [ ] 写桩函数:实现对应的 Anbo_Arch_* 函数。

  5. [ ] 编译运行:添加路径,链接,Done!

五、 写在最后

Anbo-MOS 的设计初衷不是为了成为另一个“大而全”的 RTOS 负担,而是成为你手里那把顺手的瑞士军刀

 

六、 传送门(求一星!)

这套东西凝结了我多年的工程经验。如果它能帮你理清架构思路,或者让你少踩几个低功耗的坑,请务必去 GitHub 点个 Star! 大家的 Star 是我持续更新、适配更多硬件平台(H7/G0/F4 等)的最大动力。

代码已推,文档已齐。咱们 GitHub 见,源码里见!

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐