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

 
 
6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Bootloader или загрузчик, расскажите по подробней...
HARMHARM
сообщение Apr 29 2009, 13:21
Сообщение #16


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(Anatrulij @ Apr 29 2009, 16:07) *
А где в стартапе указано адрес начала программы, адрес начала бутлоадера?
З.Ы. а есть описание кода в стартапе или описание того, как грамотно сделать стартап?

В стартапе указан адрес инструкции, которую станет выполнять микроконтроллер. А у что там будет - бутлоадер или приложение - решать вам.
Это:
Код
Vectors LDR PC, Reset_Addr

первая инструкция, которую выполнит контроллер. Загрузка из Reset_Addr значения Reset_Handler в счетчик команд, по сути безусловный переход. Vectors это просто метка.
Это:
Код
Reset_Addr DCD Reset_Handler

Описание входной точки программы. Reset_Handler подставит линкер при сборке. Reset_Addr это метка.

Инструкции как таковой я не видел. Хорошо сделаный стартап выкладывал Zltigo здесь. Правда, там много и того, что для вас будет лишним пока.
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Apr 29 2009, 13:57
Сообщение #17


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



А линкер это тоже отдельный фалик прикрученный к проекту?
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Apr 29 2009, 14:08
Сообщение #18


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(Anatrulij @ Apr 29 2009, 16:57) *
А линкер это тоже отдельный фалик прикрученный к проекту?

Wiki.
Файлик, прикрученный к проекту - это скрипт линкера. У IAR 4 это .xcl, у 5 .icf.
Вообще-то это все есть в документации к IAR. maniac.gif
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Apr 29 2009, 14:15
Сообщение #19


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



я пишу на Keil
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Apr 29 2009, 14:18
Сообщение #20


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(Anatrulij @ Apr 29 2009, 17:15) *
я пишу на Keil

Телепатов нет...
У Keil тоже есть документация...
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 29 2009, 14:25
Сообщение #21


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Anatrulij @ Apr 29 2009, 17:15) *
я пишу на Keil

для RVDS компилятора - см scatter file (.sct)
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Apr 30 2009, 05:41
Сообщение #22


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



defunct>>для RVDS компилятора - см scatter file (.sct)

Смотрел я этот файл. вот его содержание:

LR_IROM1 0x00000000 0x00080000 { ; load region size_region
ER_IROM1 0x00000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x40000000 0x00010000 { ; RW data
.ANY (+RW +ZI)
}
}

ER_IROM1 0x00000000 0x00080000 - значит что с адреса 0x00080000 начинается выполнение моей программи?

А где написано чему равна переменная Reset_Addr?

Сообщение отредактировал Anatrulij - Apr 30 2009, 05:49
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Apr 30 2009, 05:55
Сообщение #23


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



А Reset_Addr - это метка первой команды вашего bootloader'a. Вы для начала разобрались с тем, с какого адреса стартует ваш процессор? Как устроена таблица векторов прерываний? С самими командами ассемблера?


Вообще полезно для начала детально изучить startup файл на предмет того, как он устроен.
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Apr 30 2009, 06:01
Сообщение #24


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



Цитата(sergeeff @ Apr 30 2009, 08:55) *
Вообще полезно для начала детально изучить startup файл на предмет того, как он устроен.


Вот я и начал детально изучать startup файл biggrin.gif
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Apr 30 2009, 09:24
Сообщение #25


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



Что-то я не могу найти в Кейле, где указывается с какого адреса начинается моя программа.
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Apr 30 2009, 11:36
Сообщение #26


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(Anatrulij @ Apr 30 2009, 12:24) *
Что-то я не могу найти в Кейле, где указывается с какого адреса начинается моя программа.

А зачем вам это понадобилось? Кроме того есть разница - начало программы и точка входа...
В любом случае - начало программы определяется в scatter file, точку входа линкер подставит сам когда все скомпонует.
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Apr 30 2009, 11:42
Сообщение #27


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



А где в scatter file указан адрес начала программи
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Apr 30 2009, 14:12
Сообщение #28


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(Anatrulij @ Apr 30 2009, 14:42) *
А где в scatter file указан адрес начала программи

Я мало понимаю в Keil, но кажется что строка
Код
ER_IROM1 0x00000000 0x00080000

указывает что линкер может разместить программу в этом диапазоне...
Скорее всего с адреса 0 и разместит.
Если хотите знать точно - смотрите в лог линкера.
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Apr 30 2009, 14:33
Сообщение #29


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



А как с бутлоадера передать управление на загруженную программу, а с программы (по необходимости) назад на бутлоадер?
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Apr 30 2009, 18:49
Сообщение #30


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(Anatrulij @ Apr 30 2009, 17:33) *
А как с бутлоадера передать управление на загруженную программу, а с программы (по необходимости) назад на бутлоадер?

С бутоладера - примерно так:
Код
    extern __noreturn void switch_to_application();
    ClearWDT();
    __disable_interrupt();
    switch_to_application();

При этом в ключах линкера объявлен символ (для IAR):
Код
-Dswitch_to_application=00018010

Естественно, есть соглашение (моё с самим собой), что по адресу 0х00018010 находится точка входа в приложение.
Из приложения в бутлоадер тоже можно так делать, но я предпочитаю отравить внутренний watchdog неправильной последовательностью.
Go to the top of the page
 
+Quote Post

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

 


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


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