Обсуждаем цифровые устройства...
Ответить

Симулировать исполнение кода бутлоадера в Протеусе

Вс фев 20, 2022 11:22:44

Для меня актуальны АТмега328 и АТмега128. Сейчас вопрос об АТмега328р. Использую компиляцию в Ардуино ИДЕ. Загружаю код блинка с бутлоадером (без бутлоадера - та же фигня !!!).
Если не выставлен фуз BOOTRST - симуляция работает. Если выставлен - вылетает с сообщением - Invalid opcode 0xFFFF at PC=0x3802
Как победить Протеус ?
ПС. Интерес к бутлоадеру - из желания посмотреть работу загрузчика с выбором источников, например самозагрузка кода из SD карты и тд.

Re: Proteus: вопросы и ответы

Чт мар 03, 2022 15:48:48

а вообще что такое opcode ? как переводится?

Re: Proteus: вопросы и ответы

Чт мар 03, 2022 16:01:12

По-моему, протеус не симулирует запись в память программ. Я экспериментировал недолго, но похоже, что это так. Что касается фьюзбита, то наверняка в памяти МК отсутствует сам загрузчик, а есть только код пользователя. Проверить это можно открыв в режиме отладки окно дампа памяти программ, и посмотрев, что на самом деле находится по адресу загрузчика.

Re: Proteus: вопросы и ответы

Чт мар 03, 2022 16:37:30

По-моему, протеус не симулирует запись в память программ.

По крайней мере с ПИКами, мне удавалось полностью симулировать прошивку через бутлодырь.

Re: Proteus: вопросы и ответы

Пн мар 14, 2022 16:43:18

скачайте новую "продленную" версию


Спасибо. Как узнать продлённая версия или НЕ продлённая? Или пока не установишь не поймёшь?


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

Re: Proteus: вопросы и ответы

Пн мар 14, 2022 16:52:45

продление нужно только чтобы узнавать о новых версиях.


Понял, спасибо.

Re: Proteus: вопросы и ответы

Пн мар 21, 2022 10:44:23

Мжно я немного на жизнь пожалуюсь? Я пожилой сельский радиолюбитель,мне можно...

Всю жизнь пользовался VMLAB и был доволен как стадо слоновъ. А тут попались в лапы китайские модули на которых распаяна Atmega328p,а её vmlab не умеет. Попробовал Proteus. Обнаружил что не работают точки останова. Причем иногда,при сочетании каких-то условий,пару раз сработало. Но именно что пару раз. В окне где выводится список переменных - как правило не видит переменные локально объявленные в функциях. Причем опять же - иногда видит. Две рядом объявленные одинаковые в одной функции - одну может видеть,другую нет. Соответственно их из этого окна не добавить в окно watch и не указать там останов по изменению,если уж просто на заданной строке остановиться не дает. А в самом окне watch вообще add by name не работает - список пустой вылезает. Даже глобальных переменных не видит. Если выбрать add by address то в предлагаемом списке только регистры и опять ни одной переменной. Но если из окна списка переменных добавлять - то добавляется и показывает. Но там редко показываются локальные.
Однако несмотря на эти глюки - программа как ни странно работает правильно! Я обмен по i2c с INA219 симулировал,причем сделаный на прерываниях. Всё читается и пишется как надо.
Если бы понять что ему надо чтобы локальные переменные показывал - можно было бы использовать. Причем иногда же некоторые показывает,собака!
Версия Proteus 8.13 SP0 build 31525
C форматами файла elf/coff и видами отладочной информации stabs/dwarf-2 экспериментировал. В случае stabs+elf не видит текста исходника и адресов переменных вообще. Логично,что в elf оно ожидает dwarf-2.
В случае stabs+coff(как для vmlab) - вообще неправильно его грузит. Ставит точку входа на начало секции .note.gnu.avr.deviceinfo вместо .text. Удалил эту вобщем-то не сильно нужную секцию. Теперь загрузилось,исходник увидело,можно по нему шагать, с видимостью переменных такой же бардак,точки останова тоже не работают. Но еще и симуляция зацикливается на функции memset и программа не работает. То есть всё-таки coff неправильно грузится.
С горя попробовал версию 7.10 SP0 12325. Загрузил один из демонстрационных примеров - до локальных переменных так и не добрался. Не видно их ни в общем списке ни в окне watch. Но в примере хотябы точки останова ставятся и работают. Попробовал свой код загрузить - почти нигде нет адресов напротив строчек кода,прочерки стоят.

