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

 
 
> Алгоритм работы загрузчика AT91SAM9G20
koluna
сообщение Sep 20 2011, 12:44
Сообщение #1


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Здравствуйте!

Читаю даташит на AT91SAM9G20 (раздел 13. AT91SAM9G20 Boot Program) и понять не могу что конкретно должны содержать "ARM exception vectors" и нужны ли они загрузчику (кроме шестого, конечно, в нем ведь размер загружаемой откуда-либо программы)?
Инструкции перехода на процедуры обработки этих самых исключений?

В качестве примера из даташита:
Цитата
13.4.2.1 Example An example of valid vectors follows:
00 ea000006 B 0x20
04 eafffffe B 0x04
08 ea00002f B _main
0c eafffffe B 0x0c
10 eafffffe B 0x10
14 00001234 B 0x14
18 eafffffe B 0x18


Что это за жуткий прыжок на адрес "0xfffffe" во всех векторах?
Почему вектор по адресу 0x00 содержит инструкцию перехода на адрес 0x06?!
Как я понимаю, вектор по адресу 0x08 должен содержать инструкцию перехода на функцию main загрузчика?
Где можно посмотреть на реальный код загрузчика, размещаемого в Serial Flash, NAND и т. д?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DpInRock
сообщение Sep 20 2011, 16:27
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Цитата
Как я понимаю, вектор по адресу 0x08 должен содержать инструкцию перехода на функцию main загрузчика?

Во первых, не загрузчика, а загружаемой программы.
Во вторых, он должен быть по адресу 0. Программа стартует сначала, таки.
В третьих, функции main предшествует всегда другая функция, которая инициализирует стеки, переменные и прочая. А уж потом передается управление майн.
В вашем примере это адрес 20.

Все вектора должны быть.
Все они должны быть в виде команды B (как в примере), либо LDR PC (как объясняется в тексте).

Вот когда длина похожа на правду и присутствуют коды нужных команд, принимается решение о загрузке программы и ее запуске.

Реальный пример.

Да все программы одинаковые. Отыщите в том компиляторе, что вы используете некий ассемблерный стартап файл, ключевое слово *startup*.
Там увидите структуру прерываний арм.
Ну а по листингу можно понять куда какие адреса подставляются.
Размер вы должны загонять самостоятельно, как вариант. Если в компиляторе или линкере не обнаружится соответсвующих данной цели способов...

---
PS. Жуткий адрес FFFFFFE - это всего лишь отрицательное смещение, которое требуется для формирования команды, которая зацикливается сама на себя.


Сообщение отредактировал DpInRock - Sep 20 2011, 16:29


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 02:11
Рейтинг@Mail.ru


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