Где определен макрос digitalPinToInterrupt?
Я новичок в arduino, и мне непонятно, как можно просто писать код в IDE и использовать функции или макросы, такие как #define ISR()
в библиотеке avr-libc, без необходимости включать заголовочный файл в скетч ардуино. Я пытался найти, где определена функция digitalPinToInterrupt ()
, но безуспешно. Есть идеи?
2 ответа
Как правило, если вы хотите найти идентификаторы в вашей поддержке платы 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/
Полученный файл тега может быть затем grep
ed или просто открыт, и могут быть найдены следующие записи, показывающие имена файлов и номера строк для исследования:
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
Если вам нравится возиться с файлами. Платформио — отличный вариант. Он обеспечивает автозаполнение и многие другие расширенные функции.
Вы можете легко увидеть, где определена какая-либо функция/микросхема, просто щелкнув правой кнопкой мыши функцию, а затем нажав кнопку "Перейти к определению" вариант.
Файл, содержащий определение, будет открыт в новой вкладке. Что касается вашего текущего макроса, проверьте изображение ниже.
- Как разбудить Arduino с помощью rtc?
- SPI-транзакции в Arduino
- Считать данные датчика повторно через указанное время?
- Преобразование кода ATTINY85 в ATMEGA2560. Прерывания смены контактов
- Срабатывание ложного прерывания Arduino Mega
- Arduino mega PinChangeInterrupt с 16 битным таймером
- Arduino Mega 2560 подсчет задержек между событиями на разных контактах
- Прерывание продолжает стрелять
Посмотрел на "Arduino.h"?, @Python Schlange
https://arduino.github.io/arduino-cli/latest/sketch-build-process/, @Juraj