-
Alaric 发表于 2020-6-11 09:48
支持,感觉像是一个设备框架
多谢支持,设备驱动结构也是这里面的一个重点。还有一个部分是功能模块,通过配置文件来选择需要使用的功能模块
-
ilovefengshulin 发表于 2020-6-10 15:48
有点像RTOS全家桶,帮顶
多谢支持,这个不是RTOS,现在已经有很多RTOS了,所以咱们就不想着去凑热闹,将这份代码的定位在给裸机开发用户使用,带框架的功能模块和驱动库。使用RTOS的用户也可以拿这份代码做功能库和驱动库
-
看一下,是否解决了闪退和时钟不准的问题
-
arm8686 发表于 2020-6-10 08:59
先 star!再细看。
为以下的集成点个赞(外链已去除):
BabyOS包含了第三方开源代码,这部分代码都 ...
多谢支持,除了下面几项,还集成了FatFS LittleFS以及SFUD,都是一键启用,算是比较方便省事了
-
在这里是很诚心地寻找愿一起开发的朋友。希望有兴趣的朋友可以先去仓库克隆一份代码后实际的看一看。在看完代码,阅读完README后依然有兴趣的就加入进来吧,如果看了后发现有待改进的地方也加入进来一起优化吧!如果您没有看代码或者README也没看,只能说谢谢光临此贴!
-
yang_alex 发表于 2020-6-9 23:19
BabyOS都支持哪些内核的MCU啊?不同的MCU,指令不同,底层的驱动都要封装一遍。另外最好先实现图形界面的配 ...
您可以先看看代码,BabyOS不考虑指令。目前建议使用M系列内核的MCU使用。BabyOS有一个硬件抽象层,不同的MCU只需要实现硬件抽象层里的API即可,驱动和功能模块不用修改,直接使用。不用图形化配置界面,对于驱动来说,只需要修改b_hal里的硬件接口定义,而对于功能模块来说,如果你是使用MDK那么可以使用MDK自带的图形配置界面。建议您先实际看看代码或者是仓库的README
-
GuyGraphics 发表于 2020-6-9 20:10
看着像是泛AUTOSAR项目,给楼主点赞!
多谢支持:)
-
okhxyyo 发表于 2020-6-9 17:04
给楼主点赞!楼主加油!给你挂到今日焦点上宣传一下
多谢支持多谢支持
-
BabyOS是一个活跃的项目,保持一直更新。后续不再到此贴回复最新更新。有兴趣的可以直接到源码地址查看最新动态!
补充内容 (2020-3-8 12:44):
为了方便使用,增加BabyOS使用教程:
https://gitee.com/notrynohigh/BabyOS_Example
在每个分支的README都写有详细步骤。
子模块为BabyOS master分支
https://gitee.com/notrynohigh/BabyOS
-
新增两项方便传输文件至MCU
Xmodem128
//Xmodem128的接收部分
int bXmodem128Init(pcb_t fcb, psend fs); //初始化,注册回调以及指定发送字节的函数
int bXmodem128Parse(uint8_t *pbuf, uint8_t len);
//数据解析,接收到数据后调用此函数。需要将一段数据接收完成后再调用此函数,不能一个字节一个字节的往里放
int bXmodem128Start(void); //启动接收
int bXmodem128Stop(void); //中断接收
void bXmodem128Timeout(void); //判断超时,由bExec()调用
typedef void (*pcb_t)(uint8_t number, uint8_t *pbuf);
//回调函数,number为序号,pbuf为数据指针。每次的数据长度都是128字节
Ymodem
int bYmodemInit(pymcb_t fcb, pymsend fs); //初始化,注册回调以及指定发送字节的函数
int bYmodemParse(uint8_t *pbuf, uint16_t len);
//数据解析,接收到数据后调用此函数。需要将一段数据接收完成后再调用此函数,不能一个字节一个字节的往里放
int bYmodemStart(void); //启动接收
int bYmodemStop(void); //中断接收
void bYmodemTimeout(void); //判断超时,由bExec()调用
typedef void (*pymcb_t)(uint8_t t, uint8_t number, uint8_t *pbuf, uint16_t len);
//回调函数,t为数据类型(文件名/数据)number为序号,pbuf为数据指针,len为数据长度
代码中有实例,利用Xmodem128和Ymodem接收文件,存储至spiflash内,传输结束后读取出来通过串口输出。实验效果:
-
BabyOS过年前最后更新一次。最近新增一项,大家帮忙看看是否有优化地方,在过年前将其改好。
新增:K/V键值对存取b_kv.c b_kv.h
基于SPI Flash存取,无文件系统。占用SPI Flash 4个最小擦除单位(4 * 4K),占用MCU内存 N * 12 Bytes (N表示最多存储多少个键值对,b_config.h配置)。
将4块最小擦除单位分为两组A,B每组两块分别存储数据索引和数据
A1 存储数据索引
A2 存储数据
B1 存储数据索引
B2 存储数据
每次修改或者新增一条K/V键值对就将信息头和数据按照顺序写入A1 A2。当A1或者A2有一块存储满后将有效数据索引和数据抽取转移到B1 B2,将主要存储去转移到B组,B组存储满后按照同样的方法转移到A组。
每次新增或者修改不会对Flash进行擦除,保证了使用寿命。
一块最小擦除单位存满后抽取有效的部分转移到另一块区域,没有在内存定义大的buffer去处理,主要考虑到MCU的内存是稀缺资源不能随意占用。
使用例子:
如图所示,利用KV存储进行系统参数的存取、修改是比较方便的。结果如下:
欢迎大家指导!https://gitee.com/notrynohigh/BabyOS
-
本帖最后由 liklon 于 2020-1-3 09:25 编辑
2019_12_04~2020_01_02更新部分说明
使用说明
FIFO
int bFIFO_Regist(uint8_t *pbuf, uint16_t size); //注册FIFO实例
int bFIFO_Length(int no, uint16_t *plen); //获取有效数据长度
int bFIFO_Flush(int no); //FIFO读写复位
int bFIFO_Write(int no, uint8_t *pbuf, uint16_t size); //写入数据
int bFIFO_Read(int no, uint8_t *pbuf, uint16_t size); //读取数据
AT
typedef struct
{
uint8_t *pResp; //响应数据
uint16_t len; //响应数据长度
uint32_t timeout; //给定超时时间,调用bAT_Write之前给定超时时间
}bAT_ExpectedResp_t;
int bAT_Regist(pAT_TX ptx); //注册AT使用实例,ptx是发送数据的接口
int bAT_Write(int no, bAT_ExpectedResp_t *pe_resp, const char *pcmd, ...);
//发送AT指令, 实例ID 结构体,如所述 不定长参数
int bAT_Read(int no, uint8_t *pbuf, uint16_t size);
//例如AT指令通过串口进行收发,串口接收到模块响应数据后将数据通过这个函数提交给AT单元
//使用详情可见bos/drivers/src/b_f8l10d.c
Nr_micro_shell
int bShellStart(void); //shell 初始化
int bShellParse(uint8_t *pbuf, uint16_t len);
//例如用串口进行交互,串口收到数据后将数据通过此函数丢给shell进行解析
-
huo_hu 发表于 2019-12-24 14:26
其实并不存在所谓的通用软硬件,只是符合一定的协议标准的设备而已,没有协议都是空的.
很高兴能和您针对这方面做讨论,对于MCU的通用,我是这样想的。
功能模块方面,不依赖于硬件的一套代码,例如FIFO,UTC转换,存储机制,这些在项目中都会用到,而这些功能模块我们确实能写成不依赖硬件。那么这就是对于MCU的通用功能模块。
驱动方面,能够有一套标准的接口去操作外设,对于MCU来说也是通用,例如这份代码中,我联系将操作外设的接口写成文件操作。这样我们用起来的时候非常方便,更换硬件不需要动业务部分代码。
总的来说,通用并不是一套代码能够满足任何项目,而是一套标准的东西能方便开发,或者是减少开发时间,拿来就可以用。
-
huo_hu 发表于 2019-12-24 11:07
不太感兴趣,那有那么简单啊,就拿adc来说吧,如果不考虑数据传输,采样位数,采样通道数,采样频率,采样时间同步 ...
还是拿你这个ADC说吧,ADC确实是要考虑你所说的采样位数、通道、频率和采样时间等等。注意哦,你说的这些都是驱动部分。而我这份代码里面所涉及的功能模块是不依赖具体硬件。比如电池电量的采样,ADC采样的函数是做的一个弱函数,ADC实现是用户根据自己的硬件去实现。所以你提到的这些完全不是问题。
再从驱动来说,第一ADC是MCU自带的还是外置芯片,如果是ADC自带的,那么使用时需要根据自己的平台去实现。第二如果是外置芯片,那么是不是可以将这个芯片的驱动写成通用的代码。
不管从功能模块还是驱动来说,你提到的都不是问题
-
symic 发表于 2019-12-23 21:19
很有趣的想法,期待能提供自己的贡献
有兴趣咱们可以一起开发的。
-
110gm 发表于 2019-12-18 12:53
不错@过来好好看看,学习学习。。
欢迎添加驱动和功能模块哦,码云上的代码比github上访问快一些
https://gitee.com/notrynohigh/BabyOS
-
还是需要网友增加驱动和功能模块,这些丰富了,才能体现出它的优势,加速小项目的开发。
-
linshifaa 发表于 2018-10-4 00:53
楼主你用的是W25X flash吗??
是的,华邦的
-
nmg 发表于 2018-9-23 21:00
liklon,能否做一下录制一下作品的功能演示视频
已经补充了演示视频
-
lehuijie 发表于 2018-9-8 15:17
想问一下,上位机是自己写的吗?
是啊,QT很方便