zoukankan      html  css  js  c++  java
  • IAR EWARM __iar_program_start, __iar_data_init3, __iar_copy_init3, __iar_zero_init3

    #include <stdint.h>
    
    // The type of a pointer into the init table.
    typedef void const * table_ptr_t;
    
    // The type of an initialization routine. It takes a pointer to the start of
    // its entry (after the function pointer) in the init table and returns a
    // pointer to after its entry.
    typedef table_ptr_t init_fun_t( table_ptr_t );
    
    typedef struct
    {
      int32_t mOff;
    } FAddr;
    
    __no_init uint32_t __iar_SB @ r9;
    
    uint32_t const * __iar_zero_init3( uint32_t const * p )
    {
      uint32_t size;
      while ( ( size = *p++ ) != 0 )
      {
        uint32_t d = *p++;
        uint32_t * dest;
    
        if ( d & 1 )
        {
          d -= 1;
          d += __iar_SB;
        }
    
        dest = (uint32_t*) d;
    
        do
        {
          *dest++ = 0;
          size -= 4;
        }while ( size != 0 );
      }
      return p;
    }
    
    uint32_t const * __iar_copy_init3( uint32_t const * p )
    {
      uint32_t size;
      while ( ( size = *p++ ) != 0 )
      {
        uint32_t const * src;
        uint32_t d;
        uint32_t * dest;
    
        src = (uint32_t *) ( (char const *) p + *(int32_t *) p );
        p++;
    
        d = *p++;
    
        if ( d & 1 )
        {
          d -= 1;
          d += __iar_SB;
        }
    
        dest = (uint32_t *) d;
    
        do
        {
          *dest++ = *src++;
          size -= 4;
        }while ( size != 0 );
      }
      return p;
    }
    
    #pragma section = "Region$$Table"
    void __iar_data_init3( void )
    {
      FAddr const * pi = __section_begin("Region$$Table");
      table_ptr_t pe = __section_end ("Region$$Table");
      while ( pi != pe )
      {
        init_fun_t * fun = (init_fun_t *) ( (uint32_t) pi + pi->mOff );
        ++pi;
        pi = fun( pi );
      }
    }
    Mode_USR  EQU     0x10
    Mode_FIQ  EQU     0x11
    Mode_IRQ  EQU     0x12
    Mode_SVC  EQU     0x13
    Mode_ABT  EQU     0x17
    Mode_UND  EQU     0x1B
    Mode_SYS  EQU     0x1F ; available on ARM Arch 4 and later
    
    I_Bit     EQU     0x80 ; when I bit is set, IRQ is disabled
    F_Bit     EQU     0x40 ; when F bit is set, FIQ is disabled
    
    __iar_program_start
              MSR     CPSR_c, #Mode_SYS|F_Bit|I_Bit
              ldr     sp,=SFE(CSTACK)     ; End of CSTACK(user)
              BL      __iar_data_init3
              BL      main
              B       .
  • 相关阅读:
    Powershell数据处理
    Powershell About Active Directory Group Membership of a domain user
    Powershell About Active Directory Server
    Oracle Schema Objects——Tables——TableStorage
    Oracle Schema Objects——Tables——TableType
    English Grammar
    Oracle Database Documentation
    Oracle Schema Objects——Tables——Oracle Data Types
    Oracle Schema Objects——Tables——Overview of Tables
    What is Grammar?
  • 原文地址:https://www.cnblogs.com/shangdawei/p/4593668.html
Copyright © 2011-2022 走看看