«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