Возможно ли в Arduino IDE получить полный листинг скетча со всеми #include одним файлом?

Оригинальная строка из platfom.txt

compiler.cpp.flags={compiler.extra_flags} -c {compiler.optimization_flags} {compiler.warning_flags} -std={compiler.cpp.std} -ffunction-sections -fdata-sections -fno-threadsafe-statics --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -fno-use-cxa-atexit -MMD {compiler.stm.extra_include}

И как результат, нормальная компиляция скетча:

Скетч использует 49044 байт (9%) памяти устройства. Всего доступно 524288 байт.
Глобальные переменные используют 1756 байт (2%) динамической памяти, оставляя 63780 байт для локальных переменных. Максимум: 65536 байт.

Вставляю опцию:

compiler.cpp.flags={compiler.extra_flags} -c {compiler.optimization_flags} {compiler.warning_flags} -std={compiler.cpp.std} -ffunction-sections -fdata-sections -fno-threadsafe-statics --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -fno-use-cxa-atexit -MMD {compiler.stm.extra_include} -dM -E

Результат компиляции:

c:/users/komp/appdata/local/arduino15/packages/stmicroelectronics/tools/xpack-arm-none-eabi-gcc/12.2.1-1.2/bin/…/lib/gcc/arm-none-eabi/12.2.1/…/…/…/…/arm-none-eabi/bin/ld.exe: core\core.a(startup_stm32yyxx.S.o): in function LoopFillZerobss': (.text.Reset_Handler+0x2e): undefined reference to main’
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Generic STM32F1 series.

И это вся команда?
Запустить просто из командной строки?
И больше ни какие пути к файлам, ни какие опции указывать не нужно?

Я бы сделал так:

  1. Сначала запустил бы компиляцию вашего скетча, из IDE
  2. Из окна компиляции достал бы строчку, которая относится непосредственно к компиляции вашего скетча (ближе к концу портянки, поищите строчку с именем вашего скетча)
  3. Открыл окно терминала
  4. Вставил скопированную строчку, добавив в начало (там где опции начинаются, сразу после …g++ ) -dM -E. Добавил бы в конец строчки “> defines.txt”
  5. Нажал энтер
  6. Изучил содержимое defines.txt

Да, проверил, работает. Но нужно еще убрать опцию -o и все, что за ней.
У меня это выглядит так:

“C:\xxx\Arduino15\packages\esp32\tools\esp-x32\2302/bin/xtensa-esp32-elf-g++” -dM -E -MMD -c “@C:\xxx\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-bd2b9390ef\esp32/flags/cpp_flags” -Os -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_ESP32_DEV -DARDUINO_ARCH_ESP32 “-DARDUINO_BOARD="ESP32_DEV"” “-DARDUINO_VARIANT="esp32"” -DARDUINO_PARTITION_default “-DARDUINO_HOST_OS="windows"” “-DARDUINO_FQBN="esp32:esp32:esp32:UploadSpeed=921600,CPUFreq=240,FlashFreq=80,FlashMode=qio,FlashSize=4M,PartitionScheme=default,DebugLevel=debug,PSRAM=disabled,LoopCore=1,EventsCore=1,EraseFlash=none,JTAGAdapter=default,ZigbeeMode=default"” -DESP32 -DCORE_DEBUG_LEVEL=4 -DARDUINO_RUNNING_CORE=1 -DARDUINO_EVENT_RUNNING_CORE=1 -DARDUINO_USB_CDC_ON_BOOT=0 “@C:\xxx\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-bd2b9390ef\esp32/flags/defines” “-IC:\xxxxx\sim7600e_test” -iprefix “C:\xxx\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-bd2b9390ef\esp32/include/” “@C:\xxx\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-bd2b9390ef\esp32/flags/includes” “-IC:\xxx\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-bd2b9390ef\esp32/qio_qspi/include” “-IC:\xxx\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.2\cores\esp32” “-IC:\xxx\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.2\variants\esp32” “-IC:\xxx\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.2\libraries\Wire\src” “-Ic:\xxx\Desktop\Arduino\libraries\Weather” “@C:\xxx\AppData\Local\Temp\arduino\sketches\B28D187F94A44C96CCCE8863C6B1187D/build_opt.h” “@C:\xxx\AppData\Local\Temp\arduino\sketches\B28D187F94A44C96CCCE8863C6B1187D/file_opts” “C:\xxxx\AppData\Local\Temp\arduino\sketches\B28D187F94A44C96CCCE8863C6B1187D\sketch\sim7600e_test.ino.cpp” >defines.txt

