реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Адреса векторов прерывания
MaslovVG
сообщение Apr 4 2012, 18:45
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134



Цитата(d7d1cd @ Apr 4 2012, 20:14) *
Подскажите еще. Почему, если не разобрать все места программы (где код, а где данные) и добавить свой код, то после компиляции программа станет не работоспособной?

Потому что при вставке дополнителных команд смещаются адреса переходов и если эти переходы осуществлялись через таблицы то их значения в данных компилятор не изменит, и переходы будут исполнятся некорректно. Таких таблиц в программе может быть много. Через них часто выполняют оператор CASE.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 5 2012, 03:00
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Можно Вас попросить маленький пример на ассемблере как осуществляется переход через таблицу. Что-то мутен для меня этот вопрос...
Go to the top of the page
 
+Quote Post
MaslovVG
сообщение Apr 5 2012, 03:46
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 6 2012, 16:16
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Подумал тут вот над чем. В моей прошивке есть места, в которых, как я подозреваю, нет кода и данных (там забито FF). Что если написать свою процедуру обработки, перевести ее в байты и эти байты занести в то место, где нет кода. Затем адрес вектора прерывания изменить на начало моей самописной процедуры. В конце своей процедуры предусмотреть переход на истинный обработчик прерывания.
Ведь в этом случае при возникновении прерывания сначала выполнится моя процедура, а затем стандартная. И никакого смещения адресов.
Есть в моих рассуждениях ошибки?
Go to the top of the page
 
+Quote Post
MaslovVG
сообщение Apr 6 2012, 18:26
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134



Цитата(d7d1cd @ Apr 6 2012, 20:16) *
Подумал тут вот над чем. В моей прошивке есть места, в которых, как я подозреваю, нет кода и данных (там забито FF). Что если написать свою процедуру обработки, перевести ее в байты и эти байты занести в то место, где нет кода. Затем адрес вектора прерывания изменить на начало моей самописной процедуры. В конце своей процедуры предусмотреть переход на истинный обработчик прерывания.
Ведь в этом случае при возникновении прерывания сначала выполнится моя процедура, а затем стандартная. И никакого смещения адресов.
Есть в моих рассуждениях ошибки?


В прерывании будет всего навсего приём одного байта.
Вам нужно в программе найти дешифратор команд. Там дожна быть ветка "комады нет" или "код команды некоректен". Переаресовать эту ветку на свою вставку.
Кроме того просмотреть начало программы на предмет проверки контрольной суммы.
при наличии оного принять меры чтобы программа не вылетала.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 7 2012, 08:30
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(MaslovVG @ Apr 6 2012, 22:26) *
В прерывании будет всего навсего приём одного байта.
Вам нужно в программе найти дешифратор команд. Там дожна быть ветка комады нет или код команды некоректен. Переаресовать эту ветку на свою вставку.
Кроме того просмотреть начало программы на предмет проверки контрольной суммы.
при наличии оного принять меры чтобы программа не вылетала.


Давайте по порядку. Просто я не знаю некоторых моментов. Скажите, когда я в прибор отправляю команду, состоящую из 20 байт, то прерывание вызывается 20 раз? На каждый байт?
Если это так, то я уже разработал алгоритм своей процедуры...
Про контрольную сумму. Ее проверка существует. При неправильной контрольной сумме прибор на экран выводит номер ошибки на экран, но продолжает функционировать. Как можно найти то место, где программа считает контрольную сумму?
Go to the top of the page
 
+Quote Post
MaslovVG
сообщение Apr 7 2012, 09:12
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134



Цитата(d7d1cd @ Apr 7 2012, 12:30) *
Давайте по порядку. Просто я не знаю некоторых моментов. Скажите, когда я в прибор отправляю команду, состоящую из 20 байт, то прерывание вызывается 20 раз? На каждый байт?
Если это так, то я уже разработал алгоритм своей процедуры...
Про контрольную сумму. Ее проверка существует. При неправильной контрольной сумме прибор на экран выводит номер ошибки на экран, но продолжает функционировать. Как можно найти то место, где программа считает контрольную сумму?


По порядку.
1 Да прерывание сработает 20 раз. по прерыванию байты обычно складываются в некий буфер. Основная прграмма анализирует этот буфер и обнаружив признак конца командного пакета (это может быть число символов или код Enter 0DH) приступает к разборке этого пакета. Ищите куда складываются принятые байты и что с ними происходит.
2. Начните анализировать программу с начала как правило процедура проверки контрольной суммы в пакете инициализации. Другой подход найдите место в программе выводящее сообщение об ошибке и пляшите от него.

