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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Вопросы по реализации бутлоадера, at91sam7s64, IAR5.41
Wano
сообщение Aug 16 2010, 15:06
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Цитата(Exeland @ Aug 16 2010, 13:27) *
Я с линкером не работал. Можете дать кусочек кода с пояснением.


1)убрать галку на Use Memory Layout form Target Dialog на вкладке линкера и нажать Edit дабы отобразился скаттер , которым до этого собирали.
2)
Код
LR_IROM1 0x00000000 0x00038000  {   ; load region size_region
  ER_IROM1 0x00000000 0x00038000  { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }.....
}

первые цифры в секции и есть начало куда ляжет RESET(statrup) и тд. Выбирать начало сверяясь (как сказал aaarrr) с шитом. Вторая цифра размер секции. http://www.keil.com/support/man/docs/armli...nk_cchfgafb.htm
Go to the top of the page
 
+Quote Post
Exeland
сообщение Aug 17 2010, 06:16
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 9-04-09
Из: Чебоксары
Пользователь №: 47 411



Поменял в Target Diolog адреса, грузится если pc=Start_Adress сделать. Прыжком с загрузчика грузится, если только не инициализировать в загрузчике периферию. Видимо придется отключать переферию перед прыжком.
Go to the top of the page
 
+Quote Post
Exeland
сообщение Aug 17 2010, 07:36
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 9-04-09
Из: Чебоксары
Пользователь №: 47 411



Хотя нет все работает. rolleyes.gif
Прыжок на ПО делаю так, если кому интересно:
Код
#define FW_start_adrs       0x08001c01 // Адрес размещения прошивки главной программы (должен быть нечетн. для STM323)
void (* GO_to_Start)() = (void(*)())FW_start_adrs; // Псевдофункция
...
GO_to_Start();// Прыгаем на адрес начала ПО
...

Go to the top of the page
 
+Quote Post
Wano
сообщение Aug 17 2010, 08:18
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Цитата(Exeland @ Aug 17 2010, 09:16) *
Поменял в Target Diolog адреса, грузится если pc=Start_Adress сделать. Прыжком с загрузчика грузится, если только не инициализировать в загрузчике периферию. Видимо придется отключать переферию перед прыжком.


Лучше руками. Вектора сначала , а код где хотим. Прилепил примерчик , размещать исполняемый код можно куда угодно,а стартовать с векторов.
Прикрепленные файлы
Прикрепленный файл  Blinky.rar ( 21 килобайт ) Кол-во скачиваний: 41
 
Go to the top of the page
 
+Quote Post
Exeland
сообщение Aug 17 2010, 09:42
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 9-04-09
Из: Чебоксары
Пользователь №: 47 411



Еще один вопрос. Необходимо разместить константы (Контрольную сумму, версию прошивки и ее размер)по заданному адресу Flash. Как это можно сделать?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 17 2010, 10:26
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Exeland @ Aug 17 2010, 13:42) *
Как это можно сделать?

Можно предложить несколько способов:
1. Вбить необходимые константы в стартапе, адрес которого априори известен
2. Сделать фиксированную секцию
3. Не делать фиксированную область, а создать структуру с сигнатурой для поиска
Я бы рекомендовал первый или последний способы.
Go to the top of the page
 
+Quote Post
skripach
сообщение Aug 17 2010, 12:50
Сообщение #22


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
3. Не делать фиксированную область, а создать структуру с сигнатурой для поиска

Размер сигнатуры и что в её качестве использовать? Сейчас 8 байт взятых с потолка.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 17 2010, 12:57
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Думаю, восьми байт как раз достаточно. Если "потолком" служил генератор псевдослучайной последовательности, то сгодится.
Go to the top of the page
 
+Quote Post
skripach
сообщение Aug 17 2010, 13:32
Сообщение #24


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
Если "потолком" служил генератор псевдослучайной последовательности, то сгодится.

так и есть


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
Exeland
сообщение Aug 19 2010, 05:41
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 9-04-09
Из: Чебоксары
Пользователь №: 47 411



Цитата(aaarrr @ Aug 17 2010, 14:26) *
Можно предложить несколько способов:
1. Вбить необходимые константы в стартапе, адрес которого априори известен

Не могли бы вы привести пример в виде кусочка кода.
Go to the top of the page
 
+Quote Post
Wano
сообщение Aug 20 2010, 09:30
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Цитата(Exeland @ Aug 19 2010, 08:41) *
Не могли бы вы привести пример в виде кусочка кода.


