BabyOS

为 MCU 项目开发提速的代码框架
授权协议 MIT
开发语言 C/C++
所属分类 其他开源、 嵌入式操作系统
软件类型 开源软件
地区 国产
投 递 者 张绍晖
操作系统 嵌入式
开源组织
适用人群 未知
 软件概览

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

  • 对于管脚电平的操作,BabyOS框架要做以下操作 1、在main.c文件中 void test() {     static uint8_t state = 0;     state = !state;     bHalGPIO_WritePin(B_HAL_GPIOC, B_HAL_PIN9, state);  //每秒开关闪烁 } int main(void) {     bInit();  

  • 之前为了简化问题,兼之之前没有实现semaphore,文件系统的操作未加锁。上次为了实现读取硬盘时睡眠等待,实现了一个sem类,所以为babyos2文件系统加锁的时机已经成熟。 主要用类三个锁: 1.inode table的锁 2.file table的锁 3.inode的锁。 前面两个比较简单,占用锁时间不会太长,用的自选锁,inode可能持有锁时间比较长,所以用的semaphore。 baby

  • 本文基于CUBEMX 使用VSCode编译调试STM32 : https://blog.csdn.net/Q85038427/article/details/114577684  移植BOS;

 相关资料
  • 开发和提交代码 安装环境 推荐在 Linux(如 Ubuntu 14.04+)或 MacOS 环境中开发代码,并安装如下工具。 git:用来获取代码。 golang 1.6+:安装成功后需要配置 $GOPATH 等环境变量。 Docker 1.12+:用来支持容器环境,注意 MacOS 下要用 Docker for Mac。 获取代码 首先注册 Linux foundation ID,并登陆 ht

  • 本文向大家介绍Android购物车项目快速开发,包括了Android购物车项目快速开发的使用技巧和注意事项,需要的朋友参考一下 购物车项目,业务需要实现了一个购物车的项目,简单的了解下实现逻辑:数据计算等是在Adapter中计算出来的,通过在Adapter中计算出来的数据就可以回调到Activity中进行订单操作等功能业务逻辑,每一个店铺产生的数据是走一条流程的,(业务需求:不是作为一个类似淘宝,

  • 问题内容: 我想将我的一个应用程序发布为开源,并想用自己的证书对我创建的二进制文件进行数字签名。(当然,其他任何人都可以下载代码并使用自己的证书自己构建代码。)我想这样做,以便任何人都可以检查此构建是我而不是其他人进行的。我还想用有效的SSL证书创建一个安全的网站,以便访问者可以安全的方式创建自己的帐户,以便为该项目做出贡献。 我可以创建一个自签名证书,但是我真的不喜欢该选项。或者,我可以向Ver

  • 启动项目(请先完成环境依赖安装) 克隆项目 执行 => composer install (如果安装很慢,可以使用国内镜像,但是镜像包会有延迟) 新建一个runtime目录,用于存放日志等cache文件 配置config中的database配置文件 设置config/service.php中的registry_address.目前只支持redis、mysql作为注册中心 启动http server

  • G-framework是项目开发目录,这个目录的名称是可以修改的,比如修改为:App1 Cache/ 这个目录为项目缓存目录 Cache/Datacache/ 数据文件缓存 Cache/HtmlCache/ 静态html页面缓存 cache/template/ 模板文件缓存 Common/Common.php 项目函数 Config/Config.php 项目配置 Config/Home.Conf

  • 在具体编码过程中,我需要一系列提高生产力的功能:批量开/关注释、快速输入代码模板、代码智能补全、路径智能补全、从接口生成实现、查看参考库信息等等,我们逐一来实现。 5.1 快速开关注释 需要注释时,到每行代码前输入 //,取消注释时再删除 //,这种方式不是现代人的行为。IDE 应该支持对选中文本块批量(每行)添加注释符号,反之,可批量取消。本来 vim 通过宏方式可以支持该功能,但每次注释时要自