реклама на сайте
подробности

 
 
> IAR компилер, Как принудительно отключить внешнее ОЗУ
UraGun
сообщение Oct 11 2005, 14:37
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 11-10-05
Из: Запорожье
Пользователь №: 9 516



Как сконфигурировать xcl файл на принудительное отключение внешней памяти ? Её нет в системе, но контроллер постоянно лезет с ней общаться, что приводит к появлению ненужных сигналов на линиях ALE и адресных выходах. (Работаю с АТМЕГА128) ? Ума не приложу....
unsure.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Oct 12 2005, 16:36
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Я думаю XCL файл здесь не причем.
просто в стартапе включается внешняя память
ALE будет дергаться даже если не будет происходить обращения к внешней шине. можно ее либо отключить потом
либо написать свой стартап

либо тщательно проверить все настройки проекта!
Go to the top of the page
 
+Quote Post
UraGun
сообщение Oct 13 2005, 06:50
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 11-10-05
Из: Запорожье
Пользователь №: 9 516



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

либо тщательно проверить все настройки проекта!
*
простите можно тут по подробнее ? что нужно принудительно сделать в стартапе или чего не делать ?
И ещё вопрос, наверняка его задавали уже тысячу раз, но есть ли у кого нибудь толковая документация на русском языке (или даже можно бестолковую но подробную ) на IAR для AVR ? Перекопал пол сети, нашел только в применении к 8051, а это несколько не то, что надо smile.gif
Go to the top of the page
 
+Quote Post
KRS
сообщение Oct 13 2005, 08:32
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(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 в зависимости от проца
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 04:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016