Но работы очень много. Помню лет 10 назад в программе на MCS51 нужно было одну задержку увеличить в 4 раза. На ковыряние кода ушло больше месяца.
Не зря говорят что часто написать свою программу быстрее чем переделать чужую.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 8 2012, 08:23
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Вот у меня микроконтроллер MSP430F149. В нем реализовано 2 USART-а. Как определить какой из них используется для "общения" с внешним миром? Ведь USART может еще использоваться для "общения" с микросхемами памяти. Чтобы это определить, как я понимаю, нужна принципиальная схема устройства, да?
Go to the top of the page
 
+Quote Post
MaslovVG
сообщение Apr 9 2012, 15:33
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134



Цитата(d7d1cd @ Apr 8 2012, 12:23) *
Вот у меня микроконтроллер MSP430F149. В нем реализовано 2 USART-а. Как определить какой из них используется для "общения" с внешним миром? Ведь USART может еще использоваться для "общения" с микросхемами памяти. Чтобы это определить, как я понимаю, нужна принципиальная схема устройства, да?

Отсутствие схемы существенно затрудняет понимание работы программы.
Что то я не знаю микросхем памяти с интерфейсом USART. Как правило I2C или SPI, или же паралельный интерфейс.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 10 2012, 05:10
Сообщение #25


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(MaslovVG @ Apr 9 2012, 19:33) *
Отсутствие схемы существенно затрудняет понимание работы программы.
Что то я не знаю микросхем памяти с интерфейсом USART. Как правило I2C или SPI, или же паралельный интерфейс.

1-wire можно с уарта опрашивать. С небольшими внешними навесками.
Двухногие далласы DS243x и им подобные


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 10 2012, 09:28
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(MaslovVG @ Apr 9 2012, 19:33) *
Что то я не знаю микросхем памяти с интерфейсом USART. Как правило I2C или SPI, или же паралельный интерфейс.


В книге Семейство микроконтроллеров MSP430x1xx описано несколько режимов периферийного интерфейса USART: режим UART, режим SPI, режим I2C. И не нужны микросхемы памяти с интерфейсом USART.

Исходя из этого как можно определить какой из USART (первый или второй) работает на прием и передачу данных во внешний мир?
Go to the top of the page
 
+Quote Post
MaslovVG
сообщение Apr 11 2012, 08:12
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134



Цитата(d7d1cd @ Apr 10 2012, 13:28) *
В книге Семейство микроконтроллеров MSP430x1xx описано несколько режимов периферийного интерфейса USART: режим UART, режим SPI, режим I2C. И не нужны микросхемы памяти с интерфейсом USART.

Исходя из этого как можно определить какой из USART (первый или второй) работает на прием и передачу данных во внешний мир?

В каких режимах работают порты можно узнать из блока инициализации в программе. Стартуете программу в отладчике по шагам и разбираете начиная со старта. Обычно инициализация портов проходит в первых двух сотнях команд (в порядке исполнения а не листинга), кстати там же проводится подсчет контрольных сумм.
Но отсутствие схемы существенно затрудняет понимание логики программы.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 11 2012, 15:34
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Подскажите отладчик в котором можно "стартануть"...
Go to the top of the page
 
+Quote Post
MaslovVG
сообщение Apr 11 2012, 17:49
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 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. Поройтесь в закромах.
Если уж решили с семейством работать обзаводитесь инструментарием и литературой. С наскоку задачу не решишь.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 13 2012, 02:50
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 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. Поройтесь в закромах.
Если уж решили с семейством работать обзаводитесь инструментарием и литературой. С наскоку задачу не решишь.


Спасибо за ссылку, однако стартануть не удалось. Хотя, наивно было полагать, что стартанет сразу 01.gif
Я слил прошивку, дизассемблировал ее с помощью IDA и сохранил в файле. Затем в IAR создал новый проект, открыл в этом проекте свой файл и, ничего не меняя, попытался скомпилировать. "Всего" компилятор обнаружил около 32000 ошибок lol.gif Все не проверял, но всегда ошибка на строках вида:
Код
byte_0        .byte 3Ah

            .byte  78h

word_120    .short 7880h


Тип ошибки: Bad instruction. Я понимаю, что это не инструкции. Это просто переменные. Но как это объяснить IAR-у? А может можно в IDA сделать так, чтобы он делал файл ASM понятный для IAR?
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 22:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01531 секунд с 7
ELECTRONIX ©2004-2016