一些单片机比赛,开发中的问题解决办法

博客链接:https://hanbaoaaa.xyz/id/1450

从问题出发

  • 单片机种类繁杂,库也各不相同
  • 无意义的学习成本:每学习一个ide可能就要花费大量时间来熟悉操作,快捷键
  • 脱离开版本管理的代码,无法对学习有一个实质性的记录,代码的复用基于文件拷贝,相当低效
  • 宏定义等配置性内容过度耦合在代码中,降低了复用性

=》一种解决思路:构建通用库,使用更现代的vscode进行代码编写

市面上最火的就是arduino,还有国内的rtthread在包环境管理方面都是做的不错的

比较推荐都去了解一下

=》但是有一个新的问题:

​ 对于比赛,此类框架都很大型,不适宜自己进行不同平台的适配

=》整个协会,几个人之间,团队内,或者个人,构建自己的通用库

(推荐多人,个人有些浪费时间

大致思路:

  • 关于通用库

    • 基本代码部分分为
      • 适配层
        • 平台(mcu种类),
        • 对应mcu的内置功能(延时,串口,adc,iic,spi…
      • 外设层
        • 显示
          • 屏幕
          • 图形库
        • 传感器
          • 各类传感器
      • 算法
        • 信号处理算法
        • 控制算法
    • 开发的时候。我们调用都使用共同的api,这样在遇到新的平台要求时候,直接进行适配层的编写即可
  • 引入版本管理

    进行模块化git管理,git的submodule功能为我们提供了项目的组合功能,这样便可以将每一个模块作为子仓库引入到项目中。但是submodule也存在一个缺点,不太容易管理,所以我专门在vscode上开发了一个插件

    image-20220107154411519

    这个插件可以直接让你自己设计自己的项目子模块结构,并且根据需要进行加载,只要修改used标签,也可以对仓库进行重命名。

    image-20220107154726389

    然后一键进行子模块仓库的加载

  • 解决宏定义耦合在代码中问题

    • 这个问题需要外部脚本的帮助,因为宏是一种死代码,像cmake这种管理工具就会提供这样的功能,各类ide也会提供,但是宏多起来之后就会混乱,所以我设计了一种层次化描述宏的插件,

      image-20220107160000144

    大概的思路是在每一个库(模块)目录下创建一个描述文件(该文件名可以预先配置 下面我配置的是describe.txt

    image-20220107160245996

    在describe.txt中写上

    然后可以通过插件遍历整个项目结构中相关宏 以及 目标生成的头文件

    header=目标头文件

    宏定义名称|宏定义默认值

    image-20220107160422111

    然后使用插件可以进行遍历项目结构中所有描述文件,并生成配置树

    image-20220107160645898

    以后只要在树里面配置即可进行不同平台的迁移了

这些是我个人在电子类学习和比赛中发现的传统模式中的不足点和想到的较为有效的解决办法,希望可以对大家有所帮助,能让各位将精力更多的放到技术底层原理,拓宽技术的眼界,而不是繁琐冗余的不同工程平台学习中去,学习发现和解决问题本身的能力

ps:一篇文章没法具体的讲清各个细节,欢迎有兴趣,有能力的同学来进行交流

相关的项目以供参考

ActivePeter/paMcuLib: My commonLib for MCUs. 我的mcu通用库 (github.com)

ActivePeter/paRobotArm: 🎨 A robot arm project with esp32 based on paMcuLib, light and easy to adapt to new platforms. 一个可以绘制你想绘制的东西的机械臂项目 (github.com)

ActivePeter/MacroDefineHelper-vscode: Iterate through the macro helper configuration file in the directory and generate a configuration tree. Then generate a series of macros in head files. 遍历目录中的宏助手配置文件并生成配置树,再根据配置树生成一系列宏 (github.com)

ActivePeter/SubmoduleHelper-vscode: I’m going to write a vscode extension available to choose needed submodules and auto load them, just like some package manager. (github.com)

版权声明:本文为CSDN博主「hanbaoaaa」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhong1213/article/details/122367343

生成海报
点赞 0

hanbaoaaa

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

基于8051单片机实现电子时钟+数字秒表设计

概述 电子时钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显 示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许

74HC138译码器的原理和使用

前言 译码器就是将每个输入的二进制代码译成对应的输出高低电平信号,和编码器互为逆过程。 百度百科 74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL&#xf