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

 
 
> Запуск кода из внешней памяти
inventor
сообщение Sep 19 2017, 16:18
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



подскажите мне вот что
имеется арм контроллер
в котором ест 48 килобайт памяти
этого мало для моих задач, я подцепил 4 Мбайт внешней памяти
и хочу что бы старт начался из нее, а не из внутренней SRAM
и чтобы стек там же располагался
как мне это правильно сделать
чтобы стек так же расположить во внешней памяти?

вот у меня есть файлstartup_MYCPU.s
где есть вызов LDR R0, =SystemInit
что я должен сделать внутри System Init
кроме настройки внешней шины адреса, данных, управления?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Obam
сообщение Sep 19 2017, 19:38
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Ещё "бензинчику" добавлю (; загрузка в R0 адреса SystemInit ничего не вызовет.
Внешняя память то какая: flash? ram?


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
inventor
сообщение Sep 20 2017, 06:53
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(Obam @ Sep 19 2017, 22:38) *
Ещё "бензинчику" добавлю (; загрузка в R0 адреса SystemInit ничего не вызовет.
Внешняя память то какая: flash? ram?

RAM
контроллер миландр
ну так что мне нужно сделать, по шагам?

THUMB

; Reset Handler
PUBWEAK Reset_Handler
SECTION .text:CODE:NOROOT:REORDER(2)
Reset_Handler
LDR R0, =SystemInit
BLX R0
LDR R0, =__iar_program_start
BX R0


вот так начинается программа
скрипт линкера такой:

CODE
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;

/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
define symbol __ICFEDIT_region_ROM_end__ = 0x0001ffff;

/* Внутренняя память */
define symbol __ICFEDIT_region_SRAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_SRAM_end__ = 0x20007fff;

/* Внешняя память */
define symbol __ICFEDIT_region_XRAM_start__= 0x60200000;
define symbol __ICFEDIT_region_XRAM_end__ = (0x60200000 + 0x00040000 - 1);

/* Стек и куча */
define symbol __ICFEDIT_size_cstack__ = 0x2000;
define symbol __ICFEDIT_size_heap__ = 0x4000;

/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__];
define region SRAM_region = mem:[from __ICFEDIT_region_SRAM_start__ to __ICFEDIT_region_SRAM_end__];
define region XRAM_region = mem:[from __ICFEDIT_region_XRAM_start__ to __ICFEDIT_region_XRAM_end__];


define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };

initialize by copy { readwrite };
do not initialize { section .noinit };

keep { section .intvec };
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region { readonly };
place in SRAM_region { readwrite,
block CSTACK,
block HEAP};


/* place in XRAM_region {readwrite}; */
//place in RAM_region{ block HEAP };

Go to the top of the page
 
+Quote Post
Integro
сообщение Sep 20 2017, 07:04
Сообщение #4


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

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



Цитата(inventor @ Sep 20 2017, 09:53) *
RAM
контроллер миландр
ну так что мне нужно сделать, по шагам?


миландр, этого мало, какой?
RAM, интерфейс?

вкратце, если SRAM подключена по штатному интерфейсу и память будет замаплена на адреса рабочего пространства, то проблем не должно быть.
- Обычно в файлах startup.c (.S) вызывается SystemInit там нужно включить инициализацию RAM
- Дальше, зная адреса RAM, добавляем в линкер скрип регион RAM, распологаем там стек

UPD: долго печатал)
Go to the top of the page
 
+Quote Post
inventor
сообщение Sep 20 2017, 07:15
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(Integro @ Sep 20 2017, 10:04) *
миландр, этого мало, какой?
RAM, интерфейс?

вкратце, если SRAM подключена по штатному интерфейсу и память будет замаплена на адреса рабочего пространства, то проблем не должно быть.
- Обычно в файлах startup.c (.S) вызывается SystemInit там нужно включить инициализацию RAM
- Дальше, зная адреса RAM, добавляем в линкер скрип регион RAM, распологаем там стек

UPD: долго печатал)

там еще такое, чтобы внешняя памят заработала
я настраивают выводы для работы с интерфейсом внешней памяти
то есть какие выводы будут шиной данных, какие шиной адреса
а какие управляющие, и кроме этого настраиваю memory region
и задаю число циклов ожидание и пр.
эта функция, как я понимаю, должна быть вызвана до все этих ремапов?

понятно, не видел собщение предыдущее
такой еще вопрос: в SystemInit инициализацию Ram делать
напрямую обращаясь к регистрам или вызываьт функции (использовать стек и пр) ?
Go to the top of the page
 
+Quote Post
Integro
сообщение Sep 20 2017, 07:24
Сообщение #6


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

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



Цитата(inventor @ Sep 20 2017, 10:15) *
эта функция, как я понимаю, должна быть вызвана до все этих ремапов?

RAM и все пины нужно настроить до вызова __iar_program_start, тоесть в SystemInit()

Функция __iar_program_start начинает инициализивать "стреду" компилятора, тоесть инициализоровать переменные (секции .bss и .data) если они будут лежать во внешней рам, это критично.
Кроме того, __iar_program_start уже может пользовать стек.

Код
Reset_Handler
LDR R0, =SystemInit
BLX R0
LDR R0, =__iar_program_start
BX R0


UPD:
Цитата(inventor @ Sep 20 2017, 10:15) *
напрямую обращаясь к регистрам или вызываьт функции (использовать стек и пр) ?