Re: Proteus: вопросы и ответы

Пн мар 21, 2022 11:10:07

Пробовал AVR Studio+Prtoteus- проблем не было. Поднял под Студией С++, FreeRTOS, начал работать над проектом и... бросил. Умер АВР как платформа. Даже в наше непростое время Чёрна таблетка с F401 стоит как 328-ая. И нафиг эта Атмега нужна при таких ценах?

Re: Proteus: вопросы и ответы

Пн мар 21, 2022 11:21:13

WatchCat писал(а):Мжно я немного на жизнь пожалуюсь?

начиная с какой-то версии avr-gcc поменял формат отладочной информации так, что начались проблемы у протеуса с видимостью переменных. раньше все "общие" регистры типа DDRC он не показывал в окне переменных, только определенные в программе пользователем, а теперь... показывает. в итоге найти свою переменную в этой куче сложновато.\

что касается "иногда показывает, иногда нет" - объяснить причину не могу, но закономерность уловил: все локальные автоматические переменные протеус не видит и не показывает никогда - надо активировать дизассемблер и смотреть, в каких регистрах эти переменные помещаются, и смотреть регистры. static-переменные он показывает только тогда, когда точка исполнения находится в блоке кода, использующем эту переменную. стоит выйти из такого блока - переменная пропадает. очень неудобно это...

если к этому привыкнуть - жить можно. если новые фичи avr-gcc не применяете (а это, среди главного, __flash, __memx и LTO-оптимизация и "свежатинка" в плане МК), то можно установить древнюю WinAVR, и тогда большинство проблем пропадет, надеюсь.

Re: Proteus: вопросы и ответы

Пн мар 21, 2022 14:54:15

что касается "иногда показывает, иногда нет" - объяснить причину не могу, но закономерность уловил: все локальные автоматические переменные протеус не видит и не показывает никогда

У меня именно что иногда показывает локальные переменные. При этом в функции их может быть объявлено две рядом одного типа,так вот одну показывает другую нет.

- надо активировать дизассемблер и смотреть

Понятно что так можно,но несколько неудобно.

static-переменные он показывает только тогда, когда точка исполнения находится в блоке кода, использующем эту переменную. стоит выйти из такого блока - переменная пропадает. очень неудобно это...

Согласен, неудобно.

если к этому привыкнуть - жить можно.

Если бы еще точки останова работали - я бы тут на жизнь не жаловался.
Но вот они в одних примерах работают,в других нет. Специально уточню - в примерах которые в дистрибутиве.
В моем коде срабатывали буквально пару раз. И непонятно от чего это зависит. Слишком редкое явление чтобы я мог его исследовать.

если новые фичи avr-gcc не применяете то можно установить древнюю WinAVR

Протеус теперь имеет возможность скачать и установить какую-то версию winavr которую сам считает нужной.
Проблемы с ней точно такие же - и переменные и точки останова.

Добавлено after 32 minutes 44 seconds:
И нафиг эта Атмега нужна при таких ценах?


