Skip to content

Latest commit

 

History

History
126 lines (70 loc) · 6.96 KB

README.md

File metadata and controls

126 lines (70 loc) · 6.96 KB

UN-MCU (企鹅群号8646-01551 答案:1)

写在前面 比较懒 我的文档翔一样 主要是有很多前期写的后期项目优化了用不到了 又不想重新写 因为旧的你看懂了 新的项目中也适用 而且可能学到更多底层的东西 基本微调 改动大的都有说明 但需要您整理下 谢谢理姐

介绍

统一MCU 驱动层和外设层API 因项目需求 mcu被经常更换/不同项目使用不同MCU 导致业务代码需要重构 这边将多MCU进行封装一层进行统一接口调度 仅更换MCU的项目业务逻辑层无需更改 只需要修改配置文件即可 新的项目若同事也·按照接口封装了该型号mcu 则新建工程直接用 目前已部分封装STM32、杰发科技、芯旺微、赛腾微的驱动只封装我用到的部分 后面应该是华大、灵动微了 更多的是需要大家一起努力 这样以后有新的传感器来了我们就不要重复去网上找驱动代码移植 哪怕换了新单片机我只需要映射驱动过去 其他代码不用管

注意事项

因为这个主要本来用所以存在很多不完善地方 RTThread虽然也做了中间层 但是那个可能我不会使用把 不然可以将我的集成上去 以下没集成原因纯属个人理解 首先我没在正式项目用过他,我觉得他用接口是通用但是需要调用时候传一致的参数进去,而我用的是枚举类优先错了编译器会报错 另外我觉得听他的工程比较大而且涉及到内核很多东西我不懂 我想的是裸机可控性高 当然我这个改改也能兼容os的 但是我没有相关项目 平常做的东西都很简单 这个项目主要是抛转引玉 有经验的帮忙完善或者是集成到已有的开源项目

1.IAR没测试

2.OS没测试

3.我所有用到的功能比较少 接口地方还需要扩展

4.发行版的附件中有打好的pack包,每次使用时候请固定当前版本,该项目还在优化中,会一直修改API,直到所有的单片机都兼容了后才会固定API。固定使用版本后就不会影响以前的项目了,keil默认使用最新的,具体操作如下图

输入图片说明

安装教程

  1. 将所有文件拷贝到pack包文件夹 或者压缩成zip把后缀改成pack就可以双击安装成pack/导入到IAR (这里方法是安装法)修改驱动后会影响所有项目 如果想隔离单独拉源码添加到项目或使用时限定版本(推荐) 注意目录结构不要嵌套即在版本下面去打包 输入图片说明

错误示例 目录结构嵌套 在外面打包的 会导致keil无法识别 输入图片说明

使用说明(这里以keil示例 分支中有单独的demo拿来就用 也有相关说明)

  1. 添加到现有项目

输入图片说明

勾选后就会出现项目源码

输入图片说明

这里以STM32 cubemx生成的代码调用为例 引脚定义到配置文件.h中(这是为了方便业务分离 换了mcu只需要修改对应.c 这里自己手动新建 后面使用该库时自动创建)

实现一下

引脚映射

业务中调用

例如板载外设ads115和sht30/sht3x 只需要映射引脚配置参数就可以用了 内部调用了模拟iic

####文件目录树

输入图片说明

输入图片说明

特技

  1. 板内支持的在HAL中能看到最新的 (也封装了个模拟IIC和bootloader的)目前首次更新的如下

输入图片说明

2.板外外设在 FML文件夹中 jfml.h中查看的到引用 如果路径/文件报错就是更新时候没适配/早期一些东西拉进来暂时没用到就没适配

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

3.工具库就没啥了

输入图片说明

如何协作 有经验的也可以帮忙优化或者重构

1.片内外设的新增

在HAL目录下找到目标mcu 新建该mcu文件夹 大的参考目录下STM32实现即可 主要是mcu型号和cubemx自动生成的对上 如果其他没有自动生成的工具 以其官方宏定义定义优先 没有的则自定义 最后将目标.c链接到jqstart.c中 .h添加到jhal.h中

2.板载外设的新增

参考FML/THTB/SHTxx/sht3x.c和FML/adc/ads1115的实现 最后将目标.c链接到jqstart.c中 .h添加到jfml.h中

3.工具类新增 在做上两步时像crc校验或数学公式等常用的自己写的或第三方库 只要不仅仅应用到上面的 可以 添加到Util中 实际步骤也和上面差不多

虽然看起来也会是整个包变大 但是不调用不编译所以自然是越多越好(除非翔山代码将全局变量、数组、静态变量、内联函数乱用,并且到处耦合,你用的时候加一个小功能就和全用一样被全编译了)
由于驱动内部一般不会去改了尽量以性能优化+注释优先 没必要调用用起来简单但是比较重的库 导致编译时候无关的东西太多 另外尽量不要涉及栈 这个原则是拿来就用不需要额外配置 内部用了mymalloc 使用数组当做内存做一些轻量级的变量 malloc哪怕释放似乎也有内存碎片 使用cjson时候久了就宕机 总的来说让代码尽量可控 哪怕你的项目中ok的 别人拿了你的代码也可以检查一下

4.版本打包 我使用的是STM32PackCreator 版本新增时候很方便,用法可以百度去,我的源码中也提交了我当前的配置工程