分享一份给小型项目使用的通用代码

2019-12-08 14:38发布

data/attach/1912/4cm28v6ij1wfv18gwz6oabdw78z3q43m.jpg 本帖最后由 怂包BB 于 2019-12-4 00:35 编辑

BabyOS        为小型项目而生,一个如孩童般需要集体喂养的弱操作系统。为什么称它为弱操作系统,因为相比已有的嵌入式操作系统,这个显得比较弱鸡。这里姑且称之为操作系统吧,其本质是一份代码集中营。

适用项目
        BOS: 当前项目是否需要使用像FreeRTOS等操作系统?        U: 需要!        BOS:不好意思,我可能不适合你。        U: 开玩笑的,不需要用操作系统        BOS: 那您可以尝试使用我哦!
             说一说写这么个东西的原因,大概就知道这份BOS有哪些功能。             ................        某天、一位猿说,现在对项目就只有两个要求,功耗和开发时间。99.874%产品是电池供电,功耗是重点考虑对象。其次产品的功能都不复杂,项目之间也有很多重复的部分,是否有套代码能够减少重复的工作,加速产品demo的开发。             ................        功耗,为减小功耗,对于外设的操作原则是,唤醒外设,操作完成后进入睡眠。这样的操作形式和文件的操作很类似,文件的操作步骤是打开到编辑到关闭。决定将外设的操作看作是对文件的操作进行。每个外设打开后返回一个描述符,后续代码中对外设的操作都是基于这个描述符进行。关闭外设后回收描述符。那么在外设的驱动中,打开和关闭操作可以执行对设备的唤醒和睡眠。利用描述符来操作外设还有一个好处是,当更换外设后,只需更换驱动接口,业务部分的代码不需要变动。        快速开发,小型项目的开发中,有较多使用率高的功能模块,例如:UTC、错误管理、电池电量、存储数据、上位机通信、固件升级等等。将这些功能都做成独立的模块,不依赖于硬件。再配合一份配置文件,每次根据功能需求选择当前项目使用的功能模块。简单来说就是搭积木。       BOS  0.0.1版本驱动只加入模拟串口和华邦flash。存在的功能模块如下表所示。[td]序号功能模块说明1电量检测支持设置阈值用于判断电量状态,正常或者低电量2校验计算支持CRC32,累加和,异或和校验3错误管理支持两种等级的错误管理4事件管理支持事件触发某个操作5MODBUS协议支持MODBUS协议RTU传输组包和解析6私有协议协议格式:[header|id|len|cmd|data|crc]7固件升级支持固件升级(私有协议基础上完成新固件的接收与存储)8数据存取支持三种数据存储方式(定时存储、单次存储、连续存储)9发送管理管理发送数据的秩序,防止未发送完成时又有新数据请求发送10UTC支持UTC的转换,UTC起始时间为2000-1-1 0:0:0
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
53条回答
zhaoyuanxian
1楼-- · 2019-12-14 22:31
 精彩回答 2  元偷偷看……
jssd
2楼-- · 2019-12-15 01:40
一直想模块化又便于管理和使用的框架。学习一下。感谢楼主分享
wajlh
3楼-- · 2019-12-15 04:19
好东西不错,楼主可以说一下,        发送管理 的实现思路么?另外发送的数据需要主机回复的这类消息,发送管理也适用么?
怂包BB
4楼-- · 2019-12-15 05:38
wajlh 发表于 2019-12-6 10:19
好东西不错,楼主可以说一下,        发送管理 的实现思路么?另外发送的数据需要主机回复的这类消息,发送管理也 ...

发送管理目前是这样的:
只是管理数据的发送,保证当前数据没有发送完成前不会有新的数据插入。
针对两种类型的发送:
1. 类似串口,调用完发送函就可以认为发送结束
2. 类似通讯模组,数据丢给模组后还需要等待发送完成信号
应用中有需要发送数据的地方,实质是请求将数据copy进管理单元的一块buffer,如果当前正在执行发送(发送未完成)就会拒绝这次请求。

关于接收,接收一般都是中断。如果使用的是私有协议那一块,只需要将接收到的数据抛给私有协议处理,注册私有协议实例的时候会要求指定分发函数,所以如果是按照协议来通讯,最终会走到分发函数,根据不同的指令做对应的事情。
wajlh
5楼-- · 2019-12-15 06:00
怂包BB 发表于 2019-12-6 10:45
发送管理目前是这样的:
只是管理数据的发送,保证当前数据没有发送完成前不会有新的数据插入。
针对两种 ...

明白了。谢谢楼主

一周热门 更多>