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

 
 
> слинковать данные во внешнюю ОЗУ, на Olimex LPC-E2214 IAR 4.31
xelax
сообщение Apr 28 2007, 14:00
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Попытался использовать в качестве ОЗУ внешнюю память на плате.

Тупо поменяв в xcl файле адреса внутренней памяти на внешнюю, получил то, что контроллер вообще перестал стартовать. (пробовал разные варианты данные, стек, данные+стек)

Я так понимаю проблема в том что доступ к данной памяти 32 битный(адресные разряды A0, A1 не используются. см. схему)??? И получается её можно использовать, только как некий контейнер, руками копируя туда и руками считывая по тексту программы. А так чтобы компилятор использовал её при линковке получается сделать нельзя или можно?

Код
//*************************************************************************
// Read/write segments mapped to RAM.
//*************************************************************************

-DRAMSTART=40000000
-DRAMEND=40003FFF

-DEXTRAMSTART=81000000
-DEXTRAMEND=810FFFFF

//************************************************
// Data segments.
//************************************************

//-Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND
-Z(DATA)DATA_I,DATA_Z,DATA_N=EXTRAMSTART-EXTRAMEND

-Z(DATA)CODE_I=RAMSTART-RAMEND
-QCODE_I=CODE_ID

//*************************************************************************
// Stack and heap segments.
//*************************************************************************

-D_CSTACK_SIZE=2000
// -D_SVC_STACK_SIZE=10
-D_IRQ_STACK_SIZE=100
-D_HEAP_SIZE=2000

//-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND
//// -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND
//-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE,HEAP+_HEAP_SIZE=RAMSTART-RAMEND

-Z(DATA)CSTACK+_CSTACK_SIZE=EXTRAMSTART-EXTRAMEND
// -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=EXTRAMSTART-EXTRAMEND
-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE,HEAP+_HEAP_SIZE=EXTRAMSTART-EXTRAMEND


схема платы
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Apr 28 2007, 14:27
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(xelax @ Apr 28 2007, 13:00) *
Тупо поменяв в xcl файле адреса внутренней памяти на внешнюю, получил то, что контроллер вообще перестал стартовать. (пробовал разные варианты данные, стек, данные+стек)

Я так понимаю проблема в том что доступ к данной памяти 32 битный
Нет. Проблема в том, что надо проинициализировать контроллер внешней памяти перед работой с ней. Память может быть 8-.16-,32-битной, это не принципиально, ширина адресной шины указывается контроллеру (EMC) и он сам делает необходимое количество обращений. Но обратите внимание, что поскольку у вас стек во внешнем ОЗУ, проинициализировать EMC надо до использования стека. А поскольку глобальные переменные обнуляются перед входом в main(), то и в случае с данными во внешнем ОЗУ EMC тоже должен быть проинициализирован до инициализации данных. В IAR это можно сделать, разместив инициализацию EMC в функции __low_level_init, которая вызывается из cstartup сразу после старта. В остальном все прекрасно работает. Если вы собиратесть и отлаживаемый код занести во внешнее ОЗУ, то надо дополнительно настройку EMC делать в .mac в функции execUserPreload()


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 14:35
Рейтинг@Mail.ru


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