BabyOS 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
BabyOS 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
BabyOS 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
BabyOS 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
BabyOS 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

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

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

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

代码结构

BabyOS代码分为3部分:

BabyOS仓库:功能模块和驱动 ,一般情况下用户不需要改动,可以将此仓库作为子模块。

BabyOS_Config:配置文件和设备注册文件

BabyOS_Hal:硬件抽象层, 不同分支对应不同硬件平台,选择对应平台下载,没有合适的则选择master分支

frame

适用项目

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

使用操作系统开发的项目,BabyOS可作为功能库及驱动库使用。

使用方法

基于STM32F107上使用SPIFLASH及KV功能模块为例

1.添加文件

BabyOS							//可作git子模块使用
├── bos
│   ├── algorithm               //常用算法,无需添加其中文件
│   ├── core					//核心文件,全部包含至工程
│   ├── drivers					//驱动文件,选择spiflash驱动添加至工程
│   ├── modules					//功能模块,全部添加至工程,由配置文件b_config.h配置
│   ├── thirdparty				//第三方代码,选择SFUD第三方代码添加至工程
│   └── utils					//实用代码,选择delay部分代码添加至工程
├── doc							//相关文档
├── LICENSE						//开源协议
└── README.md
BabyOS_Config					//克隆后放入工程目录,全部添加至工程
BabyOS_Hal						//克隆后放入工程目录,添加hal、gpio、uart、spi部分
//进入用户工程目录执行
git submodule add https://gitee.com/notrynohigh/BabyOS.git
git clone https://gitee.com/notrynohigh/BabyOS_Config.git    //克隆配置文件及设备注册文件
git clone https://gitee.com/notrynohigh/BabyOS_Hal.git		 //克隆后切换到对应平台的分支,如果没有则采用master分支作为模板

2.增加系统定时器

//例如使用滴答定时器,中断服务函数调用:void bHalIncSysTick(void);

//注:定时器的周期与b_config.h里_TICK_FRQ_HZ要匹配

3.选择功能模块

b_config.h进行配置,勾选其中的KV Enable/Disable项

config

4.注册设备

//b_device_list.h,在里面添加使用的外设。例如项目只需要使用SPIFlash,那么添加如下代码: 
//           设备        驱动          描述
B_DEVICE_REG(SPIFLASH, bSPIFLASH_Driver[0], "flash")

//如果没有注册任何设备,取消B_DEVICE_REG(null, bNullDriver, "null")的注释    
//B_DEVICE_REG(null, bNullDriver, "null")   

5.修改硬件接口

b_hal.h中根据实际连接图修改GPIO和SPI号

#define HAL_SPIFLASH_QSPI_EN            0
#define HAL_SPIFLASH_TOTAL_NUMBER       1 
#define HAL_SPIFLASH_IF                 {{B_HAL_QSPI_INVALID, B_HAL_SPI_1, {B_HAL_GPIOB, B_HAL_PIN12}},}   

6.修改硬件抽象层SPI部分

(依赖硬件平台,使用STM32 HAL库为例)

//b_hal_spi.c
int bHalSPI_Send(bHalSPINumber_t spi, uint8_t *pbuf, uint16_t len)
{
    if(pbuf == NULL)
    {
        return -1;
    }
    switch(spi)
    {
        case B_HAL_SPI_1:
            HAL_SPI_Transmit(&hspi1, pbuf, len, 0xfff);
            break;        
        default:
            break;
    }
    return 0;
}

int bHalSPI_Receive(bHalSPINumber_t spi, uint8_t *pbuf, uint16_t len)
{
    if(pbuf == NULL)
    {
        return -1;
    }
    switch(spi)
    {
        case B_HAL_SPI_1:
            HAL_SPI_Receive(&hspi1, pbuf, len, 0xfff);
            break;        
        default:
            break;
    }
    return 0;
}

7.修改硬件抽象层GPIO部分

