Обсуждаем контроллеры компании Atmel.
Ответить

Preoteus + AVR: некорректная эмуляция инкремента

Сб сен 16, 2023 05:05:58

Всем привет!

Столкнулся с проблемой некорректной эмуляции MCU в Proteus. Причем, не из каких-то закоулков даташита, типа записи в EEPROM при включенном делителе частоты PLL, а в самой базовой инструкции ST Z, Rr.

Если коротко, то в относительно большом проекте то тут то там на разных стадиях отладки наблюдается странное поведение индексных переменных в циклах. Каким-то странным образом при обычном инкременте++ значение переменной после 0 становится, как и положено, 1, а при следующем инкременте -- сразу 0xFD. Это поведение появляется и исчезает в зависимости от кода в других местах проекта, от настроек оптимизации, даже от типа одной единственной переменной в противоположном углу проекта.

Анализ показал, что ошибается не компилятор, а именно эмулятор. Выполняя банальную инструкцию ST Z, Rr он в один прекрасный момент почему-то побитово инвертирует значение, записываемое в [Z]. В итоге вместо числа 0x02, находящегося в регистре, в память пишется 0xFD.

Никто не сталкивался?
Ответить