|
Адреса векторов прерывания |
|
|
|
Mar 31 2012, 13:55
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Привет всем! Есть устройство на микроконтроллере MSP430F149. Из этого микроконтроллера слита прошивка и дизассемблирована с помощью IDA. Далее, перейдя в область памяти где хранятся адреса векторов прерывания, я определил адреса процедур обработки этих прерываний. И тут я увидел, что некоторые вектора указывают не на команды микроконтроллера, а просто на данные в памяти. Например, возьмем вектора прерываний асинхронных приемо-передатчиков. Только вектор URXIFG1 указывает на область памяти с инструкциями микроконтроллера. Остальные указывают на область памяти, где инструкций нет. Объясните, пожалуйста, что это значит? Может просто IDA не распознала инструкций?
P.S. Устройство может принимать и отправлять данные через RS485 или через оптический порт, то есть, как я понимаю, хотя бы у одного передатчика должны быть "активны" оба вида прерывания. И еще в устройстве есть несколько микросхем памяти, в которые (и из которых) микроконтроллер пишет (читает) данные.
|
|
|
|
|
 |
Ответов
|
Apr 6 2012, 18:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134

|
Цитата(d7d1cd @ Apr 6 2012, 20:16)  Подумал тут вот над чем. В моей прошивке есть места, в которых, как я подозреваю, нет кода и данных (там забито FF). Что если написать свою процедуру обработки, перевести ее в байты и эти байты занести в то место, где нет кода. Затем адрес вектора прерывания изменить на начало моей самописной процедуры. В конце своей процедуры предусмотреть переход на истинный обработчик прерывания. Ведь в этом случае при возникновении прерывания сначала выполнится моя процедура, а затем стандартная. И никакого смещения адресов. Есть в моих рассуждениях ошибки? В прерывании будет всего навсего приём одного байта. Вам нужно в программе найти дешифратор команд. Там дожна быть ветка "комады нет" или "код команды некоректен". Переаресовать эту ветку на свою вставку. Кроме того просмотреть начало программы на предмет проверки контрольной суммы. при наличии оного принять меры чтобы программа не вылетала.
|
|
|
|
|
Apr 7 2012, 08:30
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Цитата(MaslovVG @ Apr 6 2012, 22:26)  В прерывании будет всего навсего приём одного байта. Вам нужно в программе найти дешифратор команд. Там дожна быть ветка комады нет или код команды некоректен. Переаресовать эту ветку на свою вставку. Кроме того просмотреть начало программы на предмет проверки контрольной суммы. при наличии оного принять меры чтобы программа не вылетала. Давайте по порядку. Просто я не знаю некоторых моментов. Скажите, когда я в прибор отправляю команду, состоящую из 20 байт, то прерывание вызывается 20 раз? На каждый байт? Если это так, то я уже разработал алгоритм своей процедуры... Про контрольную сумму. Ее проверка существует. При неправильной контрольной сумме прибор на экран выводит номер ошибки на экран, но продолжает функционировать. Как можно найти то место, где программа считает контрольную сумму?
|
|
|
|
|
Apr 7 2012, 09:12
|
Профессионал
    
Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134