Результат (содержимое файла defines.txt):

#define VSPI 3
#define XTENSA_HWCIDVERS_T1030_3 12
#define _XTHAL_MEM_CACHE_MASK(x) ((x) & _XTHAL_SYSTEM_CACHE_BITS)
#define _Nullable 
#define SOC_I2S_SUPPORTS_ADC (1)
#define __PRI32FAST(x) __FAST32 __STRINGIFY(x)
#define VALUE_GET_FIELD(_r,_f) (((_r) >> (_f ##_S)) & (_f))
#define GPIO_FUNC40_IN_INV_SEL (BIT(6))
#define GPIO_SIG31_IN_SEL (BIT(7))
#define ETS_RWBLE_NMI_SOURCE 9
#define PPP_IPV6_SUPPORT CONFIG_LWIP_PPP_ENABLE_IPV6
#define CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT 1
#define SPIWP_IN_IDX 4
#define MEMP_NUM_API_MSG MEMP_NUM_TCPIP_MSG_API
#define GPIO_FUNC74_IN_INV_SEL_M (BIT(6))
#define __cpp_attributes 200809L
#define GPIO_FUNC74_IN_INV_SEL_S 6
#define GPIO_FUNC74_IN_INV_SEL_V 0x1
....

Примерно 500кб текста
1 лайк

Т.е. тема закрыта и вопрос снят? Слава Богу!

1 лайк

Ну ТС сейчас попробует, надеюсь отпишется

Ну, да, я в соседней теме уж неделю жду. Разбирался в чужой библиотеке, примеры писал, а существо “схавало” и ну гу-гу. Думаю, помогло, иначе, проявился бы :frowning:

В классическом жанре всех форумов: «Спасибо! О результате обязательно сообщу!!! [сообщение оставлено 12 лет назад]»
:joy:

3 лайка

Так это ж “нормальное” явление. Поимел и возрадовался. А лохИ пущай цепенеют.

Спасибо огромное.
Получил список всех #define, как и хотел.
Командную строку нашел в окне компиляции, когда указал нужную опцию в настройках. Внёс в неё изменения, сохранил в файл def.cmd.
IDE при выходе, удаляет свои папки из TEMP, пришлось их заранее сохранить отдельно, а после закрытия IDE вернуть их на место.
Запустил свой def.cmd, и получил файл со списком #define.
Я только не понимаю, почему для этого нет простой опции в интерфейсе IDE, зачем “с бубном танцевать”…
Судя по сообщениям на разных форумах, народ частенько изучает эти списки.

Потому, что профессионалу это, по большому счёту, не нужно, а любителю - по тому же гамбургскому счёту, бесполезно.

Но я рад, что у Вас получилось .

Вы нашли в списке что искали?

Я убедился, что в полном списке нет моих #define. Получил подтверждение, что компилятор где-то свернул на другую ветку кода, и объявил другие #define.
Имея полный список, есть вероятность найти, где был сделан выбор, не в пользу моей ветки кода, и возможно даже исправить ситуацию.

С теми же именами?

Любая продвинутая IDE, типа Visual Code или даже Ардуино ИДЕ 2.х - подсвечивает прямо в исходнике, какие ветки условной компиляции будут выбраны, а какие нет.

Судя по тому, что компилятор куда-то “свернул” - вы пытаетесь добавить свои дефайны в чужой код. Обычно это не самая лучшая идея.

Может расскажете, что у вас за проблема на самом деле, вместо того чтобы просить советов по методу решения, который скорее всего выбран не правильно?

2 лайка

Спасибо. Но для начала мне нужно переварить уже полученную инфу.