|
|
  |
Bootloader или загрузчик, расскажите по подробней... |
|
|
|
May 1 2009, 07:32
|
Участник

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

|
А для Keil?
|
|
|
|
|
May 1 2009, 10:15
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(Anatrulij @ May 1 2009, 10:32)  А для Keil? Не надо придумывать себе проблемы там, где их нет. В любом С компиляторе: Код typedef void (*pt2Function)(void);
pt2Function BootCall = (pt2Function)0x1000; // адрес, куда надо перейти
BootCall(); // собственно переход
|
|
|
|
|
May 1 2009, 10:50
|
Участник

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

|
После окончания работы функции, куда передается управление, или можно указать адрес функции main загруженной бутлоадером основной программы? Тогда возникает еще вопрос - main начинается с первого байта прошивки?
|
|
|
|
|
May 1 2009, 11:11
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(Anatrulij @ May 1 2009, 13:50)  После окончания работы функции, куда передается управление, или можно указать адрес функции main загруженной бутлоадером основной программы? Тогда возникает еще вопрос - main начинается с первого байта прошивки? Вы продумайте организацию работы вашего устройства. Что и в каком порядке инициализируется. Чтобы нормально стартовала ваша прикладная программа, т.е. main() к моменту ее вызова надо, чтобы были инициализированы все необходимые hardware-устройства (по крайней мере так принято), инициализирован сегмент bss, может быть скопирован сегмент данных data из FLASH в RAM, вызваны конструкторы глобальных объектов (в случае использования С++), инициализирована таблица прерываний. Так что помозгуйте кто (bootloader или прикладная программа) что из этого списка и в какой последовательности инициализирует - и вперед.
|
|
|
|
|
May 2 2009, 11:25
|
Участник

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

|
Цитата(sergeeff @ May 1 2009, 14:11)  Так что помозгуйте кто (bootloader или прикладная программа) что из этого списка и в какой последовательности инициализирует - и вперед. Сразу будет записываться бутлоадер, а он же, по необходимости, будет обновлять основную прошивку. я просто еще не знаю как это все правильно организовуется. Мне так и не ответили на вопрос: После окончания работы функции, куда передается управление, или можно указать адрес функции main загруженной бутлоадером основной программы? Тогда возникает еще вопрос - main начинается с первого байта прошивки?
|
|
|
|
|
May 2 2009, 11:53
|

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

|
Цитата(Anatrulij @ May 2 2009, 14:25)  я просто еще не знаю как это все правильно организовуется. Есть несколько разных вариантов... Цитата Мне так и не ответили на вопрос: После окончания работы функции, куда передается управление, или можно указать адрес функции main загруженной бутлоадером основной программы? Тогда возникает еще вопрос - main начинается с первого байта прошивки? Работы какой функции? Можно указать на main основной программы, если вы решили проводить всю инициализацию в загрузчике, и не используете C++. main начнется там, где его расположит линкер. Можно в принципе расположить main с первого байта прошивки, однако обычно в начале прошивки лежит её описание и векторы точек входа. То есть напрмер версия прошивки, длина прошивки, потом точки входа в приложение, в SWI, в FIQ, еще куда-нибудь.
|
|
|
|
|
May 2 2009, 12:10
|
Участник

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

|
Цитата(HARMHARM @ May 2 2009, 14:53)  Есть несколько разных вариантов... Можете описать данные варианты. Если есть примерчик, выложите пожалуйста.
|
|
|
|
|
May 4 2009, 11:38
|
Участник

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

|
Спасибо за ссылку. Сложновато пока для меня. может у кого то есть по проще? или где-то по этапам расписано, что и как делать.
|
|
|
|
|
May 4 2009, 12:08
|
Участник

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

|
Цитата(zltigo @ May 4 2009, 14:48)  Значит так. Для начала Вы пропустили самый первый этап - нужно хоть чего-то достичь относительно самостоятельно. Например, написать моргающий светодиод и уж точно самостоятельно досконально разобраться как это и комплятор работают. Мигание светодиодом - это уже пройденный этам. Щас поставил перед собой задачу - написать бутлоадер, который прошивает во флеш основную программу через CAN. С чем разобрался: могу писать во флеш посредством IAP(с разположением секторов и прочее - понятно), с СAN-ном тоже знаком не плохо. Решил, что бутлоадер будет разположен в нулевом (если не хватит, то и в первом) секотрах. При старет будет проверяться есть ли рабочая прошивка, если есть - то прыгаем на нее, в противном случае ждем данных с CAN. По каманде из основной прошивки можно пригнуть на бутлоадер. Так же будет несколько команд по которым будет возвращаться номер прошивки и прочие нужные мне данные - Вот не знаю пока как это все реализовать, с чего начать???
|
|
|
|
|
May 7 2009, 11:38
|
Участник

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

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

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

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