Invalid opcode

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

Доброго времени суток. Программирую мегу 644р и возникла проблемка.
В МК поднят freemodbus, в протеусе работает, на запросы пытается отвечать. В железяке же имеем драйвер модбаса ADM2484E, который требует разрешающих сигналов. В библиотеке предусмотрена такая возможность - использовать пин RTS. Захожу в port.h, прописываю порт и пин куда выводить этот сигнал. Прописываю дефайн чтобы активировать эту функцию в целом. Компилируем, прошиваем.
В железяке программа стартует, делает свои дела до момента когда приходит запрос для модбаса. Она даже успевает дать мне ответ и МК уходит в ребут.
В протеусе такая программа отлетает с ошибкой "Invalid opcode 0x000D at PC=0x0080".
Подскажите куда смотреть в таких случаях. Спасибо.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

0x0080 это возможно область констант каких-нибудь. Значение PC меняют команды ветвлений, надо в этом направлении поглядеть. Со стеком может чего не так. Например затираете значения возврата из подпрограммы.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

Похоже нашел причину. Я поначалу не собирался использовать этот сигнал (RTS). И закоментировал обработчик USART1_TXC_vect прерывания. Но тут пошагово гоняя код, увидел его, и до меня дошло. посмотрел старый проект другого программиста - там он тоже включен. Еще не до конца настроил, но думаю это в итоге решит проблему.

P.S. Угу, проблема решена.
Ответить

Вернуться в «AVR»