BabyOS适用于MCU项目,她是一套管理功能模块和外设驱动的框架。
对项目而言,缩短开发周期。项目开发时选择适用的功能模块及驱动。直接进入功能代码编写的阶段。
对工程师而言,减少重复工作。调试过的功能模块和驱动代码放入BabyOS中管理,以后项目可以直接使用,去掉重复调试的工作。
BabyOS代码分为3部分:
BabyOS仓库:功能模块和驱动 ,一般情况下用户不需要改动,可以将此仓库作为子模块。
BabyOS_Config:配置文件和设备注册文件
BabyOS_Hal:硬件抽象层, 不同分支对应不同硬件平台,选择对应平台下载,没有合适的则选择master分支
使用裸机开发的项目推荐基于BabyOS进行。
使用操作系统开发的项目,BabyOS可作为功能库及驱动库使用。
基于STM32F107上使用SPIFLASH及KV功能模块为例
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分支作为模板
//例如使用滴答定时器,中断服务函数调用:void bHalIncSysTick(void); //注:定时器的周期与b_config.h里_TICK_FRQ_HZ要匹配
b_config.h进行配置,勾选其中的KV Enable/Disable项
//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")
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}},}
(依赖硬件平台,使用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; }
(依赖硬件平台,使用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); }
#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); }
更多使用介绍:
对于管脚电平的操作,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
JFinal 是基于 Java 语言的极速 WEB + ORM + AOP + Template Engine 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。