关于arduino开发的工程方面的一些探索-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2186|回复: 0

关于arduino开发的工程方面的一些探索

[复制链接]
发表于 2021-1-16 23:25 | 显示全部楼层 |阅读模式
本帖最后由 cxg 于 2021-1-16 23:27 编辑

刚开始用Arduino IDE写代码,连个代码提示都没有,后来发现在vscode上有arduino的插件,有代码提示,开发起来比较不错。再后来在vscode又发现了个更好的开发环境PlatformIO。


QQ截图20210116201609.png

刚开始写个demo都写到一个文件中就可以了,随着代码加入的外设越来越多,都写到一个文件中也不太方便。正好 PlatformIO提供了一个好的工程结构。


QQ截图20210116202350.png QQ截图20210116232708.png

外部的库放到lib文件下,自己写的放到src下,看到这个结构我这很高兴啊,本来就是开发web前端的,这跟webpack项目很类似啊。
再看个keil的项目结构,页面UI就不提了。

QQ截图20210116202821.png

关于项目自己的代码把每个外设拿出来写到每个文件中,就可以大大减小入口文件的体积,上下翻动看代码方便。


QQ截图20210116203346.png

每个文件都引用一个共同的头文件config.h,这样就可以把src下所有的文件联系起来。


QQ截图20210116203548.png

在config.h中声明每个文件对外的变量及方法,用extern关键字声明全局变量。
以蜂鸣器外设为例,每个文件有一个初始化方法和刷新方法。


QQ截图20210116203958.png

每个文件自己的变量用static关键字修饰,这样就不会影响到其他文件了。
避免用delay()来执行阻塞代码,这样程序会变得低效。所以仿照javascript语法我写了一个无阻塞执行代码的库
CxgJsTime。看一下bibi()函数如何实现的无阻塞执行,比起传统的写法稍微有点麻烦。


QQ截图20210116204331.png

最后在main.cpp中运行每个外设的init和refresh方法, 开几个线程分配下执行的优先级。


QQ截图20210116204926.png QQ截图20210116204941.png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:41 , Processed in 0.210965 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表