|
|
  |
LPC1758 и RAM |
|
|
|
Sep 27 2012, 19:37
|
Участник

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

|
Здравствуйте, товарищи. Подскажите, пожалуйста, новичку такую вещь. Имеется, значит, контроллер LPC1758 с разделяемой встроенной ОЗУ 64 кбайта, и надо каким-то образом задействовать в программе как минимум 48 кбайт для глобального массива. При попытке откомпилить код с массивом такого размера выскакивают две ошибки с кодами L6406E и L6407E, указывающими о нехватке места. Среда разработки - Keil 4.54. В опциях таргета поставил галки напротив IRAM1 и IRAM2, указал адреса старта и размеры (по 32 кбайта). В чем может быть проблема?
|
|
|
|
|
Sep 28 2012, 07:04
|
Участник

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

|
Спасибо, помогло.
|
|
|
|
|
Oct 1 2012, 16:08
|

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

|
Цитата(SII @ Sep 27 2012, 23:47)  IRAM1 и IRAM2 будут разными регионами, даже если они вплотную примыкают друг к другу Проблема как раз в том, что между двумя областями памяти расположена "дырка". Если б её не было, можно было б объявить память одним регионом и спокойно использовать целиком. То, что физически эти два банка сидят на разных шинах, ни компилятору, ни программисту не видно. Спасибо фон Нейману  Кстати, вопрос в тему. Если я не пользуюсь DMA, с точки зрения производительности есть разница, в какой именно области памяти лежат данные? Вопрос именно по LPC17xx с его хитрый структурой шин - основной банк памяти подключен к ядру шинами D-bus, I-bus, "периферийные" (название - из "описательной" части даташита) - по шине system bus, на которой вдобавок вся периферия (через соотв. мосты).
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Oct 1 2012, 17:34
|

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

|
Цитата(esaulenka @ Oct 1 2012, 19:08)  То, что физически эти два банка сидят на разных шинах, ни компилятору, ни программисту не видно. Станет видно при попытке использовать BITBAND работу с битами :-), которая есть только в AHB-шном блоке. Цитата(esaulenka @ Oct 1 2012, 19:08)  Если я не пользуюсь DMA, с точки зрения производительности есть разница, в какой именно области памяти лежат данные? Вот до того, чтобы обращать внимание на производительность, я ещё не дошёл.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Oct 18 2012, 06:19
|
Участник

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

|
Люди добрые, есть еще один вопросец. В keil я создаю буфер разумных размеров (контроллер все тот же - LPC1758) и пытаюсь присвоить ему абсолютный адрес таким макаром: unsigned char buffer[BUF_LEN] __attribute__((at(0x10000000))); Компилятор выдает ошибку. Если указать адрес банка 0 или 1 аналогично, то все нормально. Чего делать-то?
|
|
|
|
|
Oct 18 2012, 06:59
|
Участник

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

|
Пробовал, не помогает. Даже если размер 1 указывать.
|
|
|
|
|
Oct 18 2012, 07:09
|

Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 18 2012, 07:34
|
Участник

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

|
В новом проекте нормульно все, действительно. Что ж тогда со старым делать?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|