ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
301712 Топик полностью
Codavr (25.01.2012 13:36, просмотров: 261) ответил MegaJohn на Кэп, вы говорите очевидные вещи =) Только вот стартап в иаре от пользователя скрыт, могу в void main( void ) добавить типо memset( CSTACK_START - CSTACK_SIZE, 0xCC, CSTACK_SIZE ) но блин и эти N неизвестны
Не знаю как в последних иарах, а раньше всегда был cstartup.s90  
;----------------------------------------------------------------------------
;
;   This module contains the AVR C and EC++ startup
;   routine and must usually be tailored to suit
;   customer's hardware.
;
;   File version:   $Revision: 1.8 $
;
;----------------------------------------------------------------------------
#include    "macros.m90"

;----------------------------------------------------------------------------
; Set up the INTVEC segment with a reset vector     
;----------------------------------------------------------------------------
        NAME    ?RESET

    COMMON  INTVEC:CODE:ROOT(1) ; Align at an even address

        EXTERN  ?C_STARTUP

    ORG $0
    XJMP    ?C_STARTUP

        ENDMOD

;----------------------------------------------------------------------------
; Forward declarations of segments used in initialization
;----------------------------------------------------------------------------
    RSEG    CSTACK:DATA:NOROOT(0)
    RSEG    RSTACK:DATA:NOROOT(0)

;----------------------------------------------------------------------------
; Perform C initialization
;----------------------------------------------------------------------------
    MODULE  ?C_STARTUP

    EXTERN  __low_level_init
    EXTERN  __segment_init
#ifdef _ECLIB
    EXTERN  __call_ctors
#endif /* _ECLIB */
    EXTERN  main
    EXTERN  exit
    EXTERN  _exit

;----------------------------------------------------------------------------
; If the return address stack is located in external SRAM, make sure that
; you have uncommented the correct code in __low_level_init!!!
;----------------------------------------------------------------------------
    RSEG    CODE:CODE:NOROOT(1)
    PUBLIC  ?C_STARTUP
    PUBLIC  __RESTART

__RESTART:
?C_STARTUP:
    REQUIRE ?SETUP_STACK

    RSEG    CODE:CODE:NOROOT(1)
    PUBLIC  __RSTACK_in_external_ram

__RSTACK_in_external_ram:
    LDI     R16,0xC0
    OUT     0x35,R16    ;Enable the external SRAM with a wait state

;----------------------------------------------------------------------------
; Set up the CSTACK and RSTACK pointers.
;----------------------------------------------------------------------------
    RSEG    CODE:CODE:NOROOT(1)
?SETUP_STACK:
    ;; Return address stack (RSTACK)
    LDI R16,LOW(SFE(RSTACK)-1)
    OUT 0x3D,R16
#if A90_POINTER_REG_SIZE > 1
    LDI R16,HIGH(SFE(RSTACK)-1)
    OUT 0x3E,R16
#endif

    ;; Data stack (CSTACK)
    LDI Y0,LOW(SFE(CSTACK))
#if A90_POINTER_REG_SIZE > 1
#if MEMORY_MODEL == TINY_MEMORY_MODEL
    LDI Y1,0
#else
    LDI Y1,HIGH(SFE(CSTACK))
#endif  
#if A90_POINTER_REG_SIZE > 2
    LDI Z0,HWRD(SFB(CSTACK))
    OUT     RAMPY,Z0
#endif
#endif

#if A90_POINTER_REG_SIZE > 2
    PUBLIC  ?zero_reg_initialization

?zero_reg_initialization:
    CLR R15
    OUT RAMPD,R15
#else
    REQUIRE ?call_low_level_init

;----------------------------------------------------------------------------
; Clear R15 so that it can be used as zero register by the code generator.
; The compiler will emit a "REQUIRE ?zero_reg_initialization" statement if
; this optimization has been enabled.
;----------------------------------------------------------------------------
    RSEG    CODE:CODE:NOROOT(1)
    PUBLIC  ?zero_reg_initialization

?zero_reg_initialization:
    CLR R15

;----------------------------------------------------------------------------
; Call __low_level_init to do low level initializatons. Modify the supplied
; __low_level_init module to add your own initialization code or to
; remove segment initialization (by returning 0).
;----------------------------------------------------------------------------
    RSEG    CODE:CODE:NOROOT(1)
#endif
    PUBLIC  ?call_low_level_init

?call_low_level_init:
    XCALL   __low_level_init

    REQUIRE ?cstartup_call_main

;----------------------------------------------------------------------------
; Call __segment_init to initialize segments.
;----------------------------------------------------------------------------
    RSEG    CODE:CODE:NOROOT(1)
    PUBLIC  ?need_segment_init

?need_segment_init:
    TST P0
    BREQ    ?skip_segment_init
    XCALL   __segment_init
?skip_segment_init:

;----------------------------------------------------------------------------
;   Call the constructors of all global objects. This code will only
;   be used if any EC++ modules defines global objects that need to
;   have its constructor called before main.
;----------------------------------------------------------------------------
#ifdef _ECLIB
    RSEG    DIFUNCT:CODE:NOROOT(0)
    RSEG    CODE:CODE:NOROOT(1)

    PUBLIC  ?call_ctors

?call_ctors:
#ifdef __HAS_ELPM__
    LDI P0,LOW(SFB(DIFUNCT))
    LDI P1,LOW(SFB(DIFUNCT) >> 8)
    LDI P2,SFB(DIFUNCT) >> 16

    LDI Q0,LOW(SFE(DIFUNCT))
    LDI Q1,LOW(SFE(DIFUNCT) >> 8)
    LDI Q2,SFE(DIFUNCT) >> 16
#else
    LDI P0,LOW(SFB(DIFUNCT))
    LDI P1,SFB(DIFUNCT) >> 8

    LDI P2,LOW(SFE(DIFUNCT))
    LDI P3,SFE(DIFUNCT) >> 8
#endif

    XCALL   __call_ctors
#endif /* _ECLIB */

;----------------------------------------------------------------------------
;   Call main
;----------------------------------------------------------------------------
    RSEG    CODE:CODE:NOROOT(1)

    PUBLIC  ?cstartup_call_main

?cstartup_call_main:
    XCALL   main
    XCALL   exit
    XJMP    _exit

    END

;----------------------------------------------------------------------------
;  $Log: cstartup.s90 $
;  Revision 1.8  2003/11/07 16:34:04Z  IPEO
;  Revision 1.7  2003/09/04 13:48:25Z  IPEO
;  Revision 1.6  2003/08/22 14:09:09Z  IPEO
;  Revision 1.5  2003/08/22 08:54:09Z  IPEO
;  Revision 1.4  2003/08/20 08:38:55Z  IPEO

Долой империалистический интернационал!