Определить, является ли MCU ESP8266 или ESP32

Я кодирую библиотеку, которая обрабатывает процедуры сна.

Поскольку я использую как ESP826, так и ESP32, которые используют разные команды ожидания (и Wi-Fi), я ищу способ обнаружить MCU, не используя логический флаг, который указывает на это.

Парень

, 👍0

Обсуждение

#если определено (ESP8266), #если определено (ESP32), @Juraj

как вы могли бы использовать логический флаг? код для esp32 не будет компилироваться на esp8266 и наоборот, @Juraj

@Juraj часть, для которой код отличается, мне нужен флаг., @Guy . D

у вас есть в вопросе "пока НЕ используется логический флаг, который указывает на это". таким образом, вы исключаете несуществующую опцию, @Juraj


1 ответ


Лучший ответ:

6

Я полагаю, это означает, что вы не хотите просить пользователя кода настроить логический флаг.

Пакет ESP8266 для Arduino обеспечивает -DARDUINO_ARCH_ESP8266 -DESP8266 параметры командной строки эти при вызове g ++. Они эффективно определяют макросы тестирования функций #define, как если бы они были в начале исходного кода.

Для ESP32 это аналогично с -DARDUINO_ARCH_ESP32 -DESP32

Вы можете выполнять тесты в своем коде, такие как:

#if defined (ARDUINO_ARCH_ESP8266)
// сделай одну вещь
#elif defined(ESP32)
// сделай еще один
#else
#error Architecture unrecognized by this code.
#endif

Вероятно, существуют также подобные макросы, которые предопределены компилятором xtensa g ++.

,