arduino 1.8.x отладка в Proteus-8

bordol
Offline
Зарегистрирован: 03.10.2018

Получаю ...elf - файл, загружаю в протеус : все работает.

При переходе в "Паузу", показывается текст программы, но все строки помечены "-" и без адресов.

Как я понимаю, в настройках Ардуино отключена опция записи отладочной информации в ELF-файл.

Zip-файл Arduino-1.8.5(7) скачивал с arduino.cc, в настройки не лазил.

В ранней версии 1.6.8 все было норм.

Кто столкнулся с такой проблемой, подскажите пожалуйста, как с этим бороться.

С уважением. bordol.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Включите verbose сборки/загрузки в свойствах, в средах обеих версий посмотрите какие у компилятора командные строки вблизи -o (уровни оптимизации). Оттуда копать. Народ радовался что новые версии среды собирают менее раздутый файл, может это как раз та самая цена.

bordol
Offline
Зарегистрирован: 03.10.2018

имеете в виду файл prefernces.txt ?

и там и там стоит build.verbose=true

попробовал в 1.8.7 поставить false - результат тот же.

мне кажется, что это должно быть где-то в файле platform.txt,

но что-то не могу разобраться...

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Если в обеих build.verbose=true, то лог сюда. Всё что появляется в чёрной части окна по Ctrl+R. Из сред обеих версий, и будем сравнивать.

UPD. Короче, найти файлы в которых попадается:

[пробел]-Os[пробел]

убедиться что это часть команды компилятору, заменить на 

[пробел]-Og[пробел]

Не факт что пробелы попадутся, вообще шаблон -O*, где * - любое количество знаков, включая 1. Но этот шаблон слишком общий. Оптимизация по размеру - с буквой s, дебажный режим g.

Посмотреть что будет. При достижении результата вернуть на место, убедиться что восстановлено первоначальное поведение компилятора, снова поменять, запомнить где менять. Лично мне копаться в шаблонах командных строк лень, я блондинка, просто жму кнопку Ctrl+U/Ctrl+Shift+U и меня всё устраивает. И версия среды у меня 1.0.5.

bordol
Offline
Зарегистрирован: 03.10.2018

чт-то ступил насчет verbose...

1.8.7
Компиляция скетча...
avr-g++ -c -g -Os -Wall -Wextra.....

Linking everything together...
avr-gcc -Wall -Wextra -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections

1.6.8

avr-g++" -c -g -Os -Wall...

avr-gcc -c -g -x....

avr-gcc -Wall -Os -Wl,--gc-sections....

"-g" - вроде включение отладки

как-то они по-разному...

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

bordol пишет:
"-g" - вроде включение отладки

Так написано в мануале к avr-gcc. Но я не настолько хорошо всё это знаю, чтобы заявлять что для включения отладки достаточно поменять один ключ. Придётся искать.

bordol пишет:
как-то они по-разному...

Мб есть смысл подставить строку из прошлой версии и посмотреть, что будет. Вообще, -Ox, -g. Но не факт.

 

bordol
Offline
Зарегистрирован: 03.10.2018

в platform.txt поменял все "-Os" на "-Og" - без разницы, хотя размер ельфа чуть-чуть вырос.

собака рылась где-то в другом месте...

bordol
Offline
Зарегистрирован: 03.10.2018

"-g" - пробовал убрать - Протеус вообще не показал текст, хотя

 сам ельф загрузился в него и правильно работал.

Вообще-то эта проблема вылезла из другого место:

перенес 1.6.8 на др. комп (просто скопировал) : все компилится, в Arduino Uno

не заливается. Пишет, что Avrdude фай не найден (хотя напихал его куда толь можно.

Единственная разница - на новом компе ардуина прицепилась к порту COM35.

Может DUDA не понимает 35 ?

Вот и полез в 1.8.5.   Будем разбираться. Благо пока не горит...

Спасибо за уделенное время.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Номер порта больше чем 7, так что его имя не COM30 а \\.\COM30

Имена типа COM30 работали только в 16-разрядных версиях Windows, в ядре NT есть только первые 8 имён для совместимости, остальные не работают.

a5021
Offline
Зарегистрирован: 07.07.2013

Я бы убрал -flto и про остальные ключи почитал: https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html

bordol
Offline
Зарегистрирован: 03.10.2018

>a5021

спасибо за ссылку

убрал все -flto : elf увеличился в 2 слишним раза, результат тот же

вообще скопировал platform.txt из 1.6.8 -  результат тот же

>Voodoo Doll

COM7 : только что попробовал : COM8 работает с удовольствием

а на другом компе - COM35 тоже

bordol
Offline
Зарегистрирован: 03.10.2018

С заливкой в Ардуину пока "выгнулся" так (2 варианта) :

 для работы с Протеусом компилю под 1.6.8

1й.   для заливки в Ардуину - под 1.8.7

2й.  Скомиленый под 1.6.8 HEX скармливаю АВРДУДе, используя 1.8.7

 D:\arduino-187\hardware\tools\avr/bin/avrdude -CD:\arduino-187\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM8 -b115200 -D -Uflash:w:d:\arduino\build_folder/Foo.ino.hex:i

Жирным отмечен полный путь к хексу

Оба варианта - извращение; но пока так...

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

bordol
Offline
Зарегистрирован: 03.10.2018

Так я и не смог победить ни 1.6.8, ни 1.8.5(7) -(

Зато нашел 1.6.12. В этой версии файл platform.txt почти такой же, как у 1.8.х

По совету a5021, убрал все -flto и получил то, что хотел : теперь в протеусе

можно проводить пошаговую (построчную) отладку и заливать прошивки прямо

из IDE Arduino.

А перед заливкой релизного варианта - опять уродоваться с platform.txt

Тоже извртат какой-то.

В идеале, хотелось бы поиметь какой-нибудь чек-боксик "добавить отладочную инфу в ELF-файл"

bordol
Offline
Зарегистрирован: 03.10.2018

Так я и не смог победить ни 1.6.8, ни 1.8.5(7) -(

Зато нашел 1.6.12. В этой версии файл platform.txt почти такой же, как у 1.8.х

По совету a5021, убрал все -flto и получил то, что хотел : теперь в протеусе

можно проводить пошаговую (построчную) отладку и заливать прошивки прямо

из IDE Arduino.

А перед заливкой релизного варианта - опять уродоваться с platform.txt

Тоже извртат какой-то.

В идеале, хотелось бы поиметь какой-нибудь чек-боксик "добавить отладочную инфу в ELF-файл"

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Можно сделать две версии и менять bat файлом.

@echo off
if "%1"=="/rel" goto release
if "%1"=="/dbg" goto debug
echo Usage: %0 /rel - switch to release mode
echo        %0 /dbg - switch to debug mode
goto end
:release
cd path_to_ide\hardware\arduino
del platform.txt
copy platform_release.txt platform.txt
goto end
:debug
cd path_to_ide\hardware\arduino
del platform.txt
copy platform_debug.txt platform.txt
goto end
:end
bordol
Offline
Зарегистрирован: 03.10.2018

Насчет батника - само-собой. Не руками же это делать -)

Пока застрял...

Кстати, сразу недоглядел : текст-то с адресами в протеусе появился,

зато в окне "AVR Variables" кроме моих глобальных появились ВСЕ

специальные регистры типа TCNT, PORTB, DDRB и т.п., которым место

в "Watch window"; да еще и содержимое  встроенной EEPROM !

А это уже "ващееее".

Жить-то с этим можно, но как-то не комильфо...