Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ILINK: Размещение секций в два региона памяти
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
jcxz
Имеется довольно большой проект для LPC1754, в котором два несмежных региона RAM.
IAR 5.50.1.
Одного региона для размещения всех секций .bss программы не хватает. Пытаюсь заставить линкёр размещать в два региона, но что-то не получается.
Судя по документации два несмежных региона можно описать как:
define region RAM_region = mem:[from 0x10000000 size 0x4000] | mem:[from 0x2007C000 size 0x4000];
и потом:
place in RAM_region { rw, first block CSTACK, section .FRAM, block HEAP, section .bssStk };
Но не работает - линкёр выдаёт ошибку, что не может разместить в первую часть региона:
Error[Lp015]: committed sections in [0x10000000-0x10003fff] too large to fit -- code may need too many veneers
Почему он не пытается использовать вторую часть????

Если пытаться определить как 2 региона:
define region RAM_regionA = mem:[from 0x10000000 size 0x4000];
define region RAM_regionB = mem:[from 0x2007C000 size 0x4000];
то при попытке направить rw-секции в разные регионы:
place in RAM_regionA { rw, ... };
place in RAM_regionB { rw, ... };
Выдаётся сообщение об ошибке:
Error[Lc037]: ambiguous section match: "zi section .bss in ade.o" matches more than one pattern

Желания определять для каждой переменной свою отдельную секцию, отличную от .bss - нет, ибо это - криво.
Надо именно - размазать секцию .bss по двум регионам.
Типа как это просто и удобно делается в CCS от TI:
.bss : { *(.bss) } >> DARAM1 | DARAM2 | DARAM7

Неужто в IAR об этом не подумали?????
KRS
вообще должен класть в регионы с дырками, но часто писали о проблемах
смущает про veneers
Цитата(jcxz @ Dec 24 2012, 07:28) *
Error[Lp015]: committed sections in [0x10000000-0x10003fff] too large to fit -- code may need too many veneers

У вас там кодовые секции не затерялись? (рам код может быть)
map файл линкер генерит?
jcxz
Цитата(KRS @ Dec 24 2012, 13:13) *
У вас там кодовые секции не затерялись? (рам код может быть)
map файл линкер генерит?

Нет RAM-кода нету.
Вот как-то непонятно решилась проблема - если написать так:
define region RAM_region = mem:[from 0x10000000 size 0x4000] | mem:[from 0x2007C000 size 0x4000];
place in RAM_region { rw, first block CSTACK, section .bss, section .FRAM, section .bssStk, block HEAP };

то не влазит. По map-у вижу, что он почему-то в первую часть региона пихает больше, чем в она сама есть:
Код
  .bss                zero     0x10006514     0x1  solve.o [1]      
  .bss                zero     0x10006515     0x1  timeout.o [1]    
  .bss                zero     0x10006516     0x1  timeout.o [1]    
  .bss                zero     0x10006517     0x1  update.o [1]    
                             - 0x10006518  0x6518

Т.е. - почему-то не продолжает .bss который как раз идёт в конце первой части в новую часть, а лепит его в первую часть с переполнением.
Но если описать так:
define region RAM_region = mem:[from 0x10000000 size 0x4000] | mem:[from 0x2007C000 size 0x4000];
place in RAM_region { rw, first section .bss, block CSTACK, section .FRAM, section .bssStk, block HEAP };

(.bss переместить в начало региона), то начинает нормально линковать, и .bss переносит на 2-ю часть региона:
Код
  .bss                zero     0x1000333c     0xc  uart.o [1]      
  .bss                zero     0x10003348    0xcc  uart.o [1]      
  .bss                zero     0x10003414     0x1  update.o [1]    
                             - 0x10003415   0x759                  
                                                                    
"P2", part 3 of 3:                         0x3338                  
  .bss                zero     0x2007c000     0x4  ade.o [1]        
  .bss                zero     0x2007c004     0x4  ade.o [1]        
  .bss                zero     0x2007c008     0x4  ade.o [1]        
  .bss                zero     0x2007c00c   0xa14  comm.o [1]

Чудеса вобщем... smile3046.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.