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

Как в Arduino IDE получить полный листинг скетча со всеми #include одним файлом ?
Или увидеть все объявленные для скетча #define, включая те, которые объявляет сама IDE ?

Думаю, что никак, но это неточно. У GCC тысячи всяких опций и прочитать про них все я за свою жизнь так и “ниасилил”. Может, быть Вы “асилите”, тогда и нам расскажите.

  1. Полное описание возможностей GCC
  2. Немножко не полное, но зато с кучей примеров и объяснений
2 лайка

есть внешние инструменты от энтузиастов, как раз для этого:

Опция вроде как такая в описании нашлась.
Осталось понять, как её (эту опцию) использовать в IDE.

Нельзя. Программа на C++ фундаментально разбита на много файлов, некоторые из которых не существуют в виде исходного кода. И даже склеив те, что существуют, ты не получишь корректную программу.

А как тогда у меня это называется?

Спойлер
C:\Users\123\AppData\Local\Temp\arduino_build_685478/MyUART_byte.ino.elf:     file format elf32-avr


Disassembly of section .text:

00000000 <__vectors>:
__vectors():
   0:	09 c0       	rjmp	.+18     	; 0x14 <__ctors_end>
   2:	5b c0       	rjmp	.+182    	; 0xba <__bad_interrupt>
   4:	5a c0       	rjmp	.+180    	; 0xba <__bad_interrupt>
   6:	5a c0       	rjmp	.+180    	; 0xbc <__vector_3>
   8:	58 c0       	rjmp	.+176    	; 0xba <__bad_interrupt>
   a:	57 c0       	rjmp	.+174    	; 0xba <__bad_interrupt>
   c:	56 c0       	rjmp	.+172    	; 0xba <__bad_interrupt>
   e:	55 c0       	rjmp	.+170    	; 0xba <__bad_interrupt>
  10:	54 c0       	rjmp	.+168    	; 0xba <__bad_interrupt>
  12:	53 c0       	rjmp	.+166    	; 0xba <__bad_interrupt>

00000014 <__ctors_end>:
__trampolines_start():
  14:	11 24       	eor	r1, r1
  16:	1f be       	out	0x3f, r1	; 63
  18:	cf e9       	ldi	r28, 0x9F	; 159
  1a:	cd bf       	out	0x3d, r28	; 61

0000001c <__do_clear_bss>:
__do_clear_bss():
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2441
  1c:	20 e0       	ldi	r18, 0x00	; 0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2442
  1e:	a0 e6       	ldi	r26, 0x60	; 96
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2443
  20:	b0 e0       	ldi	r27, 0x00	; 0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2444
  22:	01 c0       	rjmp	.+2      	; 0x26 <.do_clear_bss_start>

00000024 <.do_clear_bss_loop>:
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2446
  24:	1d 92       	st	X+, r1

00000026 <.do_clear_bss_start>:
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2448
  26:	a5 36       	cpi	r26, 0x65	; 101
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2449
  28:	b2 07       	cpc	r27, r18
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr25/tiny-stack/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2450
  2a:	e1 f7       	brne	.-8      	; 0x24 <.do_clear_bss_loop>
.do_clear_bss_start():
  2c:	01 d0       	rcall	.+2      	; 0x30 <main>
  2e:	6b c0       	rjmp	.+214    	; 0x106 <_exit>

00000030 <main>:
main():
C:\Users\123\AppData\Local\Arduino15\packages\MicroCore\hardware\avr\2.2.0\cores\microcore/wiring.c:155
  #ifdef ENABLE_MICROS
    // Set a suited prescaler based on F_CPU
    #if F_CPU >= 4800000L
      TCCR0B = _BV(CS00) | _BV(CS01); // F_CPU/64
    #else
      TCCR0B = _BV(CS01);             // F_CPU/8
  30:	82 e0       	ldi	r24, 0x02	; 2
  32:	83 bf       	out	0x33, r24	; 51
C:\Users\123\AppData\Local\Arduino15\packages\MicroCore\hardware\avr\2.2.0\cores\microcore/wiring.c:158
    #endif
    // Enable overflow interrupt on Timer0
    TIMSK0 = _BV(TOIE0);
  34:	89 bf       	out	0x39, r24	; 57
C:\Users\123\AppData\Local\Arduino15\packages\MicroCore\hardware\avr\2.2.0\cores\microcore/wiring.c:160
    // Set timer0 couter to zero
    TCNT0 = 0;
  36:	12 be       	out	0x32, r1	; 50
