我应该使用哪种变量类型来存储Arduino引脚状态?

4
Arduino文档为数字I/O引脚定义常量HIGHLOW,但没有明确说明它们在底层是什么。因此,如果我想将引脚状态存储在变量中,该变量应该是什么类型?逻辑假设应该是使用int变量中的10,或者使用bool中的truefalse,但我找不到任何说明。

如果你正在使用C++,请使用 bool。如果你正在使用C,则选择 int - mohabouje
这是哪个版本的 C++?你能执行 decltype(HIGH) mystate; 吗? - Galik
谢谢,但为什么C和C ++有不同的类型? - Robert Lewis
@Galik 我非常确定那些是宏定义。 - SergeyA
3个回答


1
一种看待它的方式是,Arduino的开发者发明了HIGHLOW枚举器(宏?)来隐藏这样一个事实:也许,虽然不太可能,会有一种处理器不使用1表示HIGH,0表示LOW。如果你想编写可移植、未来性的代码,那么你应该坚持使用HIGHLOW

另一种看待它的方式是,你(可能)并不真正关心实际引脚状态是什么;你关心的是它所代表的含义:按钮被按下、运动传感器检测到某人、控制杆已被降低等等。你可以将含义存储在任何对你有意义的形式中,比如一个bool,并在跨越边界时在你的概念类型和引脚状态之间进行转换:

bool button_pressed = digitalRead(button_pin) == LOW;
...
digitalWrite(led_pin, button_pressed ? HIGH : LOW);

不要过于担心这里的额外代码,因为如果一切都具有“显而易见”的值和类型,编译器将对其进行优化。
另一方面,这是一个嵌入式系统,通常情况下,普适性往往不如大小和速度重要。在嵌入式系统中,您通常清楚地知道正在编写的硬件。如果需要从中提取每一个位的性能,那么您可能需要放弃使用好用的 digitalRead/digitalWrite API,并直接使用处理器的寄存器。这也没问题。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接