Официальный сайт компании Arduino по адресу arduino.cc
arduino 1.8.x отладка в Proteus-8
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 03/10/2018 - 07:51
Получаю ...elf - файл, загружаю в протеус : все работает.
При переходе в "Паузу", показывается текст программы, но все строки помечены "-" и без адресов.
Как я понимаю, в настройках Ардуино отключена опция записи отладочной информации в ELF-файл.
Zip-файл Arduino-1.8.5(7) скачивал с arduino.cc, в настройки не лазил.
В ранней версии 1.6.8 все было норм.
Кто столкнулся с такой проблемой, подскажите пожалуйста, как с этим бороться.
С уважением. bordol.
Включите verbose сборки/загрузки в свойствах, в средах обеих версий посмотрите какие у компилятора командные строки вблизи -o (уровни оптимизации). Оттуда копать. Народ радовался что новые версии среды собирают менее раздутый файл, может это как раз та самая цена.
имеете в виду файл prefernces.txt ?
и там и там стоит build.verbose=true
попробовал в 1.8.7 поставить false - результат тот же.
мне кажется, что это должно быть где-то в файле platform.txt,
но что-то не могу разобраться...
Если в обеих build.verbose=true, то лог сюда. Всё что появляется в чёрной части окна по Ctrl+R. Из сред обеих версий, и будем сравнивать.
UPD. Короче, найти файлы в которых попадается:
убедиться что это часть команды компилятору, заменить на
Не факт что пробелы попадутся, вообще шаблон -O*, где * - любое количество знаков, включая 1. Но этот шаблон слишком общий. Оптимизация по размеру - с буквой s, дебажный режим g.
Посмотреть что будет. При достижении результата вернуть на место, убедиться что восстановлено первоначальное поведение компилятора, снова поменять, запомнить где менять. Лично мне копаться в шаблонах командных строк лень, я блондинка, просто жму кнопку Ctrl+U/Ctrl+Shift+U и меня всё устраивает. И версия среды у меня 1.0.5.
чт-то ступил насчет 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" - вроде включение отладки
как-то они по-разному...
Так написано в мануале к avr-gcc. Но я не настолько хорошо всё это знаю, чтобы заявлять что для включения отладки достаточно поменять один ключ. Придётся искать.
Мб есть смысл подставить строку из прошлой версии и посмотреть, что будет. Вообще, -Ox, -g. Но не факт.
в platform.txt поменял все "-Os" на "-Og" - без разницы, хотя размер ельфа чуть-чуть вырос.
собака рылась где-то в другом месте...
"-g" - пробовал убрать - Протеус вообще не показал текст, хотя
сам ельф загрузился в него и правильно работал.
Вообще-то эта проблема вылезла из другого место:
перенес 1.6.8 на др. комп (просто скопировал) : все компилится, в Arduino Uno
не заливается. Пишет, что Avrdude фай не найден (хотя напихал его куда толь можно.
Единственная разница - на новом компе ардуина прицепилась к порту COM35.
Может DUDA не понимает 35 ?
Вот и полез в 1.8.5. Будем разбираться. Благо пока не горит...
Спасибо за уделенное время.
Номер порта больше чем 7, так что его имя не COM30 а \\.\COM30
Имена типа COM30 работали только в 16-разрядных версиях Windows, в ядре NT есть только первые 8 имён для совместимости, остальные не работают.
Я бы убрал -flto и про остальные ключи почитал: https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html
>a5021
спасибо за ссылку
убрал все -flto : elf увеличился в 2 слишним раза, результат тот же
вообще скопировал platform.txt из 1.6.8 - результат тот же
>Voodoo Doll
COM7 : только что попробовал : COM8 работает с удовольствием
а на другом компе - COM35 тоже
С заливкой в Ардуину пока "выгнулся" так (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
Жирным отмечен полный путь к хексу
Оба варианта - извращение; но пока так...
Кстати вторым способом в ардуину можно залить любой хекс, полученый любым другим компилятором
Так я и не смог победить ни 1.6.8, ни 1.8.5(7) -(
Зато нашел 1.6.12. В этой версии файл platform.txt почти такой же, как у 1.8.х
По совету a5021, убрал все -flto и получил то, что хотел : теперь в протеусе
можно проводить пошаговую (построчную) отладку и заливать прошивки прямо
из IDE Arduino.
А перед заливкой релизного варианта - опять уродоваться с platform.txt
Тоже извртат какой-то.
В идеале, хотелось бы поиметь какой-нибудь чек-боксик "добавить отладочную инфу в ELF-файл"
Так я и не смог победить ни 1.6.8, ни 1.8.5(7) -(
Зато нашел 1.6.12. В этой версии файл platform.txt почти такой же, как у 1.8.х
По совету a5021, убрал все -flto и получил то, что хотел : теперь в протеусе
можно проводить пошаговую (построчную) отладку и заливать прошивки прямо
из IDE Arduino.
А перед заливкой релизного варианта - опять уродоваться с platform.txt
Тоже извртат какой-то.
В идеале, хотелось бы поиметь какой-нибудь чек-боксик "добавить отладочную инфу в ELF-файл"
Можно сделать две версии и менять bat файлом.
Насчет батника - само-собой. Не руками же это делать -)
Пока застрял...
Кстати, сразу недоглядел : текст-то с адресами в протеусе появился,
зато в окне "AVR Variables" кроме моих глобальных появились ВСЕ
специальные регистры типа TCNT, PORTB, DDRB и т.п., которым место
в "Watch window"; да еще и содержимое встроенной EEPROM !
А это уже "ващееее".
Жить-то с этим можно, но как-то не комильфо...