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

 
 
 
Reply to this topicStart new topic
> IAR + RM9200
Demeny
сообщение Jan 12 2007, 15:33
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Начал осваивать архитектуру ARM, есть отладочная плата с RM9200+DataFlash+SDRAM. Установил IAR (кажется, 4.40). Первый проект (по традиции) - мигание светодиодом, взят из примеров IAR - в процессе отладки во внутренней RAM работает (отладка через Wiggler), светодиод мигает. Но при попытке продвинуться дальше возникает ряд вопросов.
1. Если я залил проект в RAM и он работает, то я ожидаю, что по нажатию RESET (без выкл. питания) программа в памяти стартует заново, и светодиод продолжит мигать... Однако этого не происходит. Почему?
2. Пытаюсь добавить в функцию main() что-то типа
Код
printf("Init OK \n");

При сборке линкер ругается на стек, увеличиваю стек с 2000 до 4000, проект собирается нормально. Но при заливке в кристалл возникает ошибка уже на этапе заливки, и в правом окне отладки вместо внятных ассемблерных инструкций какой-то мусор.
3. Что из себя представляет mac-файл ? Насколько я понял, он заливается и выполняется в контроллер до заливки основной программы. Т. е. это и есть т. н. бутлоадер, или я ошибаюсь ?
4. Зачем в принципе придумано такое многоступенчатое разделение исполняемого кода - сначала .mac файл, затем Startup.s79, затем lowlevelinit, и только потом main() ? Разве нельзя сделать "по-простому" - начинаем сразу с функции main(), в которой и инициализируем всё low-level хозяйство и далее приступаем к основному коду ?


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Jan 13 2007, 00:00
Сообщение #2


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

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Отвечу, на те вопросы, которые знаю:
1) т.к. в кристале зашит bootloader. Именно он запускается при подаче питания (сбросе). Он ничего о Вашей программе в ОЗУ не знает и соответственно не передает ей управление.
3) что-то вроде скрипта. содержит описание действий отладчика перед отладкой. Настройка PLL, контроллера памяти и т.д.
4) перед выполнением Сишной main необходимо настроить хотя бы стек, желательно для всех режимов.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
S.E.V.
сообщение Jan 19 2007, 11:22
Сообщение #3





Группа: Новичок
Сообщений: 14
Регистрация: 8-10-06
Пользователь №: 21 089



mac - файл макросов, при помощи которого можно произвести некоторые действия через Jtag перед загрузкой программы в контроллер. В этот файл необходимо добавить инициализацию оперативной памяти, для того чтобы иметь возможность заливать программу во внешнюю RAM.
Go to the top of the page
 
+Quote Post
cf7k
сообщение Jan 21 2007, 21:55
Сообщение #4


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

Группа: Свой
Сообщений: 82
Регистрация: 14-03-06
Из: Санкт-Петербург
Пользователь №: 15 227



Цитата
2. Пытаюсь добавить в функцию main() что-то типа

printf("Init OK \n");

Но при заливке в ..... вместо внятных ассемблерных инструкций какой-то мусор.

3. Что из себя представляет mac-файл ? Насколько я понял, он заливается и выполняется в контроллер до заливки основной программы. Т. е. это и есть т. н. бутлоадер, или я ошибаюсь ?


макросы (.mac) - это сугубо для IAR'вского C-SPY (в смысле отладчика). Пример: есть такой бит как REMAP - "выкидывание" ROM из начальных адресов и "подстановка" туды RAM. Если пытаться хотя бы заливать по JTAG не воспользовывшись этим REMAP на свежесброшенной системе - залить ничего не удасться. что собственно и наблюдается в пункте 2.

А то что им можно инициализировать SDRAM - это только удобство для оладки(как и PLL и прочее).

Основную прогу в принципе можно загружать только ROMloader'ом - тогда она должна быть маленькой (помещаться в IntSRAM) и может пользоваться SDRRAM.
Если прога побольше - то ее невозможно залить в SDRAM - ROMloader ничего не знает о SDRAM - он умеет только в IntSRAM. Вот тут и появляется многоступенчатость: сначала в IntSRAM - свой загрузчик; он подготовит SDRAM и сам загрузит большую прогу.
Дальнейшее увеличение "ступенчатости" - для универсализации: сначала маленький загрузчик, который готовит SDRAM для большой проги, потом большой загрузчик в SDRAM, который умеет не только из flash памяти, но и по USB и по Ethetnet, а уж только потом - основная прога. (при этом первые два зашиваются один раз и никого не беспокоят).


Цитата
4. Зачем в принципе придумано такое многоступенчатое разделение исполняемого кода - сначала .mac файл, затем Startup.s79, затем lowlevelinit, и только потом main() ? Разве нельзя сделать "по-простому" - начинаем сразу с функции main(), в которой и инициализируем всё low-level хозяйство и далее приступаем к основному коду ?


А объединить это все в один вызов из main можно только в том случае если вся программа слинкована и влазит в Internal SRAM, но startup - это вспомогательный код, который идеологически не должен вызываться из пользовательской программы (он подготавливает "окружение" для основной программы)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:11
Рейтинг@Mail.ru


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