谷动谷力

标题: 51单片机上用BabyOS [打印本页]

作者: sunsili    时间: 2023-8-3 13:47
标题: 51单片机上用BabyOS
本帖最后由 sunsili 于 2023-8-3 14:05 编辑

51单片机上用BabyOS

概述
专为MCU项目开发提速的代码框架BabyOS适用于MCU项目,
她是一套管理功能模块和外设驱动的框架。

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

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


特性


系统框架


代码目录
bos/algorithm 收集常用算法
bos/core 核心文件
bos/drivers 收集外设的驱动文件
bos/hal 硬件抽象层
bos/mcu 收集各型号MCU的底层代码
bos/modules 收集常用的软件CBB模块
bos/thirdparty 收集第三方开源代码
bos/utils 支撑其他模块的开发
bos/_config 全局配置文件
b_device_list.h 设备注册文件
b_hal_if.h 驱动接口文件

移植到51单片机

BabyOS开发者群里,有伙伴提出BabyOS能否在51单片机上跑。(⊙o⊙)…目前BabyOS使用的编程技巧需要C99支持,如果用C51编译器,资源和语法都会有很多问题。因此如果在51单片机上试,改动量还是挺大的。不管怎么样,还是先试试。安装开发环境后找来一张N年前的proteus仿真图,便可以开始了....
经过一顿折腾,终于编译过了。设备驱动无法复用,所以操作设备的统一接口没法使用。先直接操作IO,做一个灯闪烁的实验:
启动一个50ms的定时器作为心跳
  1. static uint16_t u16TimerCfg = 0;
  2. void vTimer0Init(uint8_t xms)
  3. {
  4.   if (xms > (65536 * 12 / SYS_CLK / 1000))
  5.   {
  6.     xms = 65536 * 12 / SYS_CLK / 1000;
  7.   }
  8.   
  9.   TMOD = 0X01;
  10.   u16TimerCfg = 65536 - (xms * 1000 * SYS_CLK / 12);
  11.   TH0 = (u16TimerCfg >> 8) & 0XFF;
  12.   TL0 = u16TimerCfg & 0XFF;
  13.   ET0 = 1;
  14.   EA = 1;  
  15.   TR0 = 1;
  16. }


  17. void vTimer0Handler() interrupt 1
  18. {
  19.   TH0 = (u16TimerCfg >> 8) & 0XFF;
  20.   TL0 = u16TimerCfg & 0XFF;
  21.   
  22.   bHalIncSysTick();   //调用tick自增
  23. }
复制代码


LED灯闪烁间隔1S
  1. B_TASK_CREATE_ATTR(task_attr);
  2. uint8_t stat = 0;

  3. PT_THREAD(task_handler)(struct pt *pt)
  4. {
  5.   PT_BEGIN(pt);
  6.   while(1)
  7.   {
  8.     stat = (stat == 0) ? 0xff : 0;
  9.     P1 = stat;
  10.     bTaskDelayMs(pt, 1000);
  11.   }
  12.   PT_END(pt);
  13. }

  14. void main()
  15. {
  16.   vTimer0Init(50);
  17.   bInit();
  18.   bTaskCreate(&task_attr, task_handler);
  19.   while (1)
  20.   {
  21.     bExec();
  22.     bTaskRun(&task_attr);
  23.   }
  24. }
复制代码

实验现象是正常的,51单片机上运行的基础代码有了,接下来就慢慢扩展完善,整一套适合C51的代码。
目前BabyOS的代码是 bos_c51分支。
实验例子的代码:BabyOS_C51_Template
改完之后唯一的感受就是,以前在51单片机上开发没觉得资源是大问题,现在各种捉襟见肘......  有兴趣开发51单片机的开发者,可以基于以上仓库提交代码。

再提一个主分支的改动吧:b_util_uart 废弃,其功能融入 b_hal_uart
其功能主要是对串口接收的数据进行空闲检测并调用回调。这次将其移入b_hal_uart主要是为了控制往bos投喂串口数据的通道,将以下接口作为唯一入口。
int bHalItInvoke(bHalItNumber_t it, uint8_t index, bHalItParam_t *param);


代码下载:bean/BabyOS_Example - 码云 - 开源中国 (gitee.com)
官方地址:BabyOS:专为MCU项目开发提速的代码框架




欢迎光临 谷动谷力 (http://bbs.sunsili.com/) Powered by Discuz! X3.2