专为MCU项目开发提速的代码框架BabyOS

简介: 专为MCU项目开发提速的代码框架BabyOS

1 BabyOS是什么?

BabyOS适用于MCU项目,她是一套管理功能模块和外设驱动的框架。


对项目而言,缩短开发周期。项目开发时选择适用的功能模块及驱动。直接进入功能代码编写的阶段。


对工程师而言,减少重复工作。调试过的功能模块和驱动代码放入BabyOS中进行管理,以后项目可以直接使用,去掉重复调试的工作。

2 适用项目

使用裸机开发的项目推荐基于BabyOS进行。

3 前世今生

说一说编写BabyOS原由


................


目前使用MCU裸机开发的项目不会很庞大,大多有两个要求:开发时间和产品功耗。99.874%产品是电池供电,功耗是重点考虑对象。工程师开发的多个项目之间总会碰到相同的功能点,那么是否可以有套代码框架可以容纳已经做过的功能点,去掉重复的工作,加快产品或者demo的开发。

4 功耗的考量

出于功耗考虑,对外设的操作是:唤醒外设,操作,最后进入休眠。这样的操作形式和文件的操作很类似,文件的操作步骤是打开到编辑到关闭。


因此将外设的操作看作是对文件的操作进行。每个外设打开后返回一个描述符,后续代码中对外设的操作都是基于这个描述符进行。关闭外设后回收描述符。


所以外设的驱动中打开和关闭的操作执行对设备的唤醒和睡眠。利用描述符来操作外设还有一个好处是,当更换外设后,只需更换驱动接口,业务部分的代码不需要变动

5 快速开发

小型项目的开发中,有较多使用率高的功能模块,例如:UTC、错误管理、电池电量、存储数据、上位机通信、固件升级等等。将这些功能都做成不依赖于硬件的模块交给BabyOS管理。将调试好的外设驱动也交给BabyOS管理。再次启动项目时,通过配置文件,选择当前项目使用的功能模块。以搭积木的方式缩短开发时间。

640.png

使用方法

1、添加文件

bos/core/src 核心文件及功能模块全部添加至工程
bos/driver/src 选择需要的驱动添加至工程
bos/hal/ 添加至工程,根据具体平台进行修改

2、选择功能模块


对于b_config.h进行配置,根据自己的需要选择功能模块。


3、列出需要使用的设备


找到b_device_list.h,在里面添加使用的外设。例如当前项目只需要使用flash和模拟串口,那么添加如下代码:

//           设备        驱动接口      描述
B_DEVICE_REG(W25QXX, bW25X_Driver, "flash")
B_DEVICE_REG(SUART, SUART_Driver, "suart")

4 使用范例

#include "b_os.h"    //头文件
//b_config.h配置文件中使能KV存储
int main()
{
    uint8_t buf[128];
    //......
    bInit();    //初始化,外设的初始化会在此处调用
    //下面举例使用:W25QXX和KV存储功能模块,其中W25QXX已经添加到b_device_list.h
    if(0 == bKV_Init(W25QXX, 0xA000, 4096 * 4, 4096)) //初始化KV存储,指定存储设备W25QXX
    {
        b_log("bKV_Init ok...\r\n");
    }
    //存储键值对(可用于存储系统配置信息)
    b_log("save ip, name\r\n");
    bKV_Set((uint8_t *)"ip", (uint8_t *)"192.168.1.155", sizeof("192.168.1.155"));
    bKV_Set((uint8_t *)"name", (uint8_t *)"BabyOS", sizeof("BabyOS"));
    //获取值
    b_log("read ip, name...\r\n");
    bKV_Get((uint8_t *)"ip", buf);
    b_log("ip: %s\r\n", buf);
    bKV_Get((uint8_t *)"name", buf);
    b_log("name %s\r\n", buf);
    //修改键值对的值
    b_log("change name...\r\n");
    bKV_Set((uint8_t *)"name", (uint8_t *)"abcde", sizeof("abcde"));
    //重新获取值
    bKV_Get((uint8_t *)"name", buf);
    b_log("new name: %s\r\n", buf);
    //......
    while(1)
    {
        //.....
        bExec();      //循环调用此函数
        //.....
    }
}

举例使用W25QXX读取数据,从0地址读取128个字节数据至buf

{
    int fd = -1;
    fd = bOpen(W25QXX, BCORE_FLAG_RW);
    if(fd == -1)
    {
        return;
    }
    bLseek(fd, 0);
    bRead(fd, buf, 128);
    bClose(fd);
}

更多使用介绍:


https://gitee.com/notrynohigh/BabyOS/wikis


