Как в Arduino IDE получить полный листинг скетча со всеми #include одним файлом ?
Или увидеть все объявленные для скетча #define, включая те, которые объявляет сама IDE ?
Думаю, что никак, но это неточно. У GCC тысячи всяких опций и прочитать про них все я за свою жизнь так и “ниасилил”. Может, быть Вы “асилите”, тогда и нам расскажите.
есть внешние инструменты от энтузиастов, как раз для этого:
Опция вроде как такая в описании нашлась.
Осталось понять, как её (эту опцию) использовать в 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
живёт?
platform.txt я нашел.
Но при попытке добавить опцию “-dM”, компиляция скетча прекращается с ошибками.
Хотя без этой опции скетч компилируется без ошибок.
Похоже в IDE компилятор не поддерживает опцию -dM, или я её не правильно использую.
Её описание легко гуглится “cpp -dM”. Вопросом листинга всех define многие задавались, и в описании GCC есть решение, но у меня не получилось.
Так показывайте как делали.
В природе не существует никакого “IDE компилятора” - это просто gcc.
Не работать может по одной (или обеим) из двух причин:
- Вы неправильно вписали опцию;
- Она противоречит какой-то другой опции, которая там установлена.
Если Вам реально нужна помощь, привыкайте давать информацию. В данном случае от Вас требуется:
- Ваша строка из
platfoms.txt
- Полная копипаста сообщения компилятора
Не гуглится вообще никак. И это опция к 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