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

 
 
 
Reply to this topicStart new topic
> Загрузка кода из SD Card
yerzhik
сообщение Nov 30 2012, 05:36
Сообщение #1





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



Здравствуйте,
я впервые делаю подобное и потому не знаю как сделать это:
Имеется проект, который компилируется и загружается на девайс успешно через IAR и JLink дебаггер.
Часть кода работает во flash rom, другая часть кода а также данные грузятся в ram и SDRAM.
Теперь необходимо обойтись без дебаггера
Часть кода во флеш роме остается не изменное, но при каждой загрузке
нужно загрузить код и данные в ram и sdram из внешней флешки (sd card).
Вопрос собственно как это сделать?
Я получил бинарный файл при компиляции IAR.
Программа на максимум 2 мегабайта, но бинарный файл аж на 1 гигабайт, я не знаю как от туда взять код соответсвующий SDRAM и вообще правильный ли подход?
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 30 2012, 13:55
Сообщение #2


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Вы бы описали задачу подробно: микропроцессор и аппаратное окружение, компилятор, ключи компиляции, что и как в файле линкера настроено.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
KRS
сообщение Nov 30 2012, 18:39
Сообщение #3


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(yerzhik @ Nov 30 2012, 09:36) *
Программа на максимум 2 мегабайта, но бинарный файл аж на 1 гигабайт, я не знаю как от туда взять код соответсвующий SDRAM и вообще правильный ли подход?

Так там просто дырка в адресации! Часть кода для флеша, часть для SDRAM а между ними ff заполнено просто - это же бинарник!
Генерируйте intel HEX или IAR simplecode.
Или разделите проекты для флеша и sdram - тогда дырки не будет.

Загрузку кода с SD карты прийдется делать. Возьмите Fatfs там есть все необходимое.
Если у вас конечно обычный микроконтроллер из серии LPC17xx или STM32...
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Nov 30 2012, 20:13
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Насколько я понимаю у Вас ARM

0. Отодвигаете начало вашей программы в флешь на пару килобайт
1. Узнаёте по каким адресам в ОЗУ и какие секции расположены.
2. Выдёргиваете как-нибудь эти секции по одельности (по IAR я не спец, я больше по GCC )
3. Пишете ОТДЕЛЬНО программу которая читает секции с SD карты и пишет их в flash & RAM
4. прошиваете эту одельную программу

втыкаете sd КАРТУ и наслаждаетесь процессом копирования.

Конечно тут придётся повозиться со скриптами и настройкой компилятора. -- нюхнёте пороху ибо любая системная вешь -- это вам не "Hellow word!" понимаешь biggrin.gif



--------------------
Go to the top of the page
 
+Quote Post
yerzhik
сообщение Dec 3 2012, 02:01
Сообщение #5





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



Цитата(mdmitry @ Nov 30 2012, 17:55) *
Вы бы описали задачу подробно: микропроцессор и аппаратное окружение, компилятор, ключи компиляции, что и как в файле линкера настроено.


LPC1788 Процессор. IAR Embedded workbench.
В файле линкера часть кода идет во флеш ром (0x00 - 0x0007FFFF)
стек идет в RAM: (0x10000000 - 0x1000FFFF)
И остальное - это код и данные идут в SDRAM (0xA0000000 - 0xA1FFFFFF)

В memory map написано:

"P3": place in [from 0xa0000000 to 0xa1ffffff] {
ro section ...наименования секции};
"P4": place in [from 0xa0000000 to 0xa1ffffff] { rw };
"P5": place in [from 0xa0000000 to 0xa1ffffff] { block HEAP };

У P3 размер 0xad2ac.
Я решил скопировать из файла бинарника область от 0xA0000000 - 0xA00AD2AC

Я смотрю в файл бинарника начиная с 0xA0000000го байта, и сравниваю с тем, что находится фактически в памяти через дебаггер
выходит что не совпадают значения.

Они начинают совпадать начиная с 0xA0000040 го байта.

Цитата(KRS @ Nov 30 2012, 22:39) *
Так там просто дырка в адресации! Часть кода для флеша, часть для SDRAM а между ними ff заполнено просто - это же бинарник!
Генерируйте intel HEX или IAR simplecode.
Или разделите проекты для флеша и sdram - тогда дырки не будет.

Загрузку кода с SD карты прийдется делать. Возьмите Fatfs там есть все необходимое.
Если у вас конечно обычный микроконтроллер из серии LPC17xx или STM32...

У меня не совпадают байты из бинарного файла по адресу начала адреса SDRAM (0xA0000000)
с байтами, которые фактически находятся в SDRAM после запуска программы через дебаггер.
Начиная с адреса 0xA0000000, судя по memory map файлу находится секция кода. То есть не должна она меняться (read only).
Вот я и не могу понять в чем проблема.
Но если пропарсить ELF файл через программу ELF Viewer то можно увидеть, что секция кода расположена по адресу 0xA0000000 имеет содержимое, которое совпадает с фактическими байтами из программы. Как найти соответсвующий код в бинарном файле?
Go to the top of the page
 
+Quote Post
yerzhik
сообщение Dec 3 2012, 03:09
Сообщение #6





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



Кажется я понял проблему не совпадения.
Во первых я сравнивал первые 64 байта. Фактических байтов данных в памяти с тем что находится в бинарнике.
Проверял от начала до конца бинарного файла и получил место совпадения равным 0xA0000040. Надо было отнять 64 (0x40) чтобы получить место начала совпадения ( а не конца совпадения)
Во вторых в программе венды у меня не работает fseek(filePointer, 0xA0000000, SEEK_SET);
он возвращает не ноль, что свидетельствует об ошибке, но почему не знаю.
Поэтому я скопировал начало файла вместо того что должно идти по адресу 0xA0000000

Сообщение отредактировал IgorKossak - Dec 3 2012, 09:45
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 3 2012, 05:34
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(yerzhik @ Dec 3 2012, 07:09) *
Во вторых в программе венды у меня не работает fseek(filePointer, 0xA0000000, SEEK_SET);
он возвращает не ноль, что свидетельствует об ошибке, но почему не знаю.
Файл открыт с атрибутами "rb"?
Используйте srec_cat не изобретайте велосипед.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
yerzhik
сообщение Dec 3 2012, 11:04
Сообщение #8





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



Цитата(demiurg_spb @ Dec 3 2012, 09:34) *
Файл открыт с атрибутами "rb"?
Используйте srec_cat не изобретайте велосипед.


Да rb. А srec_cat'ом можно разве вытащить только код определенной секции?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 3 2012, 11:19
Сообщение #9


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



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


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 5th August 2025 - 08:17
Рейтинг@Mail.ru


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