Судя по упоминания FreeRtos - у вас совсем не радиолюбительского уровня проекты. Ну нет у меня в деревне таких задач для которых OS в контроллере нужна. Вот в данном случае написал чтение данных из ina226 и управление исполнительным устройством. Ну и вывод отладки-настройки через uart. Всё на прерываниях. Справился за три дня не особо ударного труда. Сколько я бы разбирался с FreeRtos? Я таки заглядывал в ее исходники и документацию - как открыл так и закрыл. В моей типично любительской практике это из пушки даже не по воробъям,а по мухам. Китайские модули с STM32F103C8T6 у меня есть. Но у них намного более сложная периферия в которой надо дооолго разбираться. Я покопался немного для расширения кругозора и отложил на полку.
Для радиолюбительства цена вообще никаким боком если говорить о том диапазоне цен который сейчас актуален для радиолюбителя. Как в абсолютном большинстве случаев не важны и мегагерцы и объемы памяти. Всего этого даже у Атмеги16 обычно с большим запасом для любительских поделок. А вот заплатить за простоту и удобство я как раз готов.
И опять Атмеги выигрывают так как под них есть удобный софт для отладки - тот же vmlab которым я пользуюсь полтора десятка лет. Безусловно,у него есть свои ограничения применимости,никто не говорит что туда прямо так можно произвольный код грузить. Но применяя голову - отлаживаться можно и он очень хорошо помогает. Чтобы что-то любительское сделать на атмеге - достаточно иметь компилятор,простой текстовый редактор,vmlab и программатор. Всё. Никаких монстроидальных "сред разработки" не надо.
А что делать в случае STM32F103C8T6? Ну gcc под него есть. А отлаживаться как? Что вместо vmlab? После его удобств как-то не хочется возвращаться к отладке миганием светодиодами. Читал что есть какие-то аппаратные отладчики,подключаемые через jtag,но цены там уже совсем не любительского диапазона,по несколько сотен баксов.
Так что ваше утверждение о смерти AVR как платформы - несколько преждевременно,как минимум в области радиолюбительства.
Вот когда появится аналог vmlab под stm32,да еще желательно такой же свободный и работающий в линуксе,пусть и через wine - тогда
можно будет задуматься о замене avr на мелкие arm. Хотя сильно сложная периферия армов всё равно создает дополнительные трудности. Я когда первый раз ту китайскую плату с stm32 запускал чтобы светодиодом помигать - сначала долго читал как там одно только тактирование настроить. Профессионалу кто каждый день с этим работает - оно может и нормально,а вот для любителя тяжело.
И копеечной разницей в цене абсолютно не компенсируется.

Re: Proteus: вопросы и ответы

Пн мар 21, 2022 20:26:40

WatchCat писал(а):Протеус теперь имеет возможность скачать и установить какую-то версию winavr которую сам считает нужной.
даже и подумать не мог... но, имхо, любые самостоятельные действия ПО - зло, которым пользоваться лучше не надо. подчеркиваю - имхо.
кстати, скачать версию WinAVR сложновато будет, т.к. на сегодня существует только одна-единственная, древняя, как говно мамонта... зато с ней протеус работал корректно (7.20 во всяком случае).
WatchCat писал(а):При этом в функции их может быть объявлено две рядом одного типа,так вот одну показывает другую нет.
я ж написал: автоматические переменные он показывать не будет, а static - в зависимости от того, в каком месте функции вы находитесь. ну и оптимизатор GCC "помогает": если две переменные используются не одновременно, он может заоптимизировать одни и те же регистры под обе из них, и протеус ничего показать не сможет.

для отладки надо отключать оптимизацию - тогда протеус все-все-все показывает верно... но код получается большим и несколько медлительным.

Re: Proteus: вопросы и ответы

Пн мар 21, 2022 21:50:14

любые самостоятельные действия ПО - зло, которым пользоваться лучше не надо. подчеркиваю - имхо.

С общетеоретической точки зрения безусловно согласен. И проделывал это исключительно в порядке эксперимента.

кстати, скачать версию WinAVR сложновато будет, т.к. на сегодня существует только одна-единственная, древняя, как говно мамонта... зато с ней протеус работал корректно (7.20 во всяком случае).