|
Цитата(d7d1cd @ Apr 7 2012, 12:30)  Давайте по порядку. Просто я не знаю некоторых моментов. Скажите, когда я в прибор отправляю команду, состоящую из 20 байт, то прерывание вызывается 20 раз? На каждый байт? Если это так, то я уже разработал алгоритм своей процедуры... Про контрольную сумму. Ее проверка существует. При неправильной контрольной сумме прибор на экран выводит номер ошибки на экран, но продолжает функционировать. Как можно найти то место, где программа считает контрольную сумму? По порядку. 1 Да прерывание сработает 20 раз. по прерыванию байты обычно складываются в некий буфер. Основная прграмма анализирует этот буфер и обнаружив признак конца командного пакета (это может быть число символов или код Enter 0DH) приступает к разборке этого пакета. Ищите куда складываются принятые байты и что с ними происходит. 2. Начните анализировать программу с начала как правило процедура проверки контрольной суммы в пакете инициализации. Другой подход найдите место в программе выводящее сообщение об ошибке и пляшите от него. Но работы очень много. Помню лет 10 назад в программе на MCS51 нужно было одну задержку увеличить в 4 раза. На ковыряние кода ушло больше месяца. Не зря говорят что часто написать свою программу быстрее чем переделать чужую.
|
|
|
|
Сообщений в этой теме
d7d1cd Адреса векторов прерывания Mar 31 2012, 13:55 bigal При передаче прерывания могут не использоваться, п... Apr 1 2012, 21:03 hash20 d7d1cd, В принципе для 485го вполне достаточно тол... Apr 2 2012, 07:22 MrYuran Цитата(d7d1cd @ Mar 31 2012, 17:55) Тольк... Apr 2 2012, 07:45 d7d1cd Вот таблица векторов прерывания:
Код0000FFE0 00 1... Apr 2 2012, 14:41 rezident Цитата(d7d1cd @ Apr 2 2012, 19:41) Подска... Apr 3 2012, 08:31  d7d1cd Цитата(rezident @ Apr 3 2012, 12:31) Это ... Apr 3 2012, 14:33   MaslovVG Цитата(d7d1cd @ Apr 3 2012, 18:33) Спасиб... Apr 3 2012, 15:00    d7d1cd Цитата(MaslovVG @ Apr 3 2012, 19:00) Здес... Apr 3 2012, 16:32     MaslovVG Цитата(d7d1cd @ Apr 3 2012, 20:32) Спасиб... Apr 3 2012, 17:12      d7d1cd Цитата(MaslovVG @ Apr 3 2012, 21:12) Это ... Apr 4 2012, 02:53       MaslovVG Цитата(d7d1cd @ Apr 4 2012, 06:53) Скажит... Apr 4 2012, 03:23   rezident Цитата(d7d1cd @ Apr 3 2012, 19:33) Можно ... Apr 3 2012, 15:34 Psych Да в адреса векторов можно запихнуть чо угодно. Гл... Apr 3 2012, 05:28 d7d1cd Подскажите еще. Почему, если не разобрать все мест... Apr 4 2012, 16:14 MaslovVG Цитата(d7d1cd @ Apr 4 2012, 20:14) Подска... Apr 4 2012, 18:45 d7d1cd Можно Вас попросить маленький пример на ассемблере... Apr 5 2012, 03:00 MaslovVG Цитата(d7d1cd @ Apr 5 2012, 07:00) Можно ... Apr 5 2012, 03:46 d7d1cd Вот у меня микроконтроллер MSP430F149. В нем реали... Apr 8 2012, 08:23 MaslovVG Цитата(d7d1cd @ Apr 8 2012, 12:23) Вот у ... Apr 9 2012, 15:33  MrYuran Цитата(MaslovVG @ Apr 9 2012, 19:33) Отсу... Apr 10 2012, 05:10  d7d1cd Цитата(MaslovVG @ Apr 9 2012, 19:33) Что ... Apr 10 2012, 09:28   MaslovVG Цитата(d7d1cd @ Apr 10 2012, 13:28) В кни... Apr 11 2012, 08:12 d7d1cd Подскажите отладчик в котором можно "стартану... Apr 11 2012, 15:34 MaslovVG Цитата(d7d1cd @ Apr 11 2012, 19:34) Подск... Apr 11 2012, 17:49  d7d1cd Цитата(MaslovVG @ Apr 11 2012, 21:49) Я с... Apr 13 2012, 02:50   MaslovVG Цитата(d7d1cd @ Apr 13 2012, 06:50) Спаси... Apr 13 2012, 03:14    d7d1cd Цитата(MaslovVG @ Apr 13 2012, 07:14) Ско... Apr 13 2012, 14:26     MaslovVG Цитата(d7d1cd @ Apr 13 2012, 18:26) А это... Apr 15 2012, 12:29 rezident Прошу модератора раздела обратить внимание на злос... Apr 19 2012, 17:13 IgorKossak Сообщения с нарушениями скрыл.
Модератор. Apr 19 2012, 17:22 d7d1cd Прошу прощения за нарушения... Подскажите, в каком... Apr 22 2012, 06:16 rezident Цитата(d7d1cd @ Apr 22 2012, 11:16) Прошу... Apr 23 2012, 15:02  d7d1cd Цитата(rezident @ Apr 23 2012, 19:02) Обс... Apr 23 2012, 16:39
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|