Можно постараться не использовать стек, тоесть напрямую через регистры.
Можно подменить на время инициализции, стек, на нормальную SRAM потом вернуть, делается это через регист SP (MSP)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- inventor   Запуск кода из внешней памяти   Sep 19 2017, 16:18
- - dimka76   Вы даже марку контроллера не упомянули. А так вам...   Sep 19 2017, 18:28
|- - golf2109   Цитата(Obam @ Sep 19 2017, 21:38) Ещё ...   Sep 20 2017, 01:24
|- - Forger   Цитата(inventor @ Sep 20 2017, 09:53) ну ...   Sep 20 2017, 06:58
- - inventor   неицинициализированные данные я там могу расположи...   Sep 20 2017, 06:58
|- - Forger   Цитата(inventor @ Sep 20 2017, 09:58) 198...   Sep 20 2017, 07:02
|- - Forger   Я бы не стал мудрить с полным переносом кода во вн...   Sep 20 2017, 07:17
- - scifi   Ещё интересный вопрос, где хранится код программы ...   Sep 20 2017, 07:40
|- - Forger   Для толстых проектов обычно ставят внешнюю FLASH (...   Sep 20 2017, 07:48
||- - scifi   Цитата(Forger @ Sep 20 2017, 10:48) Для т...   Sep 20 2017, 07:50
|- - inventor   Цитата(scifi @ Sep 20 2017, 10:40) Кстати...   Sep 20 2017, 07:50
|- - scifi   Цитата(inventor @ Sep 20 2017, 10:50) это...   Sep 20 2017, 07:59
|- - jcxz   Цитата(scifi @ Sep 20 2017, 14:59) И за ч...   Sep 20 2017, 08:33
|- - inventor   Цитата(jcxz @ Sep 20 2017, 11:33) Автор в...   Sep 20 2017, 08:40
|- - Forger   Цитата(inventor @ Sep 20 2017, 11:40) ну ...   Sep 20 2017, 09:05
- - VladislavS   Значит так. Процессор ваш имеет 128 Кбайт Flash и ...   Sep 20 2017, 09:12
|- - Forger   Цитата(VladislavS @ Sep 20 2017, 12:12) В...   Sep 20 2017, 09:21
|- - jcxz   Цитата(VladislavS @ Sep 20 2017, 16:12) З...   Sep 20 2017, 09:42
||- - VladislavS   Цитата(Forger @ Sep 20 2017, 12:21) Добав...   Sep 20 2017, 10:00
||- - Forger   Цитата(VladislavS @ Sep 20 2017, 13:00) С...   Sep 20 2017, 10:07
||- - jcxz   Цитата(VladislavS @ Sep 20 2017, 17:00) А...   Sep 20 2017, 10:22
||- - inventor   Цитата(jcxz @ Sep 20 2017, 13:22) Недавно...   Sep 20 2017, 11:15
||- - Forger   Цитата(inventor @ Sep 20 2017, 14:15) в 4...   Sep 20 2017, 11:31
|||- - inventor   Цитата(Forger @ Sep 20 2017, 14:31) Но чт...   Sep 20 2017, 12:47
|||- - aaarrr   Цитата(inventor @ Sep 20 2017, 15:47) про...   Sep 20 2017, 13:07
|||- - Forger   Цитата(inventor @ Sep 20 2017, 15:47) мне...   Sep 20 2017, 13:11
|||- - jcxz   Цитата(inventor @ Sep 20 2017, 19:47) про...   Sep 20 2017, 16:52
|||- - Forger   Цитата(jcxz @ Sep 20 2017, 19:52) Работод...   Sep 20 2017, 17:07
|||- - inventor   Цитата(jcxz @ Sep 20 2017, 19:52) Работод...   Sep 20 2017, 18:27
||- - VladislavS   Цитата(inventor @ Sep 20 2017, 14:15) во ...   Sep 20 2017, 12:35
||- - Obam   Цитата(inventor @ Sep 20 2017, 15:15) у и...   Sep 20 2017, 13:09
|- - inventor   Цитата(VladislavS @ Sep 20 2017, 12:12) З...   Sep 20 2017, 11:02
|- - VladislavS   Цитата(inventor @ Sep 20 2017, 14:02) щас...   Sep 20 2017, 11:07
- - inventor   ну вобщем разобрался последний вопрос: ЦитатаWarn...   Sep 20 2017, 13:50
- - VladislavS   Цитата(inventor @ Sep 20 2017, 16:50) в ч...   Sep 20 2017, 13:55
- - aaarrr   Цитата(inventor @ Sep 20 2017, 16:50) то ...   Sep 20 2017, 13:55
|- - inventor   Цитата(aaarrr @ Sep 20 2017, 16:55) Вы же...   Sep 20 2017, 14:00
|- - Forger   Цитата(inventor @ Sep 20 2017, 16:58) так...   Sep 20 2017, 14:06
|- - inventor   Цитата(Forger @ Sep 20 2017, 17:06) Назов...   Sep 20 2017, 14:26
|- - Forger   Цитата(inventor @ Sep 20 2017, 17:26) это...   Sep 20 2017, 14:34
- - Forger   Цитатато есть насколько это критично? В этом проек...   Sep 20 2017, 13:57
- - Obam   Цитата(inventor @ Sep 20 2017, 17:50) про...   Sep 20 2017, 19:41


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

 


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


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