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

 
 
> как разместить массив 32кБ в SRAM, AT91SAM3U4E {IAR}
*rust*
сообщение Mar 21 2011, 07:43
Сообщение #1


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



Добрый день, господа!

Среда IAR, проц. AT91SAM3U4E. Пытаюсь создать массив 32кБ (unsigned char). Пишет, что места нет, хотя проект пустой. AT91SAM3U4E содержит всего 52кБ в двух SRAM.
Пытался создать два массива по 16кБ, подумав что компилятор не может разместить целый массив 32кБ сразу в двух SRAM, но все повторилось, пишет нет места.
Error[Lp011]: section placement failed: unable to allocate space for sections/blocks with a total estimated minimum size of 0x8c0c bytes in
<[0x20080000-0x20083fff]> (total uncommitted space 0x4000).
Needed:
[0x20080000-0x20083fff]: 0x8c0c minimum (size: 0x4000)

Как решить этот вопрос?

Может вопрос не совсем по адресу и мне нужно на ветку с IAR, тогда прошу уважаемых модераторов перекинуть топик туда.

Спасибо!

Сообщение отредактировал IgorKossak - Mar 21 2011, 08:47
Причина редактирования: Перенёс
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
*rust*
сообщение Mar 23 2011, 07:42
Сообщение #2


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



Подумав, пришел к выводу, что должен существовать способ размещения 32кБ в SRAM.

1. разместить 32кБ полностью в SRAM0,
2. разместить по 16кБ в SRAM0 и SRAM1.

По первому пункту компилятор должен резервировать всю память SRAM0 для массива, а все остальные используемые переменные размещать в SRAM1 и SRAM(NFC).

По второму каким-то образом разместить массивы по 16кБ в SRAM0 и SRAM1.

Не один из вариантов у меня пока не получается.

В документации на линкер иара я нашел как разместить по опред. адресу данные, но из-за недостаточных знаний компилятора не могу прикрутить этот код.

Код
.//In the linker configuration file, it can look like this:
define block TempStorage with size = 0x1000, alignment = 4 { };
place in RAM { block TempStorage };
//To retrieve the start of the allocated memory from the application, the source code could
//look like this:
/* Declares a section */
#pragma section = "TempStorage"
char *TempStorage()
{
  /* Return start address of section TempStorage. */
  return __section_begin("TempStorage");
}


Что писать, куда писать, на что смотреть - не понятно.
Извините, если это все очевидно.
Go to the top of the page
 
+Quote Post



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

 


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


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