Возможно я что-то не так понял относительно версий,но изучив то что скачал протеус - я увидел там обычное gcc только под винды собранное. И вот этим я попробовал собирать и свой код и пару примеров. Наблюдал те же глюки что и с установленным у меня основным компилятором(avr-gcc из комплекта Дебиана).

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

У меня некоторые иногда показывал. Но именно что некоторые и иногда.

ну и оптимизатор GCC "помогает"

Как раз это решается просто указанием опции -Og. Для vmlab с ней всегда собираю. Иначе да - бывают странности.

для отладки надо отключать оптимизацию - тогда протеус все-все-все показывает верно...

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

Тем не менее сегодня с помощью протеуса и вмлаба,используемых по очереди, отловил логическую ошибку в обработке асинхронных событий по прерываниям. Запускал МК в нарисованной в протеусе схеме,смотрел отладочные сообщения в его терминале, потом уже в вмлабе искал что и где не так. К сожалению вмлабу не подсунуть файл с "ответами" подчиенного устройства i2c (это специфический АЦП). А в протеусе есть его модель. Правда чтобы работало - надо подключить i2c debuger,без него transiever busy получается. Нет,подтягивающие резисторы нарисовать не забыл. И тем не менее.
У меня в самоделке одновременно i2c и uart используются. Так вот оказалось что пример кода i2c из AN315
не любит когда его прерывают. Нет,ничего не виснет,просто не всегда в нужные моменты срабатывает. Туда бы кольцевой буфер команд приделать,аналогично тому как буфер для байтов делается при использовнии uart. Как ни странно, мне не удалось найти готовый действительно хороший код для i2c. Хотя может это от того что у меня тут в деревне интернет медленный потому что по радио.

Re: Proteus: вопросы и ответы

Пн мар 21, 2022 22:15:02

точки останова и у меня не работали в какой-то версии протеуса, но потом скачал менее новую, и точки заработали.

Re: Proteus: вопросы и ответы

Пн мар 21, 2022 23:51:14

потом скачал менее новую, и точки заработали.

А можно попросить вас посмотреть точный номер версии протеуса в котором точки заработали? У меня тут в деревне не очень хорошо с интернетом, качать все версии подряд не имею возможности.

Однако я и так только что уже ухитрился отладить совместную работу i2c и uart, реализованную на прерываниях.
Теперь одно другому не мешает.
А еще нарисовал в схеме электрическую модель объекта регулирования (из двух rc-цепочек и одного "идеального" диода). Как раньше на аналоговых вычислительных машинах делали. И у меня теперь контроллер получает правдоподобный входной сигнал о состоянии объекта,которым он будет управлять. Осталось сообразить как этот входной параметр в виде "шагов" АЦП пересчитать в коэффициент заполнения ШИМа и не влететь в какое-нибудь переполнение разрядов. А потом можно будет один резистор в модели объекта заменить на переменный, крутить его и смотреть как регулятор отрабатывает. Это конечно не настоящее научное моделирование,но для радиолюбительства сойдет.
Всяко лучше сначала так отладить прежде чем за реальное железо браться.

Re: Proteus: вопросы и ответы

Вт мар 22, 2022 07:02:44

Изображение
этот прот у меня работает

Добавлено after 32 seconds:
более свежий не останавливался на точках
Вложения
прот.PNG
(13.1 KiB) Скачиваний: 1286

Re: Proteus: вопросы и ответы

Вт мар 22, 2022 07:48:06

этот прот у меня работает
более свежий не останавливался на точках

