Цитата(SpiritDance @ Jul 3 2007, 11:16)


Помогло.
Выглядит как шаманское заклинание. Можно чуть подробнее о том что здесь написано? Я подозреваю что это определение для сегмента code_i в модуле.
У IAR есть магическое слово PUBWEAK
это аналог PUBLIС, за исключением того, что если присутсвует несколько меток с одинаковым названием линкер выберет на свое усмотрение одну и не будет конфликта ( поэтому код должен быть одинаков)
кусок
Код
PUBWEAK ?init?tab?CODE_I
RSEG INITTAB:CODE:ROOT(2)
DATA
?init?tab?CODE_I:
DCD sfe(CODE_I) - sfb(CODE_I), sfb(CODE_I), sfb(CODE_ID)
как раз вставляется во все файлы где есть __ramfunc, он везде одинаков и добавляет в сегмент INITTAB описание куда копировать CODE_ID
зачем используется
Код
PUBWEAK `?*?CODE_ID`
RSEG CODE_ID:CODE:NOROOT(2)
`?*?CODE_ID`:
я не разбирался
Кстати есть еще одня фича - если есть много PUBWEAK и один PUBLIC, то линкер выберет PUBLIC, я это использовал в своем stratup для AVR и линкер вообще убирал сегмент INITTAB
примерно так
Код
//NEAR_Z initialization
RSEG STARTUPCODE:CODE:NOROOT(1)
PUBLIC `?<Segment init: NEAR_Z>`
`?<Segment init: NEAR_Z>`:
lda Z, SFB(NEAR_Z)
lda X, SIZEOF(NEAR_Z)
clr r16
filloop:
st Z+, r16
sbiw XL, 1
brne filloop
//NEAR_I initialization
RSEG STARTUPCODE:CODE:NOROOT(1)
PUBLIC `?<Segment init: NEAR_I>`
`?<Segment init: NEAR_I>`:
lda Z, SFB(NEAR_ID)
lda Y, SFB(NEAR_I)
lda X, SIZEOF(NEAR_I)
moveloop:
lpm r0, Z+
st Y+, r0
sbiw XL, 1
brne moveloop
Причем если нет сегмента NEAR_Z или NEAR_I то соотв. участок кода выкидывается поэтому не надо проверять длину сегмента на 0 если код включатся значит копировтаь надо больше 0 байт!!.
(lda - макрос для загрузки парного регистра)
К сожалению в ARM сегмент INITA_TAB можно выкинуть, но вот определить естть ли сегменты NEAR_Z или NEAR_I не получатся, у них по другому генерятся директивы компилятором, поэтому надо проверять длину на 0 и оба куска кода всегда будут.
Цитата(SpiritDance @ Jul 3 2007, 11:16)

Вот только откуда выдран этот кусок кода? Я, вроде, в листингах такого не встречал.
Надо смотреть не листинг!!! а файлы asm (поставить опцию гененрировать asm файлы)