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

 
 
> слинковать данные во внешнюю ОЗУ, на 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
Ответов
Dron_Gus
сообщение Apr 28 2007, 22:36
Сообщение #2


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

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



Цитата(Сергей Борщ @ Apr 28 2007, 15:27) *
Но обратите внимание, что поскольку у вас стек во внешнем ОЗУ, проинициализировать EMC надо до использования стека. А поскольку глобальные переменные обнуляются перед входом в main(), то и в случае с данными во внешнем ОЗУ EMC тоже должен быть проинициализирован до инициализации данных. В IAR это можно сделать, разместив инициализацию EMC в функции __low_level_init, которая вызывается из cstartup сразу после старта.


А как быть с вызовом функции? Ведь при вызове тоже используется стек... Или я что-то недопонимаю?


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 29 2007, 18:23
Сообщение #3


Гуру
******

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



Цитата(Dron_Gus @ Apr 28 2007, 22:36) *
А как быть с вызовом функции? Ведь при вызове тоже используется стек... Или я что-то недопонимаю?
Конкретно в ARM для хранения адреса возврата из подпрограмм используется регистр LR, а вот сама функция действительно использует стек. Получается, что если надо разместить стек во внешнем ОЗУ, то надо подключать свой cstartup взамен библиотечного (один из тех 0.01% случаев) и в нем инициализировать EMC.


Цитата(xelax @ Apr 28 2007, 15:32) *
__low_level_init я что-то не нашёл, может плохо искал ещё погляжу.
пошукайте в хелпе на компилятор.
Цитата(xelax @ Apr 28 2007, 15:32) *
По поводу mac файлов то они нужны только для отладки получается? Что-то нигде не нашёл как их подключить, кроме как в Debugger настройках проекта.
Да, это макросы, которые исполняет отладчик (или симулятор) в определенные моменты (описание есть в Embedded Workbench Users guide).


--------------------
На любой вопрос даю любой ответ
"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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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