«LOW» определяется как «0», а «HIGH» определяется как «1» — является ли это частью внешней спецификации?
Arduino.h
определяет LOW
как 0x0
и HIGH
как 0x1
. Собирается ли API Arduino раскрыть этот факт? Гарантирует ли это, что так будет всегда?
Другими словами, какова предполагаемая цель этих констант манифеста: LOW
и HIGH
?
Это чисто косметическая мнемоника, добавленная в качестве альтернативы
0/1
иfalse/true
, для тех, кому нравитсяLOW/HIGH
лучше?Или это попытка абстрагировать/изолировать исходный код пользователя от фактического представления
LOW
иHIGH
(например, в случае изменения представления в будущее)?
Основная причина этого вопроса – выяснить, похож ли код
digitalWrite(some_pin, true);
digitalWrite(some_other_pin, !digitalRead(some_other_pin));
это хорошая практика программирования. (Если LOW
и HIGH
предназначены для абстрагирования пользовательского кода от их фактических значений, то такой код определенно является плохой практикой программирования.)
@AnT, 👍2
Обсуждение1 ответ
Лучший ответ:
Основная причина этого вопроса – выяснить, похож ли код
digitalWrite(some_pin, true); digitalWrite(some_other_pin, !digitalRead(some_other_pin));
это хорошая практика программирования. (Если LOW и HIGH предназначены для абстрагирования пользовательского кода от их фактических значений, то такой код определенно является плохой практикой программирования.)
Строго говоря, нет, это нехорошая практика программирования.
digitalRead()
возвращает int
. digitalWrite()
ожидает int
. Использование !
преобразует int
в bool
, а затем снова преобразует его в int
.
Фактически, API ядра Arduino «следующего поколения» меняет HIGH и LOW с простого int
на enum
— и это затрудняет приведение через bool
вот так:
typedef enum {
LOW = 0,
HIGH = 1,
CHANGE = 2,
FALLING = 3,
RISING = 4,
} PinStatus;
Вы можете увидеть проблемы, которые вызывают здесь.
- устаревшее преобразование из строковой константы в 'char*'
- Что означает “LSB на градус в секунду” (LSB per degree per second)?
- Какие есть другие IDE для Arduino?
- Esp8266 Vin контакт
- Плата для разработки STM8 с Arduino IDE
- Поскольку double и float представляют один и тот же тип данных (обычно), что предпочтительнее?
- Скрытие пароля WLAN при отправке на GitHub
- Как я могу прервать задержку() при нажатии кнопки?
Разве не может быть и то, и другое?, @jose can u c
@jose can uc: Могло бы. Но по-настоящему решающим моментом здесь является то, будет ли ответ на *второй* вопрос «да»., @AnT
Глядя на предшественника платформы Arduino, [WConstants.h](https://github.com/WiringProject/Wiring/blob/da0b6b9282ae6a3f047235b5a91b6df567fdf22f/framework/cores/Common/WConstants.h#L39), похоже, имеет закомментированный
0xFF
как потенциальное определениеHIGH
, поэтому пункт 2 может иметь место..., @jose can u c