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

 
 
6 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> Bootloader или загрузчик, расскажите по подробней...
Anatrulij
сообщение May 1 2009, 07:32
Сообщение #31


Участник
*

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



А для Keil?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение May 1 2009, 10:15
Сообщение #32


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

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



Цитата(Anatrulij @ May 1 2009, 10:32) *
А для Keil?


Не надо придумывать себе проблемы там, где их нет.

В любом С компиляторе:

Код
typedef void (*pt2Function)(void);


pt2Function BootCall = (pt2Function)0x1000; // адрес, куда надо перейти

BootCall(); // собственно переход
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение May 1 2009, 10:50
Сообщение #33


Участник
*

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



После окончания работы функции, куда передается управление, или можно указать адрес функции main загруженной бутлоадером основной программы? Тогда возникает еще вопрос - main начинается с первого байта прошивки?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение May 1 2009, 11:11
Сообщение #34


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

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



Цитата(Anatrulij @ May 1 2009, 13:50) *
После окончания работы функции, куда передается управление, или можно указать адрес функции main загруженной бутлоадером основной программы? Тогда возникает еще вопрос - main начинается с первого байта прошивки?


Вы продумайте организацию работы вашего устройства. Что и в каком порядке инициализируется. Чтобы нормально стартовала ваша прикладная программа, т.е. main() к моменту ее вызова надо, чтобы были инициализированы все необходимые hardware-устройства (по крайней мере так принято), инициализирован сегмент bss, может быть скопирован сегмент данных data из FLASH в RAM, вызваны конструкторы глобальных объектов (в случае использования С++), инициализирована таблица прерываний.

Так что помозгуйте кто (bootloader или прикладная программа) что из этого списка и в какой последовательности инициализирует - и вперед.
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение May 2 2009, 11:25
Сообщение #35


Участник
*

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



Цитата(sergeeff @ May 1 2009, 14:11) *
Так что помозгуйте кто (bootloader или прикладная программа) что из этого списка и в какой последовательности инициализирует - и вперед.


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

Мне так и не ответили на вопрос: После окончания работы функции, куда передается управление, или можно указать адрес функции main загруженной бутлоадером основной программы? Тогда возникает еще вопрос - main начинается с первого байта прошивки?
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение May 2 2009, 11:53
Сообщение #36


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

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



Цитата(Anatrulij @ May 2 2009, 14:25) *
я просто еще не знаю как это все правильно организовуется.

Есть несколько разных вариантов...
Цитата
Мне так и не ответили на вопрос: После окончания работы функции, куда передается управление, или можно указать адрес функции main загруженной бутлоадером основной программы? Тогда возникает еще вопрос - main начинается с первого байта прошивки?

Работы какой функции?
Можно указать на main основной программы, если вы решили проводить всю инициализацию в загрузчике, и не используете C++.
main начнется там, где его расположит линкер. Можно в принципе расположить main с первого байта прошивки, однако обычно в начале прошивки лежит её описание и векторы точек входа. То есть напрмер версия прошивки, длина прошивки, потом точки входа в приложение, в SWI, в FIQ, еще куда-нибудь.
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение May 2 2009, 12:10
Сообщение #37


Участник
*

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



Цитата(HARMHARM @ May 2 2009, 14:53) *
Есть несколько разных вариантов...


Можете описать данные варианты.

Если есть примерчик, выложите пожалуйста.
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение May 3 2009, 19:27
Сообщение #38


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

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



Цитата(Anatrulij @ May 2 2009, 15:10) *
Можете описать данные варианты.
Если есть примерчик, выложите пожалуйста.

Читайте тему, там есть ссылки...
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение May 4 2009, 11:38
Сообщение #39


Участник
*

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



Спасибо за ссылку. Сложновато пока для меня. может у кого то есть по проще? или где-то по этапам расписано, что и как делать.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 4 2009, 11:48
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Anatrulij @ May 4 2009, 14:38) *
или где-то по этапам расписано, что и как делать.

Значит так. Для начала Вы пропустили самый первый этап - нужно хоть чего-то достичь относительно самостоятельно. Например, написать моргающий светодиод и уж точно самостоятельно досконально разобраться как это и комплятор работают.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение May 4 2009, 12:08
Сообщение #41


Участник
*

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



Цитата(zltigo @ May 4 2009, 14:48) *
Значит так. Для начала Вы пропустили самый первый этап - нужно хоть чего-то достичь относительно самостоятельно. Например, написать моргающий светодиод и уж точно самостоятельно досконально разобраться как это и комплятор работают.


Мигание светодиодом - это уже пройденный этам.

Щас поставил перед собой задачу - написать бутлоадер, который прошивает во флеш основную программу через CAN.
С чем разобрался: могу писать во флеш посредством IAP(с разположением секторов и прочее - понятно), с СAN-ном тоже знаком не плохо.

Решил, что бутлоадер будет разположен в нулевом (если не хватит, то и в первом) секотрах. При старет будет проверяться есть ли рабочая прошивка, если есть - то прыгаем на нее, в противном случае ждем данных с CAN. По каманде из основной прошивки можно пригнуть на бутлоадер. Так же будет несколько команд по которым будет возвращаться номер прошивки и прочие нужные мне данные - Вот не знаю пока как это все реализовать, с чего начать???
Go to the top of the page
 
+Quote Post
sergeeff
сообщение May 7 2009, 08:53
Сообщение #42


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

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



Никак не могу понять, что же вам не понятно? Сами же все внятно описали, где-что будет лежать и что должно делать. Ну так и реализовывайте!
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение May 7 2009, 11:38
Сообщение #43


Участник
*

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



Цитата(sergeeff @ May 7 2009, 11:53) *
Никак не могу понять, что же вам не понятно? Сами же все внятно описали, где-что будет лежать и что должно делать. Ну так и реализовывайте!


я как раз не знаю как это реализовать
Go to the top of the page
 
+Quote Post
sergeeff
сообщение May 7 2009, 18:01
Сообщение #44


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

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



Для начала, считайте, что у вас пока одна единственная задача, имеющая собственный main(). У этой задачи есть low_level_init() - инициализация необходимого по-минимуму железа (CAN, в частности) и в main() - какой-нибудь "Hello world". Все это должно лежать в нулевом секторе flash. Когда все это заработает - это 80% успеха.
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение May 7 2009, 19:34
Сообщение #45


Участник
*

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



Цитата(sergeeff @ May 7 2009, 21:01) *
Для начала, считайте, что у вас пока одна единственная задача, имеющая собственный main(). У этой задачи есть low_level_init() - инициализация необходимого по-минимуму железа (CAN, в частности) и в main() - какой-нибудь "Hello world". Все это должно лежать в нулевом секторе flash. Когда все это заработает - это 80% успеха.



Ок. Спасибо.
Go to the top of the page
 
+Quote Post

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

 


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


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