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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Самопрограммирование ARM, Прошивка FLASH
zltigo
сообщение Mar 25 2008, 05:46
Сообщение #31


Гуру
******

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



Цитата(Александр_С @ Mar 25 2008, 04:43) *
Я такую проблему решал..

Некоторые проблемы нужно не пытаться "решать" их нужно просто самому себе НЕ создавать.
Это даже не говоря о том, что в данном случае "решаемой" проблемы не существует в принципе - ну какая разнича - попытается штатный загрузчик запустить чего нибудь недопрошитое или не попытается запустить? Все равно результат один - средствами штатного загрузчика перешивать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
argentum
сообщение Nov 27 2009, 12:17
Сообщение #32


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 26-04-09
Из: Москва
Пользователь №: 48 283



Помогите новичку
Пишу bootloader для LPC 2478 под KEIL.

Проблема стара, как мир - загружаю bootloader в начало флэш. . Основная программа компилируется отдельно. Бинарник основной программы заливаю через USB во флэш по заранее известному адресу. Прыгаю на этот адрес: MOV PC, #0x6000. Прога не заводится. Отдельно основная программа работает. Переход по заказанному адресу тоже происходит (проверял дебагером). При переходе на Основную программу видимо начинает выполняться Startup.s основной программы, а там все адреса от 0x0, а не от моих 0x6000. Делать Remap и выполнять основную прогу из RAM, по-моему, глупость. Вот я и мучаюсь.

Сморел ветки:
"прыгнуть на другой адрес ROM"
http://electronix.ru/forum/index.php?showt...rt=#entry410209
"Опять про загрузчик"
http://electronix.ru/forum/index.php?showt...rt=#entry416511
"Самопрограммирование ARM"
http://electronix.ru/forum/index.php?showt...rt=#entry385320
И многие другие, но по причине крайне малого опыта, почти ничего не понимаю. Ну ещё это можно назввать глупостью, наверное... Короче, помогите,пожалуйста.
Что нужно сделать, чтобы передать управление на залитую через USB, прогу???

Заранее благодарен!!!
Go to the top of the page
 
+Quote Post
goodwin
сообщение Nov 27 2009, 13:58
Сообщение #33


Местный
***

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



Дык самое простое - взять, например, "lpc24xx_usb_bootloader; AN10764 (LPC24xx USB bootloader)"
с этой странички: http://www.nxp.com/pip/LPC2478_1.html
и посмотреть...
Go to the top of the page
 
+Quote Post
Step_ARM
сообщение Nov 28 2009, 10:20
Сообщение #34


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870



Цитата(zltigo @ Mar 24 2008, 11:12) *
Не лучшая, это точно.

Затереть вероятно и RAM тратится впустую, только вот на РЕМАПИРОВАНУЮ таблицу NULL не указывает.

RAM тратится??? :-))) При объемах 32кБ, например, что значат 64 байта???
Не надо грешить против истины :-)))
Размещение в RAM иногда наилучшее решение, особенно когда ресурсов немного.

Приведу пример. Записываешь маленький загрузчик в начале флэш , который загружает с какого-то внешнего источника (датафлэш или UART, например) программу загрузчик под любые нужды(USB, SD Card и т.п.) в RAM. Старт загрузчика...
При этом загрузчик в начале флэш получается очень маленький (можно вписаться в 4кБ).
При работе загрузчика по барабану как RAM тратится. Ничего не затрешь.

Или такой пример. У меня стоит датафлэш со всякого рода картинками и загрузка этих картинок так и сделана -- с SD карты загрузчик записывается в RAM и записывает картинки на датафлэш. Экономия флэш около 6 кБ.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 28 2009, 12:27
Сообщение #35


Гуру
******

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



Цитата(Step_ARM @ Nov 28 2009, 13:20) *
RAM тратится??? :-))) При объемах 32кБ, например, что значат 64 байта???

Проблема не в том, что тратится, а в том, что тратится без всякой надобности.
32K RAM, говорите у Вас? Тогда сколько у Вас Flash? - сотни К- полмега и при этом Вы в качестве весомого аргумента пытаетесь представить "Экономия флэш около 6 кБ"
Так вот, Ваши слова
Цитата
Не надо грешить против истины :-)))

К Вам и относятся.
Цитата
Размещение в RAM иногда наилучшее решение, особенно когда ресурсов немного.

Иногда имеют право быть ЛЮБЫЕ решения. Но львиная доля из возможных - ну очень иногда. Кроме того, причем тут грузить или не грузить нечто в RAM, если я говорил только о том, что размещение таблицы векторов в RAM можно не использовать никогда и не испытывать при этом никаких проблем ни с чем.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
argentum
сообщение Nov 28 2009, 21:00
Сообщение #36


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 26-04-09
Из: Москва
Пользователь №: 48 283



Цитата(goodwin @ Nov 27 2009, 16:58) *
Дык самое простое - взять, например, "lpc24xx_usb_bootloader; AN10764 (LPC24xx USB bootloader)"

1.Я, правда, не понимаю, как реализован в этом примере запуск загруженной программы.
а) загрузили прогу через какой-то интерфейс во flash;
б) Скопировали вектора в начало RAM;
в) Установили REMAP;
г) Дальше-то как и что? Как заставить выполняться загруженную программу?

