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