|
|
  |
Адреса векторов прерывания |
|
|
|
Apr 5 2012, 03:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134

|
Цитата(d7d1cd @ Apr 5 2012, 07:00)  Можно Вас попросить маленький пример на ассемблере как осуществляется переход через таблицу. Что-то мутен для меня этот вопрос... Все это общие принципы прграмм на ассемлере Например так MOV TABL,R11 ADD KOMANDA,R11 MOV @R11,R12 PUSH R12 RET Не работал с MSP430 Не знаю есть ли там команды типа MOV @METKA ,PC или MOV Rxx,PC можно через них. Можно в озу по адресу PEREXOD cформировать команду JMP VECTOR а в основной программе выполнить JMP PEREXOD Все дело вкуса програмиста и возможности системы команд процессора. P.S. У MSP430 Эти возможности реализованы через MOV dst, PC Посмотрите страницы 60-62 Руроводства на русском из поста 10
|
|
|
|
|
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 раза. На ковыряние кода ушло больше месяца. Не зря говорят что часто написать свою программу быстрее чем переделать чужую.
|
|
|
|
|
Apr 10 2012, 09:28
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Цитата(MaslovVG @ Apr 9 2012, 19:33)  Что то я не знаю микросхем памяти с интерфейсом USART. Как правило I2C или SPI, или же паралельный интерфейс. В книге Семейство микроконтроллеров MSP430x1xx описано несколько режимов периферийного интерфейса USART: режим UART, режим SPI, режим I2C. И не нужны микросхемы памяти с интерфейсом USART. Исходя из этого как можно определить какой из USART (первый или второй) работает на прием и передачу данных во внешний мир?
|
|
|
|
|
Apr 11 2012, 17:49
|
Профессионал
    
Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134

|
Цитата(d7d1cd @ Apr 11 2012, 19:34)  Подскажите отладчик в котором можно "стартануть"... Я с MPS430 не работал. Но приципы работы с любым семейством одинаковы. Могу порекомендовать для начала "IAR Embedded Workbench for MSP430 v.5.10.1 Full" http://rutracker.org/forum/viewtopic.php?t=2975395. Можно попытатся в Proteus. Поройтесь в закромах. Если уж решили с семейством работать обзаводитесь инструментарием и литературой. С наскоку задачу не решишь.
|
|
|
|
|
Apr 13 2012, 02:50
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Цитата(MaslovVG @ Apr 11 2012, 21:49)  Я с MPS430 не работал. Но приципы работы с любым семейством одинаковы. Могу порекомендовать для начала "IAR Embedded Workbench for MSP430 v.5.10.1 Full" http://rutracker.org/forum/viewtopic.php?t=2975395. Можно попытатся в Proteus. Поройтесь в закромах. Если уж решили с семейством работать обзаводитесь инструментарием и литературой. С наскоку задачу не решишь. Спасибо за ссылку, однако стартануть не удалось. Хотя, наивно было полагать, что стартанет сразу Я слил прошивку, дизассемблировал ее с помощью IDA и сохранил в файле. Затем в IAR создал новый проект, открыл в этом проекте свой файл и, ничего не меняя, попытался скомпилировать. "Всего" компилятор обнаружил около 32000 ошибок  Все не проверял, но всегда ошибка на строках вида: Код byte_0 .byte 3Ah
.byte 78h
word_120 .short 7880h Тип ошибки: Bad instruction. Я понимаю, что это не инструкции. Это просто переменные. Но как это объяснить IAR-у? А может можно в IDA сделать так, чтобы он делал файл ASM понятный для IAR?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|