Как узнать тип данных константы в arduino IDE?
Например, константа MSBFIRST
, она использовалась в качестве входных данных в SPI.setBitOrder(MSBFIRST)
. Но, к сожалению, я не знаю данных типа MSBFIRST
. Это применяется к подобным SPI_MODE0
и другим.
1 ответ
Из SPI.h:
#ifndef LSBFIRST
#define LSBFIRST 0
#endif
#ifndef MSBFIRST
#define MSBFIRST 1
#endif
Как вы можете видеть, здесь нет никакого типа. Компилятор просто заменяет буквально "1" на "MSBFIRST". Таким образом, после предварительной обработки ваш код будет выглядеть следующим образом:
SPI.setBitOrder(1)
Чтобы точно знать, что такое тип "1" (я не уверен, зачем вам это нужно знать), вам следует поискать "Целочисленное продвижение C ++". Другими словами, как литеральные целые числа обрабатываются компилятором C ++.
Из комментария:
В этом случае лучше смотреть на желаемый тип целевой функции, а не на тип макроса или const.
Совершенно верно. Если вы заглянете глубже в файл SPI.h, то увидите следующее:
// Эта функция устарела. Новые приложения должны использовать
// beginTransaction() для настройки параметров SPI.
inline static void setBitOrder(uint8_t bitOrder) {
Итак, игнорируя тип MSBFIRST, вы можете видеть, что функция ожидает uint8_t .
Может быть, он хочет знать, что это за тип, чтобы он мог использовать его в качестве параметра для какой-либо функции-оболочки или другой формы уровня абстракции? В этом случае лучше смотреть на желаемый тип целевой функции, а не на тип макроса или const., @Majenko
@Majenko действительно. Я расширил свой ответ, чтобы показать это., @Nick Gammon
@Majenko вы правы, я хочу знать тип, чтобы я мог использовать его в качестве параметра для моего уровня абстракции. Неважно, я уже знаю тип данных с использованием `Serial.println (MSBFIRST)
, он отображал
1
` в последовательном мониторе. Поэтому я предполагаю, что тип данных - целое число без знака, то есть байт., @Muhammad Ikhwan Perwira
- Как получить тип данных переменной?
- Преобразование в Unix Timestamp и обратно
- Почему выходит ошибка: invalid conversion from 'const char*' to 'char' [-fpermissive]??
- Невозможно создать массив типа const char*
- ардуино - миллисекунды ()
- Ошибка Cast from 'char*' to 'uint8_t {aka unsigned char}' loses precision [-fpermissive]
- Получение шестнадцатеричных данных с терминала
- Какой тип данных Arduino допускает десятичные дроби?
короткий и универсальный ответ: посмотрите в файлах .h библиотеки тип параметра функции, @Juraj