涂鸦arduino中文社区活动
查看: 494|回复: 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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

字符串是否对比该使用哪个函数?
字符串是否对比该使用哪个
现有问题是, 串口接收到的数据是正常的,(通过print函数打印串口收
VSCode+PIO开发环境中添加Blinker.h的问题
VSCode+PIO开发环境中添加
我在main.c中添加就没问题,但是添加在.h文件中就会出现编译错误,在其他.c文件添加此
【干货分享】mega2560原理图PCB图纸altium designer18
【干货分享】mega2560原理
分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
这样写不对吗,为啥老是报错
这样写不对吗,为啥老是报
Python上位机控制WS2812B
Python上位机控制WS2812B
说在前面: 设计师对颜色有着天生的敏锐性,而工程师眼中这些都会幻化成数值。。
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表