https://github.com/notrynohigh/BabyOS/wiki

Baby如何成长

之所以称之为BabyOS,从上面的介绍可以看出,她如果能在项目中发挥大的作用就需要有足够的功能模块以及驱动代码。


希望借助广大网友的力量,一起“喂养”她,是她成为MCU裸机开发中不可缺少的一部分。


码云:https://gitee.com/notrynohigh/BabyOS


github:https://github.com/notrynohigh/BabyOS

友情项目

BabyOS包含了第三方开源代码,这部分代码都是MCU项目中比较实用的。


b_shell 功能模块基于开源项目nr_micro_shell,https://gitee.com/nrush/nr_micro_shell,感谢作者Nrush


b_button 功能模块基于开源项目FlexibleButton,https://github.com/murphyzhao/FlexibleButton,感谢作者Murphy

往期精彩

嵌入式系统软件架构设计(长篇深度好文)


编程修养(精品文,建议认真品读并实践)


嵌入式C语言代码优化方案(深度好文,建议花时间研读并收藏)


分享一个在Keil开发环境中配置代码格式化工具Astyle(美化代码风格)


stm32cubeMX学习、USB DFU(Download Firmware Update)固件更新

目录
相关文章
|
6月前
|
数据采集 监控 安全
精简高效与安全兼备:ARM32与MCU32平台上的信息协议设计新思路
精简高效与安全兼备:ARM32与MCU32平台上的信息协议设计新思路
267 1
|
算法 数据可视化 前端开发
第三代软件开发-QCustomPlot核心迁移
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。 在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。 在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资
|
2月前
|
Linux C# 开发者
Uno Platform 驱动的跨平台应用开发:从零开始的全方位资源指南与定制化学习路径规划,助您轻松上手并精通 C# 与 XAML 编程技巧,打造高效多端一致用户体验的移动与桌面应用程序
【9月更文挑战第8天】Uno Platform 的社区资源与学习路径推荐旨在为初学者和开发者提供全面指南,涵盖官方文档、GitHub 仓库及社区支持,助您掌握使用 C# 和 XAML 创建跨平台原生 UI 的技能。从官网入门教程到进阶技巧,再到活跃社区如 Discord,本指南带领您逐步深入了解 Uno Platform,并提供实用示例代码,帮助您在 Windows、iOS、Android、macOS、Linux 和 WebAssembly 等平台上高效开发。建议先熟悉 C# 和 XAML 基础,然后实践官方教程,研究 GitHub 示例项目,并积极参与社区讨论,不断提升技能。
91 2
|
3月前
|
缓存 开发者 测试技术
跨平台应用开发必备秘籍:运用 Uno Platform 打造高性能与优雅设计兼备的多平台应用,全面解析从代码共享到最佳实践的每一个细节
【8月更文挑战第31天】Uno Platform 是一种强大的工具,允许开发者使用 C# 和 XAML 构建跨平台应用。本文探讨了 Uno Platform 中实现跨平台应用的最佳实践,包括代码共享、平台特定功能、性能优化及测试等方面。通过共享代码、采用 MVVM 模式、使用条件编译指令以及优化性能,开发者可以高效构建高质量应用。Uno Platform 支持多种测试方法,确保应用在各平台上的稳定性和可靠性。这使得 Uno Platform 成为个人项目和企业应用的理想选择。
62 0
|
5月前
|
传感器 物联网 数据中心
探索ARM架构及其核心系列应用和优势
ARM架构因其高效、低功耗和灵活的设计,已成为现代电子设备的核心处理器选择。Cortex-A、Cortex-R和Cortex-M系列分别针对高性能计算、实时系统和低功耗嵌入式应用,满足了不同领域的需求。无论是智能手机、嵌入式控制系统,还是物联网设备,ARM架构都以其卓越的性能和灵活性在全球市场中占据了重要地位。
255 1
|
6月前
|
存储 传感器 缓存
轻量级的嵌入式模块化软件架构
轻量级的嵌入式模块化软件架构
124 1
|
6月前
|
网络协议 安全 编译器
嵌入式代码经常产生bug的五大原因
嵌入式代码经常产生bug的五大原因
73 0
|
设计模式 算法 开发者
嵌入式框架设计中的四种常用模式
嵌入式框架设计中的四种常用模式
143 0
|
Cloud Native 架构师 Serverless
今天4点 RISC-V 高性能编译器带来更快速、流程的开发体验! | 第37期
今天下午4点,RISC-V 高性能编译器,了解高性能编译器带来更加快速、流程的开发体验。
今天4点 RISC-V 高性能编译器带来更快速、流程的开发体验! | 第37期