Спасибо,нашел,поставил на закачку,завтра скачается - буду пробовать. 416 мегов однако:(
У меня сейчас тоже чуть более свежий и на точках не останавливается.

Re: Proteus: вопросы и ответы

Ср мар 23, 2022 17:46:34

Подтверждаю, в вышеупомянутой версии протеуса точки останова работают.
Локальные переменные также иногда и не все,как я выше писал - простого способа борьбы с этим глюком нет.
Есть способ это обойти на время отладки,но с возможным влиянием на работоспособность программы.
Протеус не показывает локальные переменные тогда,когда gcc распихает их по регистрам.
Чтобы заставить gcc разместить их классическим для Си способом в стеке - достаточно отключить оптимизацию,поставить -O0.
Теперь понятно почему переменные видно было иногда - как раз тогда когда компилятор не пихал их в регистры.
Вообще-то если я правильно помню,у gcc был флажок,отключающий использование регистровых переменных по умолчанию.
Тогда будет более классическое поведение - в регистры пихаются только те переменные которые явно объявлены как регистровые.
Во всяком случае в 90е годы в gcc под DOS эта возможность была.
Также можно описать переменную как volatile - такие тоже в регистры не кладутся.
Побочным эффектом от этих действий может быть тоже самое что от [не использования] слова volatile в других случаях. Если собираем код с -О0, а в нем изменение переменных из обработчиков прерываний,то после включения оптимизации и распихивания переменных по регистрам получим глюки.
Впрочем - достаточно просто быть внимательным и писать свой код более "строго". Тогда от включения/выключения умеренной
(-О2) оптимизации ничего не сломается.
Единственно что осталось странного - это невозможность добавить переменную в окно watch по имени используя контекстное меню этого окна. Но это легко обходится добавлением через контекстное меню окна переменных.

Смею заметить что я запускаю Proteus в Линуксе под Wine. Ну нет у меня дома виндов. Если кто будет делать также - не забудьте переключить настройку графики в протеусе на windows gdi вместо opengl. Никакой видимой пользы от opengl в протеусе все равно нет - это же не стрелялка-леталка динамическая,а вот глюки анимации на схеме (если она используется) бывают. Заодно можно и ползунки скорости анимации прикрутить чтобы меньше проц жрало. Протеус 8.Х так его хорошо кушает даже если просто окно со схемой открыто,даже без включенной симуляции. Стоит уйти например в меню (допустим File-Open) как жрать перестает.
Связано это с циклическим обращением к файлу c:/windows/system32/tzres.dll,я отладчиком Wine смотрел.
Обращений просто дикое количество. Так как я не знаток виндов то не знаю что делает эта dll и тем более не знаю зачем Протеус ее так часто дергает.
Что с этим делать - пока не разобрался. В целях снижения энергопотребления компа в паузах работы (пока даташиты читаю:) оставляю на экране диалог открытия файла. У меня дом на полностью автономной солнечно-ветряной энергетике,мне зимой потребление критично. Сейчас-то уже солнышка много.

Re: Proteus: вопросы и ответы

Чт мар 31, 2022 10:55:24

Доброго всем дня. Вопрос с watchdog в Proteus 8.13. Что бы я не делал, происходит сброс по таймеру собаки PC=0x02AE. [AVR WATCHDOG] Reset. [U1] В свойствах камня собака WDTON отключена (1) Unprogrammed. В инициализации строки wdt закомменчены. Распихивание по коду wdt_reset(); как-то тоже не помогает. Это глюк версии или все же мои кривые руки?

Вопрос снят. Кривые руки )

А вот фиг там. Все же Протеус косячит с собакой. Режим прерывание и сброс работает только на сброс. Неудобно (

Re: Proteus: вопросы и ответы

Вт май 03, 2022 19:06:15

Добавлено after 2 hours 6 minutes 28 seconds:
[uquote="scharik",url="/forum/viewtopic.php?p=4226033#p4226033"]Привет всем .В проте есть в выборе устройств есть модель ATMEGA8 на 32 ноги ,но нет на 28
Вопрос решен :)))

Проблема с Proteus 8.13

Пт май 20, 2022 21:42:31

Здравствуйте. Возникла проблема с Proteus 8.13. В частности пропали иконки в боковой панели PCB редакторе. Должно быть как на картинке 1:Изображение

Но по факту как на картинке 2:
Изображение

И что самое интересное. В версиях 8.8 и8.9 всё нормально. Проблема начинается с версии 8.10.
Ответить