если в KEIL-е

в основной проге глобально const char text[] __attribute__((at(0x00001000)))={"прошивка такая-то"};

в загрузчике смотрим:
const char * text;
text = (const char*)0x00001000;

Ну или структуру сделать, как сказал aaarrr
Go to the top of the page
 
+Quote Post
TU-104
сообщение Feb 19 2014, 11:57
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 10-12-08
Пользователь №: 42 354



Цитата(mempfis_ @ Aug 16 2010, 19:44) *
Сегодня всё проверил - приложение вызванное из загрузчика запустилось и работает как положено sm.gif
Спасибо за помощь sm.gif

КАК у вас это получилось?! Вы даже про вектора не спрашивали в этой ветке. Или у вас основное приложение работает без прерываний?

Цитата(mempfis_ @ Jul 29 2010, 15:31) *
Вот тут мне не всё понятно но спрашивать буду когда дойдёт до этого дело.

А можно мне спросить, что нужно сделать с этими векторами?
У меня похожий контроллер, AT91SAM7X256:
ROM: 0x00100000-0x0013FFFF, RAM : 0x00200000-0x0020FFFF
После старта, на нулевой адрес отображается флэш.
После ремапа с нулевого адреса видна ОЗУ.

К примеру, беру 2 одинаковых проекта (под IAR 6) работающих "мигалок". Оба со своими стартапами (которые мне пока вообще не понять)
1й будет бутлоадером, будет лежать в начале флеш.
В нем пишу так:
Код
    
#define PROG_JUMP_ADDRESS    (0x00110000)
  //запрет всех прерываний
AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF;
//запуск основной программы(выход из bootloader)
work_start_address = (void(*)(void))PROG_JUMP_ADDRESS;
work_start_address();

В нем же, в этом тестовом примере в low_level_init сделан ремап RAM.
_________________________________

Беру 2й проект, ставлю в Linker-> Options:
Код
define symbol __ICFEDIT_intvec_start__ = 0x00110000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x00110000;

Загружаю стандартной самбой 1й бинарник с адреса 100000, второй с адреса 110000. Дергаю питание.
Запускается 1я мигалка, прыгает на 0х110000, запускается вторая мигалка(рабочая). Вижу отладочный текст в консоли, все ОК. Но рабочая программа доходит видимо до первого прерывания и виснет.

Что нужно сделать еще?
Заранее спасибо за ответы.



Go to the top of the page
 
+Quote Post
TU-104
сообщение Feb 20 2014, 04:39
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 10-12-08
Пользователь №: 42 354



Добавил копирование первых 64 байт прошивки в начало ОЗУ.
0х00110000 -> 0х00
Код
    
    unsigned int *adrram20 = (unsigned int *) AT91C_ISRAM;
    unsigned int *adrflash10 = (unsigned int *) AT91C_IFLASH;

adrflash10 += 0x00010000/4;
for (i=0; i<0x10; i++){
  TRACE_INFO(" 0x%08x = 0x%08x    0x%08x = 0x%08x  \n\r", adrflash10, *adrflash10, adrram20 , *adrram20);  
  *adrram20 = *adrflash10;
  adrram20++;
  adrflash10++;
}

Указал в опциях линкера старт РАМ 0х00200040.

Что-то я еще не сделал...
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Feb 20 2014, 22:07
Сообщение #29


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Я расскажу как я делал. (1788)

И приложение, и проект, существуют как полностью независимые приложения. соответвенно можно загрузить в чип одно приложение, и все будет работать. Можно загрузить бутлоадер также отдельно, и он тоже будет работать самостоятельно. Бутлоадер ожидает увидеть приложение по определенному адресу, и если оно там есть, выполняет переход туда, там происходит полная инициализация всего, т.к. приложение не ждет никакой поддержки бутлоадера.

При совместном использовании БЛ заменяет собой некую заглушку которая предусмотрена в приложении, которая по сути всего лишь осуществляет переход из 0 в начала startup приложения.

Преимуществ у такого подхода много, как минимум - отладка не осложняется никакими бутлоадерами и его не надо как-то особо собирать для отладки.

Обновление бутлоадера не предусмотрено, БЛ выполняется прямо из флеша.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 20 2014, 22:10
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(ar__systems @ Feb 21 2014, 02:07) *
БЛ выполняется прямо из флеша.

а записи приложения во флеш это не мешает?
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 Текстовая версия Сейчас: 26th August 2025 - 19:21
Рейтинг@Mail.ru


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