(依赖硬件平台,使用STM32 HAL库为例)

void bHalGPIO_WritePin(uint8_t port, uint8_t pin, uint8_t s)
{
    GPIO_PinState sta = (s) ? GPIO_PIN_SET : GPIO_PIN_RESET;
    HAL_GPIO_WritePin(GPIO_PortTable[port], GPIO_PinTable[pin], sta);
}

8.基于SPIFLASH使用KV功能

#include "b_os.h"    //头文件
//b_config.h配置文件中使能KV存储
int main()
{
    uint8_t buf[128]; 
    bInit();    //初始化,外设的初始化会在此处调用
    if(0 == bKV_Init(SPIFLASH, 0xA000, 4096 * 4, 4096)) //初始化KV存储,指定存储设备SPIFLASH
    {
        b_log("bKV_Init ok...\r\n");
    }
    //存储键值对(可用于存储系统配置信息)
    bKV_Set("name", (uint8_t *)"BabyOS", 7);
    bKV_Get("name", buf);
    b_log("name:%s\r\n", buf); 
    //......
    while(1)
    {
        //.....
        bExec();      //循环调用此函数
        //.....
    }
}

如果不使用功能模块,单独对设备进行操作,使用如下方式进行:

//举例使用SPIFLASH读取数据,从0地址读取128个字节数据至buf
{
    int fd = -1;
    fd = bOpen(SPIFLASH, 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

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (2)

加载中
看介绍还是可以的,还没有看具体代码!
04/15 18:25
回复
举报
赞,支持支持。前端后端框架都有了,嵌入式的却一直没有大一统的框架。希望babyOS能填补空白。
02/15 21:53
回复
举报
更多评论
暂无内容
发表了博客
2020/03/01 21:01

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

1 BabyOS是什么? BabyOS适用于MCU项目,她是一套管理功能模块和外设驱动的框架。 对项目而言,缩短开发周期。项目开发时选择适用的功能模块及驱动。直接进入功能代码编写的阶段。 对工程师而言,减少重复工作。调试过的功能模块和驱动代码放入BabyOS中进行管理,以后项目可以直接使用,去掉重复调试的工作。 2 适用项目 使用裸机开发的项目推荐基于BabyOS进行。 3 前世今生 说一说编写BabyOS原由 ................ 目前使用MCU...

0
0
发表了博客
2020/05/06 16:09

《痞子衡嵌入式半月刊》 第 7 期

痞子衡嵌入式半月刊: 第 7 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回顾 :《痞子衡嵌入式半月刊: 第 6 期》 唠两句 今天是立夏,夏季的第一个节气。立夏表示告别春天,夏天要开始了。今天也是五一小长假最后一天,不知道你的假期...

0
0
发表了博客
2020/03/15 23:19

关于大小端模式的浅谈

以实际情况作例子: 1.由图是不是可知地址(Unsignd char *)0x0000_0020的所存值? 答:0x3C。 2.对于32位机,由图是否可知地址(Unsignd int *)0x0000_0020的所存值? 答:不确定, 当为小端模式,值为:0x3C; 当为大端模式,值为:0x3C000000。 3.关于大小端的浅谈 答:结合图中,0x0000_0020地址存放0x3C,0x0000_0021地址存放0x00, 0x0000_0022地址存放0x00,0x0000_0023地址存放0x00。 小端模式下,低地址存放低字节,整合...

0
0
发表了博客
2020/04/28 00:29

最近收集的开源项目专栏(持续更新,收好车轮,方便造车)

经常在公众号这个菜单互动的小伙伴可能知道,最近我在这里偷偷加了一个开源项目的专栏,这个专栏主要是持续收集一些嵌入式方面的开源项目,当然也包括我自己开源的,目前已经更新了19个项目。 1 一个好用的量产集成测试工具 分享一个刚毕业的时候写的一个量产测试工具吧,采用的是C语言来编写,刚开始应用在Linux和Android平台上,后面通过移植也用在单片机上,使用起来也非常简单。 分享一个自己量产项目上的集成测试软件MTTES...

0
2
发表了博客
2020/03/19 22:06

【Linux系统编程】IO标准缓冲区

1. 缓冲区概述 标准I/O提供了三种类型的缓冲: 1、全缓冲: 在填满标准I/O缓冲区后才进行实际I/O操作。常规文件(如普通文本文件)通常是全缓冲的。 2、行缓冲: 当在输入和输出中遇到换行符时,标准I/O库执行I/O操作。这允许我们一次输出一个字符,但只有在写了一行之后才进行实际I/O操作。标准输入和标准输出对应终端设备(如屏幕)时通常是行缓冲的。 3、不带缓冲: 用户程序每次调库函数做写操作都要通过系统调用写回内核(...

0
0
发表了博客
2020/03/08 22:21

分批读取文件中数据的程序流程及其C代码实现

一、概述 在实际的软件开发项目中,经常需要处理大量的文件。某些文件中包含了相当多的数据记录数,如作者本人参与过的项目中,一个文件中有好几十万条记录。如果一次性将多条记录读入,则会花费大量的处理时间,且占用大量的内存。为此,要求对于包含大量数据记录的文件进行分批读取操作,即每一轮读取一定数目的数据记录,待将这些记录处理完成之后,再读取下一批数据。本文介绍分批读取文件中数据的程序流程,并给出了C程序实...

0
0
发表了博客
2020/03/23 22:52

数据结构之二叉树

树(tree)是包含n(n>0)个结点的有穷集,其中: 1.每个元素称为结点(node); 2.有一个特定的结点被称为根结点或树根(root)。 3.除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。 树也可以这样定义: 树是由根结点和若干颗子树构成的。树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点...

0
0
发表了博客
2020/03/10 22:45

stm32cubeMX学习、SD卡虚拟U盘实验

本程序编写基于秉火霸道STM32F103ZET6运行环境。跑这个实验之前吃了一些亏,让我一一道来! 1、软件写好了,没发现插入USB线连接到电脑后USB居然没有枚举 解决方法: 野火的这款开发板上做了一个USB上电使能IO,也就是说,当PD3为低电平时,USB才能正常工作,如果不去使能这个管脚的话,USB自然就不工作了。 2、HAL库读写SD卡API版本问题 解决方法: 我用的是1.8.0的HAL库,这个库和老版本的HAL库在API上有重大的变更,接口的参数...

0
0
发表了博客
2020/03/08 22:21

让你提前认识软件开发(4):破除几个有关软件开发的错误观念

第1部分 重新认识C语言 破除几个有关软件开发的错误观念 我们做事情的能力能够有所提升,观念的转变是关键···```。 从学生转变为职业人的过程是很艰难的,因为我们要与自己积累了多年的“老毛病”作斗争,这些“老毛病”包括:做事拖拉、不守时、不遵守规则、怕吃苦等。就像发射火箭卫星一样,摆脱重力的束缚所花费的燃料是最多的,一旦成功,那么以后的流程就会比较轻松了。所谓万事开头难,也就是这个道理。 那么,要想掌握...

0
0
发表了博客
2020/03/11 22:22

C语言表驱动法编程实践(精华帖,建议收藏并实践)

数据压倒一切。如果选择了正确的数据结构并把一切组织的井井有条,正确的算法就不言自明。编程的核心是数据结构,而不是算法。 ——Rob Pike 说明 本文基于这样的认识:数据是易变的,逻辑是稳定的。 本文例举的编程实现多为代码片段,但不影响描述的完整性。 本文例举的编程虽然基于C语言,但其编程思想也适用于其他语言。 此外,本文不涉及语言相关的运行效率讨论。 1 概念提出 所谓表驱动法(Table-Driven Approach)简而言之就...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
2 评论
42 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部