2. Тут вот в этой же ветке уважаемый zltigo предлагает в RAM вообще ничего не копировать. И мне эта идея очень нравится. Но вот опять же не пойму, как запустить прогу?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 28 2009, 23:32
Сообщение #37


Гуру
******

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



Цитата(argentum @ Nov 29 2009, 00:00) *
г) Дальше-то как и что? Как заставить выполняться загруженную программу?

Jump/Call. Любым способом http://electronix.ru/forum/index.php?showtopic=35580
Спрашиваете одно и то-же постоянно, уже где-то утверждали, что под отладчиком переход видите. Ну неужели не понятно, что в Вас проблемы НЕ с передаче управления, а в собственно программе.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
argentum
сообщение Nov 29 2009, 20:33
Сообщение #38


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 26-04-09
Из: Москва
Пользователь №: 48 283



Цитата(zltigo @ Nov 29 2009, 02:32) *
Ну неужели не понятно, что в Вас проблемы НЕ с передаче управления, а в собственно программе.

Понятно... Я вот как представляю суть этой проблемы...
В загружаемой программе у меня все адреса функций считаются от 0x0, но эта самая программа загружается bootloader'ом, не в нулевой адрес. Она начинается у меня с 0x6000. Прога прыгает на адрес 0x6000, но после выполнения первой же инструкции опять возвращается в bootloader, так опять же эта инструкция оперирует адресом, который отсчитан от 0х0, а не от 0х6000. Вот что с этим делать, я и спрашиваю уважаемых форумчан, так как сам не допетриваю.
Go to the top of the page
 
+Quote Post
Step_ARM
сообщение Nov 30 2009, 04:07
Сообщение #39


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870



Цитата(zltigo @ Nov 28 2009, 15:27) *
32K RAM, говорите у Вас? Тогда сколько у Вас Flash? - сотни К- полмега и при этом Вы в качестве весомого аргумента пытаетесь представить "Экономия флэш около 6 кБ"


Это Вам, уважаемый zltigo, позволяют ставить камни с сотнями кБ... А мне со скрипом разрешают ставить LPC.
У меня же 32 кБ RAM и 128кБ flash. Программа не дописана, а уже 120 кБ занято. А надо-то чуть-чуть дописать. В этом случае 6кБ флэш--это весомый аргумент...
Хватит, чтобы навести красоту:-))).
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 30 2009, 06:48
Сообщение #40


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(argentum @ Nov 30 2009, 02:33) *
В загружаемой программе у меня все адреса функций считаются от 0x0, но эта самая программа загружается bootloader'ом, не в нулевой адрес. Она начинается у меня с 0x6000.

Неудивительно, что ничего не работает. В проге обычно есть загрузка в регистр прямых адресов констант/функций и прочего. Если прога компилируется для работы с адреса 0, то она НЕ БУДЕТ работать на адресе 0х6000. Короче, прога должна работать на своём адресе. Для этого её нужно перекомпилировать (перелинковать) на другой адрес. Берётся скрипт линкера и в нём правится адрес начала флэш на нужный 0х6000. Потом перелинковка и всё. Прошивку можно заливать по адресу 0х6000.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
skripach
сообщение Nov 30 2009, 08:14
Сообщение #41


■ ■ ■ ■
*****

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



Цитата
Неудивительно, что ничего не работает. В проге обычно есть загрузка в регистр прямых адресов констант/функций и прочего. Если прога компилируется для работы с адреса 0, то она НЕ БУДЕТ работать на адресе 0х6000. Короче, прога должна работать на своём адресе. Для этого её нужно перекомпилировать (перелинковать) на другой адрес. Берётся скрипт линкера и в нём правится адрес начала флэш на нужный 0х6000. Потом перелинковка и всё. Прошивку можно заливать по адресу 0х6000.

Пытался запустить приложение скомпилированное для адреса 0х0000 с произвольного адреса, не получилось даже с правкой бинарника в некоторых местах. Различия в приложениях не велики, думаю при желании можно выявить закономерности. Непонятно почему в приложении используются абсолютные адреса, а не относительные и можно ли это исправить.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 30 2009, 08:20
Сообщение #42


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(skripach @ Nov 30 2009, 14:14) *
Непонятно почему в приложении используются абсолютные адреса, а не относительные и можно ли это исправить.

Ну вообще-то, можно. Самому написать компилятор biggrin.gif


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
skripach
сообщение Nov 30 2009, 08:26
Сообщение #43


■ ■ ■ ■
*****

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



Цитата
Самому написать компилятор

Угу первое что приходит на ум. Может как-то менее трудозатратное.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 30 2009, 08:39
Сообщение #44


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(skripach @ Nov 30 2009, 14:26) *
Угу первое что приходит на ум. Может как-то менее трудозатратное.

А потребность-то в чём? Нужа такая прошивка, которую можно грузить по любому адресу флэша (ну типа туда, где в данный момент свободно) и там же её выполнять?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
skripach
сообщение Nov 30 2009, 08:57
Сообщение #45


■ ■ ■ ■
*****

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



Цитата
А потребность-то в чём? Нужа такая прошивка, которую можно грузить по любому адресу флэша (ну типа туда, где в данный момент свободно) и там же её выполнять?

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


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 30th June 2025 - 09:37
Рейтинг@Mail.ru


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