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

 
 
 
Reply to this topicStart new topic
> LPC1758 и RAM
Тапочек
сообщение Sep 27 2012, 19:37
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-04-10
Пользователь №: 56 542



Здравствуйте, товарищи.
Подскажите, пожалуйста, новичку такую вещь. Имеется, значит, контроллер LPC1758 с разделяемой встроенной ОЗУ 64 кбайта, и надо каким-то образом задействовать в программе как минимум 48 кбайт для глобального массива. При попытке откомпилить код с массивом такого размера выскакивают две ошибки с кодами L6406E и L6407E, указывающими о нехватке места. Среда разработки - Keil 4.54. В опциях таргета поставил галки напротив IRAM1 и IRAM2, указал адреса старта и размеры (по 32 кбайта). В чем может быть проблема?
Go to the top of the page
 
+Quote Post
SII
сообщение Sep 27 2012, 19:47
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Может, в том, что ему нужна непрерывная область достаточного размера, относящаяся к одному региону памяти (IRAM1 и IRAM2 будут разными регионами, даже если они вплотную примыкают друг к другу).
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 27 2012, 20:40
Сообщение #3


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

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



Цитата(Тапочек @ Sep 27 2012, 23:37) *
...

SII указал причину проблемы. Вы внимательно прочитайте, начиная с первой страницы, описание конироллера (/LPC1759_58_56_54_52_51), где сказано о распределении областей памяти. Далее раздел 7 стоит изучить.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Тапочек
сообщение Sep 28 2012, 07:04
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-04-10
Пользователь №: 56 542



Спасибо, помогло.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Oct 1 2012, 16:08
Сообщение #5


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(SII @ Sep 27 2012, 23:47) *
IRAM1 и IRAM2 будут разными регионами, даже если они вплотную примыкают друг к другу

Проблема как раз в том, что между двумя областями памяти расположена "дырка".
Если б её не было, можно было б объявить память одним регионом и спокойно использовать целиком. То, что физически эти два банка сидят на разных шинах, ни компилятору, ни программисту не видно. Спасибо фон Нейману sm.gif

Кстати, вопрос в тему. Если я не пользуюсь DMA, с точки зрения производительности есть разница, в какой именно области памяти лежат данные?

Вопрос именно по LPC17xx с его хитрый структурой шин - основной банк памяти подключен к ядру шинами D-bus, I-bus, "периферийные" (название - из "описательной" части даташита) - по шине system bus, на которой вдобавок вся периферия (через соотв. мосты).


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
ReAl
сообщение Oct 1 2012, 17:34
Сообщение #6


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(esaulenka @ Oct 1 2012, 19:08) *
То, что физически эти два банка сидят на разных шинах, ни компилятору, ни программисту не видно.
Станет видно при попытке использовать BITBAND работу с битами :-), которая есть только в AHB-шном блоке.

Цитата(esaulenka @ Oct 1 2012, 19:08) *
Если я не пользуюсь DMA, с точки зрения производительности есть разница, в какой именно области памяти лежат данные?
Вот до того, чтобы обращать внимание на производительность, я ещё не дошёл.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Тапочек
сообщение Oct 18 2012, 06:19
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-04-10
Пользователь №: 56 542



Люди добрые, есть еще один вопросец. В keil я создаю буфер разумных размеров (контроллер все тот же - LPC1758) и пытаюсь присвоить ему абсолютный адрес таким макаром:
unsigned char buffer[BUF_LEN] __attribute__((at(0x10000000)));
Компилятор выдает ошибку. Если указать адрес банка 0 или 1 аналогично, то все нормально. Чего делать-то?
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Oct 18 2012, 06:56
Сообщение #8


Местный
***

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



Уменьшать BUF_LEN sm.gif
Go to the top of the page
 
+Quote Post
Тапочек
сообщение Oct 18 2012, 06:59
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-04-10
Пользователь №: 56 542



Пробовал, не помогает. Даже если размер 1 указывать.
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Oct 18 2012, 07:09
Сообщение #10


Местный
***

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



Попробуйте создать новый проект.
У меня вот это
CODE
// main.c
#include <lpc17xx.h>
#define BUF_LEN 30000

unsigned char buffer[BUF_LEN] __attribute__((at(0x10000000)));

int main(void)
{
int i;

for ( i = 0; i < BUF_LEN; i++ )
{
buffer[i] = LPC_UART0->RBR;
}
return 0;
}


выдаёт
CODE
Build target 'Target 1'
assembling startup_LPC17xx.s...
compiling main.c...
linking...
Program Size: Code=368 RO-data=400 RW-data=0 ZI-data=30608
"test1758.axf" - 0 Error(s), 0 Warning(s).


uVision V4.20.03.0
Go to the top of the page
 
+Quote Post
Тапочек
сообщение Oct 18 2012, 07:34
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-04-10
Пользователь №: 56 542



В новом проекте нормульно все, действительно. Что ж тогда со старым делать?
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Oct 18 2012, 08:10
Сообщение #12


Местный
***

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



Перенести исходники в новый проект. Старый закопать. Как-то так sm.gif
Go to the top of the page
 
+Quote Post

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

 


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


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