Как обнаружить Genuino 101 внутри кода?
Я использую пользовательскую библиотеку для Arduino Mega, которая использует библиотеку AES для шифрования AES-128.
Однако, когда я пытаюсь использовать эту библиотеку в макетной плате Intel Genuino 101, появляется ошибка компиляции, связанная с тем, что язык ассемблера, написанный в библиотеке AES, был совместим только с устройствами Atmel.
И мой вопрос заключается в том, есть ли способ, чтобы мой код мог автоматически обнаружить плату GENUINO, написав какую-то проверку подписи этой платы, и, следовательно, я могу исключить часть шифрования, если она может успешно обнаружить GENUINO 101.
Если у вас возникнут вопросы, пишите мне, спасибо.
@goddland_16, 👍1
Обсуждение1 ответ
Лучший ответ:
Arduino определяет некоторые макросы, поэтому вы можете использовать условную компиляцию. Например, это из boards.txt:
- используйте
ARDUINO_AVR_PROMICRO
, если это относится к варианту платы - используйте
ARDUINO_ARCH_AVR
, если он предназначен для Arduino с AVR
Также avr-gcc определяет макросы в соответствии с настройками процессора (это должно быть аналогично и для других платформ):
- используйте
__AVR_ATmega32U4__
, если он предназначен только для одного MCU - используйте
__AVR__
, если он совместим со всеми микроконтроллерами на базе AVR
И примеры кода:
#if defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega328__)
// что-то для семейства ATmegaXX8...
#else
// ...
#endif
#ifdef __AVR__
// Код, относящийся к AVR
#else
// Код для других архитектур
#endif
Подробнее о предопределенных макросах в avr-gcc.
Поскольку библиотека совместима со всеми Arduino на основе AVR, вероятно, лучше протестировать #if __AVR__
(или #ifdef __AVR__
), а не конкретные микроконтроллеры., @Edgar Bonet
@KIIV Я пробовал #ifdefined __AVR__, и он принимает, но для #ifdefined(__AVR_ATmega328__) я не смог найти ожидаемого решения. Можете ли вы предложить какую-либо ссылку, которая объясняет больше об этом?, @goddland_16
@goddland_16 Это был пример. Arduino MEGA 2560 использует __AVR_ATmega2560__
. Вы можете проверить этикетку на MCU., @KIIV
Правильный макрос архитектуры Arduino — «ARDUINO_ARCH_AVR», а не «DARDUINO_ARCH_AVR»., @per1234
@per1234: исправлено, ошибка копирования и вставки, как обычно..., @KIIV
@KIIV да, проверил. Рабочий и для UNO это [__AVR_ATmega328P__]., @goddland_16
- Установка timer3 в режиме CTC - конфликт с сервобиблиотекой
- Сборка mocoLUFA под OSX и Linux
- Как передать нестатический член класса для обратного вызова на платформах avr?
- Вопрос о включении операторов и деталей в файл Arduino.h из основной библиотеки
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как получить исходные файлы для библиотек Arduino?
- Как сбросить или отформатировать Arduino?
Нет, вы не хотите, чтобы _ваш код_ обнаруживал Genuino 101. Ваш код не может работать, пока он не будет скомпилирован. Вы хотите, чтобы _компилятор_ определял, компилируется ли он для Arduino на основе AVR или для чего-то несовместимого (будь то ARC, ARM или Intel, не имеет значения). То, что вы хотите, называется [условной компиляцией] (https://en.wikipedia.org/wiki/Conditional_compilation), и именно об этом ответ KIIV., @Edgar Bonet
Да, верно. Простите меня за недоразумение. Это я точно спросил., @goddland_16