Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ошибки в компиляции в EWARM 5.20
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
buba
Привет всем!

Работаю с LPC. Пытаюсь выделить сектор или блок для переменной (на неё есть ссылка в неперезаписываемой ROM) в памяти RAM, адрес которой 0x400047e3, выделяю даже несколько десятков байт как массив. Но в ответ от компилятора получаю ошибку:
Error[Lp011]: section placement failed: unable to place sections/blocks with a total estimated minimum size of 0x20 bytes in
<[mem:0x4000-mem:0x40ff]> (total uncommitted space 0xe0)

Пробовал: do not initialize { section DUMMY_SEC };
- не помогает.


Когда же пытаюсь выделить отдельный регион (типа RAM2_region) для моей переменной:
define region RAM2_region = mem:[from 0x40004700 to 0x400047FF];
...
place in RAM2_region { readwrite section DUMMY_SEC };

и при этом объединить основной регион через Merging different areas into one region:
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to 0x400046FF]
- [from 0x40004800 to __ICFEDIT_region_RAM_end__];

то ругается ошибкой: Error[Lc003]: expected ]


Как правильно выделить память для моей переменной по необходимому мне адресу, чтоб компулятор не ругался?
Уже думаю искать новую версию EWARM. Может у кого-н есть патч к версии 5.20?
bseyur
Во-первых, это ругается не компилятор, а линкер...
Конкретно вот эта ошибка:
Цитата(buba @ Apr 1 2010, 16:10) *
Error[Lp011]: section placement failed: unable to place sections/blocks with a total estimated minimum size of 0x20 bytes in
<[mem:0x4000-mem:0x40ff]> (total uncommitted space 0xe0)

указывает на то, что область памяти уже чем-то занята.

Для примера. Размещение ячейки CRP по заданному адресу:

define symbol CRPCELL_ADDRESS = 0x000002FC;
......
place at address mem:CRPCELL_ADDRESS { readonly section CODEREADPROT_CELL };
buba
Цитата(bseyur @ Apr 2 2010, 07:41) *
указывает на то, что область памяти уже чем-то занята.


Да, так и есть. В этом и трудность. Я хочу жестко присвоить адрес в RAM для моей переменной, несмотря на то что адрес перекрывается остальной совокупностью переменных. Как этого добиться с помощью секторов я пока не знаю.
Возможно приемлемо решение, когда переменным присваивается адрес в памяти по ходу их объявления в коде. Тогда новые переменные будут добавляться в конец области данных RAM. На данный момент компилятор сортирует их в памяти по размеру.
bseyur
Вручную распределить множество переменных на два сектора. Один сектор разместить до адреса X, второй - после адреса X, а между ними - ячейка с искомой переменной. И все.
zltigo
Цитата(buba @ Apr 2 2010, 07:53) *
Я хочу жестко присвоить адрес в RAM для моей переменной, несмотря...

О линкере Вам уже рассказали. Степень уродства в таком подходе к делу, Вы по крайней мере на шкуре, должны были понять... Осталось рассказать ЗАЧЕМ?! все это?
buba
Цитата(zltigo @ Apr 2 2010, 14:28) *
О линкере Вам уже рассказали. Степень уродства в таком подходе к делу, Вы по крайней мере на шкуре, должны были понять... Осталось рассказать ЗАЧЕМ?! все это?


Степень уродства я понимаю. Устройство само по себе готово и стоит уже у заказчика, и платы вернуть проблематично, хотя обновлять прошивку необходимо. А в загрузочном коде (неперезаписываемая область памяти LPC) есть ссылка на переменную по адресу о котором я писал (my fault). Поэтому я хотел забронировать этот адрес, чтобы на его месте не появлялась левая переменная, которая будет пороться при добавлении новых переменных в проекте.

Спасибо bseyur! Я о вашей идее уже думал, но не хотел трогать остальные переменные smile.gif Этот вариант годится, хотя он кривоват.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.