Цитата(UraGun @ Oct 13 2005, 09:50)
Цитата(KRS @ Oct 12 2005, 19:36)
Я думаю XCL файл здесь не причем.
просто в стартапе включается внешняя память
ALE будет дергаться даже если не будет происходить обращения к внешней шине. можно ее либо отключить потом
либо написать свой стартап
либо тщательно проверить все настройки проекта!
простите можно тут по подробнее ? что нужно принудительно сделать в стартапе или чего не делать ?
И ещё вопрос, наверняка его задавали уже тысячу раз, но есть ли у кого нибудь толковая документация на русском языке (или даже можно бестолковую но подробную ) на IAR для AVR ? Перекопал пол сети, нашел только в применении к 8051, а это несколько не то, что надо

Для IAR AVR cstartup должен проинициализировать оба стека (возвратов и данных) обнулить сегменты xxx_Z и скопировать xxx_ID в xxx_I
обычно таких сегментов по 1 и нсделать 0->NEAR_Z и NEAR_ID->NEAR_I
есть еще служебный сегмент INIT_TAB где находится таблица адресов сегментов для инициализации, но ее можно выкинуть!
ссылки на сагмент INITTAB идут через специфическую директиву PUBWEAK
и елси такие метки будут где нибудь PUBLIC то сегмента INITTAB не будет
я использую примерно такой стартап
подходит для использования в устройсвах меньше 64 кб флеша если больше надо править для модели тини тоже править (названия сегментов другие да и длина уже макимум байт)
Код
#include <macros.m90>
//segments uses for initialization
RSEG CSTACK:DATA:NOROOT(0)
RSEG RSTACK:DATA:NOROOT(0)
RSEG NEAR_Z:DATA:NOROOT(0)
RSEG NEAR_I:DATA:NOROOT(0)
RSEG NEAR_ID:DATA:NOROOT(1)
//reset vector
COMMON INTVEC:CODE:ROOT(1); Align at an even address
ORG $0
XJMP ?C_STARTUP
RSEG CODE:CODE:ROOT(1)
?C_STARTUP:
//здесь я обычно инициализирую порты и т.д.
//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
//Return address stack (hardware stack) & software stack (Y)
RSEG STARTUPCODE:CODE:ROOT(1)
LDI R17,LOW(SFE(RSTACK)-1)
OUT SPL,R17
LDI R17,HIGH(SFE(RSTACK)-1)
OUT SPH,R17
LDI YL,LOW(SFE(CSTACK)-1)
LDI YH,HIGH(SFE(CSTACK)-1)
EXTERN main
XJMP main
END
Здесь хитрые метки `?<Segment init: NEAR_I>` придумал IAR здесь они используются что бы подавить создание INITTAB
да и если эти сегменты не используются линкер выкенет этот код
XJMP - макрос преобразуется в jmp или rjmp в зависимости от проца