Где хранятся программные определения для разных процессоров?

Мне нужно изменить существующую библиотеку, которая полагается на возможность определить, на какой плате / процессоре выполняется код. Для этого он использует такие определения, как для Arduino Mega:

// Arduino Mega
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)

Мне нужно обновить библиотеку еще для 2 плат, а именно для Raspberry pi pico (mbed os) и Robotis OpenCR.

Кажется, я не могу найти, где на самом деле определено имя процессора. Если бы кто-то мог указать мне правильное направление, это было бы здорово. Спасибо.

Редактировать: Если кто - нибудь знает, что такое equivelent define для raspbery pi pico-rp2040, это было бы фантастически!

, 👍0

Обсуждение

в Arduino вы можете использовать макрос ARDUINO_{build.board}, где build.board определен в boards.txt например, как uno.build.board=AVR_UNO. тогда #idef будет "#ifdef ARDUINO_AVR_UNO"., @Juraj

чем больше вы можете избежать обнаружения платы, тем больше мест будет запущено вашей программой или просто потребуется небольшая модификация вместо того, чтобы смущать разработчика., @dandavis


1 ответ


2

Они определяются самим компилятором и основаны на имени микроконтроллера, передаваемом компилятору как (для AVR GCC) -mcpu=<имя mcu>.

Вы можете перечислить определения для версии GCC, используя (например, для AVR gcc):

avr-gcc -mmcu=atmega328p -dM -E - < /dev/null

Не уверен, что вы будете использовать в Windows для /dev/null. Разные целевые компиляторы используют разные флаги для определения MCU, и вам, конечно, нужно знать, какой MCU плата использует для передачи компилятору.

Вам нужно будет выяснить, какие соответствующие флаги передаются компилятору для ваших желаемых чипов, и вы можете найти их, посмотрев в platform.txt файл для ядра, связанного с платой.

,

Меня больше всего интересует pico, который будет RP2040 или какой-то вариант этого названия. Я не уверен, что он использует компилятор GCC, хотя может и ошибаться., @Ben Bird

Почти все, что не является Microsoft, использует компилятор GCC..., @Majenko