Перейти к содержанию
    

ILINK: Размещение секций в два региона памяти

Имеется довольно большой проект для 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 об этом не подумали?????

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вообще должен класть в регионы с дырками, но часто писали о проблемах

смущает про veneers

Error[Lp015]: committed sections in [0x10000000-0x10003fff] too large to fit -- code may need too many veneers

У вас там кодовые секции не затерялись? (рам код может быть)

map файл линкер генерит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас там кодовые секции не затерялись? (рам код может быть)

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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...