Где определен макрос digitalPinToInterrupt?

Я новичок в arduino, и мне непонятно, как можно просто писать код в IDE и использовать функции или макросы, такие как #define ISR() в библиотеке avr-libc, без необходимости включать заголовочный файл в скетч ардуино. Я пытался найти, где определена функция digitalPinToInterrupt (), но безуспешно. Есть идеи?

, 👍1

Обсуждение

Посмотрел на "Arduino.h"?, @Python Schlange

https://arduino.github.io/arduino-cli/latest/sketch-build-process/, @Juraj


2 ответа


1

Как правило, если вы хотите найти идентификаторы в вашей поддержке платы Arduino, вы можете запустить программу ctags на файлах libc и Arduino core. ctags используется как часть процесса сборки в его усилиях по созданию объявлений C++ для вас. Так что он, как правило, доступен вам как пользователю Arduino. Вы должны найти ctags или ctags.exe в:

/path/to/arduino15/builtin/tools/ctags/version-number/

Это может быть запущено против вашей поддержки плат в следующих случаях:

/path/to/arduino15/packages/vendor/hardware/architecture/version-number/

А ваши стандартные библиотеки находятся под каталогами в виде:

/path/to/arduino15/packages/vendor/tools/compiler-tool/version-number/

Если вам интересно, какой файл /path/to/arduino15/ будет находиться в вашей системе, он задокументирован здесь с точки зрения того, где хранится файл настроек. Соответствующие пути, содержащие номера версий и имена архитектур, должны отображаться в выходных данных verify/compile при включении подробного режима в настройках.

Конкретный пример

В моей системе Linux с достаточно актуальными версиями вещей, связанных с UNO, моя командная строка будет выглядеть следующим образом:

~/.arduino15/packages/builtin/tools/ctags/5.8-arduino11/ctags \
    -f /tmp/output-file \
    -R \
     ~/.arduino15/packages/arduino/hardware/avr/1.8.3/ \
    ~/.arduino15/packages/arduino/tools/avr-gcc/4.8.1-arduino5/avr/include/

Полученный файл тега может быть затем greped или просто открыт, и могут быть найдены следующие записи, показывающие имена файлов и номера строк для исследования:

DigitalPinToInterrupt   /home/user/.arduino15/packages/arduino/hardware/avr/1.8.3/variants/circuitplay32u4/pins_arduino.h   138;"   d
digitalPinToInterrupt   /home/user/.arduino15/packages/arduino/hardware/avr/1.8.3/variants/ethernet/pins_arduino.h  79;"    d
digitalPinToInterrupt   /home/user/.arduino15/packages/arduino/hardware/avr/1.8.3/variants/gemma/pins_arduino.h 64;"    d
digitalPinToInterrupt   /home/user/.arduino15/packages/arduino/hardware/avr/1.8.3/variants/leonardo/pins_arduino.h  160;"   d
digitalPinToInterrupt   /home/user/.arduino15/packages/arduino/hardware/avr/1.8.3/variants/mega/pins_arduino.h  110;"   d
digitalPinToInterrupt   /home/user/.arduino15/packages/arduino/hardware/avr/1.8.3/variants/robot_control/pins_arduino.h 120;"   d
digitalPinToInterrupt   /home/user/.arduino15/packages/arduino/hardware/avr/1.8.3/variants/robot_motor/pins_arduino.h   115;"   d
digitalPinToInterrupt   /home/user/.arduino15/packages/arduino/hardware/avr/1.8.3/variants/standard/pins_arduino.h  79;"    d

В случае Uno стандартным вариантом является значимое заявление.


Существуют различные реализации ctags. Тот , который используется файлами поддержки Arduino, - это Обильные CTAGS, и вы можете прочитать его документацию, чтобы узнать, как управлять программой для отображения по-разному, чтобы искать только определенные идентификаторы и т. Д. Он также обычно используется с редакторами, которые имеют некоторую специальную поддержку результирующего файла тегов, чтобы перейти к определениям, как это делает IDE.

,

Кстати, я только что заметил вашу метку "atmega2560". Общие инструкции должны охватывать это в любом случае, но: Вы бы посмотрели на [мега-вариант](https://github.com/arduino/ArduinoCore-avr/blob/1.8.3/boards.txt#L213), который указывает [этот файл и строку](https://github.com/arduino/ArduinoCore-avr/blob/1.8.3/variants/mega/pins_arduino.h#L110)., @timemage


0

Если вам нравится возиться с файлами. Платформио — отличный вариант. Он обеспечивает автозаполнение и многие другие расширенные функции.

Вы можете легко увидеть, где определена какая-либо функция/микросхема, просто щелкнув правой кнопкой мыши функцию, а затем нажав кнопку "Перейти к определению" вариант. Вот картинка

Файл, содержащий определение, будет открыт в новой вкладке. Что касается вашего текущего макроса, проверьте изображение ниже. определение макроса digitalPinToInterrupt

,