【发布时间】:2021-08-13 09:54:19
【问题描述】:
我大部分时间都是独自完成我的项目,我并不总是确定“其他人”认为哪些是好的做法或垫底做法。
图片你有这些源文件和头文件
foo.cpp
foo.h
bar.cpp
foo.h
假设我需要 foo 和 bar 中的函数来使用 Arduino 的 LiquidCrystal.h 库在 16x2 LCD 上打印文本。我需要包含库并构造一个对象。
我可以制作 2 个新文件:
lcd.cpp 和
lcd.h。
在lcd.cpp 中,我可以制作一个 lcd 对象。
#include <LiquidCrystal.h>
#include "lcd.h"
LiquidCrystal lcd(A5, A4, A0, A2, A1, A3) ;
foo.cpp 和 bar.cpp 都应包含 lcd.h
据我所知,我可以做这两件事。 我可以在 lcd.h 中使用 extern 声明 lcd 对象。比每个包含 lcd.h 的文件都可以访问全局 lcd 对象。所以在 foo.cpp 和 bar.cpp 我都可以输入
lcd.setCursor( 3, 1 ) ;
我相信这与 Arduino 对硬件 Serial 和 Wire 对象的做法非常相似,如果不一样的话。你可以输入
Serial.println(F("Hello world")) ;
在每个包含
或者我可以在 lcd.cpp 中创建包装函数,例如:
void clear()
{
lcd.clear();
}
void setCur(byte x, byte y)
{
lcd.setCursor(x,y);
}
使用包装函数确实为我提供了实现简单轮廓和定位函数的基础设施,例如
void printAt(byte x, byte y, String text)
{
lcd.setCursor(x,y);
lcd.print(text);
}
在这种情况下,是否有不同的选项“更好”? 这两种方法中的一种是否被认为比另一种“更好”?或者它真的不重要,这件事是高度主观的吗?
【问题讨论】:
-
在 1990 年代的设计中使用 C++ 并不是最佳实践,8 位 MCU 资源非常有限。例如,您的静态存储持续时间构造函数(如
LiquidCrystal)将延迟 MCU 启动 - 原因是 C++ 根本不适合此目标。既然你已经吞下了 C++ 骆驼,我就不用担心从那里开始的最佳实践了,干吧。