Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR компилер
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
UraGun
Как сконфигурировать xcl файл на принудительное отключение внешней памяти ? Её нет в системе, но контроллер постоянно лезет с ней общаться, что приводит к появлению ненужных сигналов на линиях ALE и адресных выходах. (Работаю с АТМЕГА128) ? Ума не приложу....
unsure.gif
VladislavS
Используй стандартный cfgm128.xcl и усё будет ок.
UraGun
какая-то фантастика...
этот файл подключен... sad.gif
she
А у вас точно мега конфигурится XCL-файлом, а не диалогами? А то в опциях проекта->System->Enable external memory bus
KRS
Я думаю XCL файл здесь не причем.
просто в стартапе включается внешняя память
ALE будет дергаться даже если не будет происходить обращения к внешней шине. можно ее либо отключить потом
либо написать свой стартап

либо тщательно проверить все настройки проекта!
UraGun
Цитата(she @ Oct 12 2005, 18:31)
А у вас точно мега конфигурится XCL-файлом, а не диалогами? А то в опциях проекта->System->Enable external memory bus
*

Да, конечно smile.gif ух эту опцию я нашел smile.gif кроме того стоит и галочка там где спрашивается чем пользоваться, диалогом или файлом...
Может ли быть такое, что одна из подключенных библиотек (а их достаточно очень много) вытворяет эти обращения даже если xcl сконфигурирован правильно ?
UraGun
Цитата(KRS @ Oct 12 2005, 19:36)
Я думаю XCL файл здесь не причем.
просто в стартапе включается внешняя память
ALE будет дергаться даже если не будет происходить обращения к внешней шине. можно ее либо отключить потом
либо написать свой стартап

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

Нет, не может.
В перемещаемом коде библиотек нет прямого указания на то, какую память использовать. Это определяется линкером во время сборки проекта на основании файла *.xcl.
KRS
Цитата(UraGun @ Oct 13 2005, 09:50)
Цитата(KRS @ Oct 12 2005, 19:36)
Я думаю XCL файл здесь не причем.
просто в стартапе включается внешняя память
ALE будет дергаться даже если не будет происходить обращения к внешней шине. можно ее либо отключить потом
либо написать свой стартап

либо тщательно проверить все настройки проекта!
*
простите можно тут по подробнее ? что нужно принудительно сделать в стартапе или чего не делать ?
И ещё вопрос, наверняка его задавали уже тысячу раз, но есть ли у кого нибудь толковая документация на русском языке (или даже можно бестолковую но подробную ) на IAR для AVR ? Перекопал пол сети, нашел только в применении к 8051, а это несколько не то, что надо smile.gif
*



Для 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 в зависимости от проца
KRS
да выше забыл свой макрос
Код
// lda - load addr to Z, X, or Y pair
lda MACRO rPtr, Offset
    ldi \1L, LOW(Offset)
    ldi \1H, HIGH(Offset)
   ENDM
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.