Страница 1 из 1

Invalid opcode

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

Re: Invalid opcode

Добавлено: Чт мар 09, 2017 13:49:39
Z_h_e
0x0080 это возможно область констант каких-нибудь. Значение PC меняют команды ветвлений, надо в этом направлении поглядеть. Со стеком может чего не так. Например затираете значения возврата из подпрограммы.

Re: Invalid opcode

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

P.S. Угу, проблема решена.