BabyOS 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
BabyOS 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
BabyOS 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 C/C++ 查看源码 »
操作系统 嵌入式
软件类型 开源软件
开源组织
地区 国产
投 递 者 Alias_Travis
适用人群 未知
收录时间 2021-01-27

软件简介

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)
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
2 评论
56 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部