C:\Users\123\AppData\Local\Arduino15\packages\MicroCore\hardware\avr\2.2.0\cores\microcore/wiring.c:164
  #endif

  // Turn on global interrupts
  sei();
  38:	78 94       	sei
pinMode():
C:\Users\123\AppData\Local\Arduino15\packages\MicroCore\hardware\avr\2.2.0\cores\microcore/wiring_digital.c:27
 *        INPUT_PULLUP - set pin as input and enable internal pullup resistor
 */
void pinMode(uint8_t pin, uint8_t mode)
{
  if(mode == OUTPUT) // Pin as output
    DDRB |= _BV(pin);
  3a:	b9 9a       	sbi	0x17, 1	; 23
digitalWrite():
C:\Users\123\AppData\Local\Arduino15\packages\MicroCore\hardware\avr\2.2.0\cores\microcore/wiring_digital.c:47
 * @param val The state to set. Valid options are HIGH or LOW
 */
void digitalWrite(uint8_t pin, uint8_t val)
{
  if(val)
    PORTB |= _BV(pin);  // Set pin high
  3c:	c1 9a       	sbi	0x18, 1	; 24
  3e:	89 ee       	ldi	r24, 0xE9	; 233
  40:	93 e0       	ldi	r25, 0x03	; 3
  42:	01 97       	sbiw	r24, 0x01	; 1
delay():
C:\Users\123\AppData\Local\Arduino15\packages\MicroCore\hardware\avr\2.2.0\cores\microcore/wiring.c:138
 *
 * @param ms The number of milliseconds to pause
 */
.
.
.

Мне похеру как это называется. К чему ты это написал? Это не “полный листинг скетча со всеми #include”.

Дык, я же не спорить, а уточнить, спросить хотел.
Похоже на ассемблерный листинг, но есть Си-шные функции
P.S. #include в принципе тоже все видны.

Ну, это просто. Все опции командной строки для запуска компилятора находятся в файле platform.txt, найдите там ключ compiler.cpp.flags= и впишите в эту строку нужную опцию (по образу и подобию как остальные там вписаны).

Не верю, что получите то, что просили, но если, вдруг, получите, напишите нам что за опция-то!

Знаете, где platform.txt живёт?

1 лайк

platform.txt я нашел.
Но при попытке добавить опцию “-dM”, компиляция скетча прекращается с ошибками.
Хотя без этой опции скетч компилируется без ошибок.
Похоже в IDE компилятор не поддерживает опцию -dM, или я её не правильно использую.
Её описание легко гуглится “cpp -dM”. Вопросом листинга всех define многие задавались, и в описании GCC есть решение, но у меня не получилось. :frowning:

Так показывайте как делали.

В природе не существует никакого “IDE компилятора” - это просто gcc.

Не работать может по одной (или обеим) из двух причин:

  1. Вы неправильно вписали опцию;
  2. Она противоречит какой-то другой опции, которая там установлена.

Если Вам реально нужна помощь, привыкайте давать информацию. В данном случае от Вас требуется:

  1. Ваша строка из platfoms.txt
  2. Полная копипаста сообщения компилятора

Не гуглится вообще никак. И это опция к cpp, а не gcc, что вполне очевидно. И это не делает даже близко того, что ты просишь.

Вот народ привередливый пошёл)). Пожалуйста - все #include(#6)
Даже указано в каких местах скетча используются, с какой строчки включенного файла, и что именно. Ну нет - так нет.

А если набрать в строке поиска гугла такую строку, обязательно с кавычками:
“forum.arduino” “arm-none-eabi-g++” “-dm - e”

Там используют опцию -dM именно с “arm-none-eabi-g++”
Я хочу видеть все #define, даже объявленные системной.
Не знал, что есть опция для этого, поэтому как вариант, хотел видеть полный листинг, из которого и собирался выделить все #define.

У меня файл *.elf в папке “temp” не содержит текст, видимо какую-то опцию нужно изменить в файле настроек.

Кстати.
Вторая часть моего вопроса:
Или увидеть все объявленные для скетча #define, включая те, которые объявляет сама IDE ?
Именно это, согласно описанию, должна делать опция “-dM”.

Вы решили забить на это дело? Информации о проблеме

не будет?

gcc -dM -E file.c

Полный листинг скетча с процессингом всех #include файлов, вероятно, придется написать самому. Только вот что вы будете делать с результатом? Там будет здоровенный файл

Если вам просто список функций и переменных нужен глобальный, то попробуйте

objdump -d -C your_file.elf

это опция GCC . Неважно C или C++ препроцессор.
Первый же результат в гугле.