start.s

来自「RTEMS (Real-Time Executive for Multiproc」· S 代码 · 共 155 行

S
155
字号
/*  entry.s * *  This file contains the entry point for the application. *  The name of this entry point is compiler dependent. *  It jumps to the BSP which is responsible for performing *  all initialization. * *  COPYRIGHT (c) 1989-1999. *  On-Line Applications Research Corporation (OAR). * *  The license and distribution terms for this file may be *  found in the file LICENSE in this distribution or at *  http://www.rtems.com/license/LICENSE. * *  $Id: start.S,v 1.6.6.1 2003/09/04 18:44:45 joel Exp $ */#include "asm.h"#if (M68K_COLDFIRE_ARCH == 0) /* All ColdFire BSPs must provide their own start vector */BEGIN_CODE                                        | Default entry points for:         PUBLIC (start)                 |   GNU         PUBLIC (M68Kvec)               |   Vector TableSYM (start):SYM (M68Kvec):                          | standard location for vectors        nop                             | for linkers with problem                                        | location zero        jmp      SYM (start_around)     /*      *  We can use the following space as our vector table      *  if the CPU has a VBR or we can save vector table in it      *  if the CPU does not.      */        .space   4088                   | to avoid initial intr stack                                        |   from 135BUG on MVME13?                                        |   and start code at 0x4000SYM (vectors):        .space   1016                   | reserve space for rest of vectors#if ( M68K_HAS_SEPARATE_STACKS == 1 )SYM (lowintstack):        .space   4092                   | reserve for interrupt stackSYM (hiintstack):        .space   4                      | end of interrupt stack#endif	PUBLIC (start_around)SYM (start_around):        move.w  sr, SYM (initial_sr)        oriw    #0x3700,sr              | SUPV MODE,INTERRUPTS OFF!!!#if ( M68K_HAS_SEPARATE_STACKS == 1 )        movec   isp,a0        move.l  a0, SYM (initial_isp)        movec   usp,a0        move.l  a0, SYM (initial_usp)        movec   msp,a0        move.l  a0, SYM (initial_msp)#else        move.l  a7, SYM (initial_msp)#endif        |        | zero out uninitialized data area        |zerobss:        moveal  # SYM (_clear_end),a0     | find end of .bss        moveal  # SYM (_clear_start),a1   | find beginning of .bss        movel   #0,d0loop:   movel   #0,a1@+                 | to zero out uninitialized        cmpal   a0,a1        jlt     loop                    | loop until _end reached        movel   # SYM (_stack_init),d0  | d0 = stop of stack        movw    #0x3700,sr              | SUPV MODE,INTERRUPTS OFF!!!        movel   d0,a7                   | set master stack pointer        movel   d0,a6                   | set base pointer      /*       *  RTEMS should maintain a separate interrupt stack on CPUs       *  without one in hardware.  This is currently not supported       *  on versions of the m68k without a HW intr stack.       */#if ( M68K_HAS_SEPARATE_STACKS == 1 )        lea     SYM (hiintstack),a0   | a0 = high end of intr stack        movec   a0,isp                | set interrupt stack#endif        pea	env                   | push environp        pea	arg                   | push argv        movel   #0,a7@-               | push argc        jsr     SYM (boot_card)        addl    #12,a7#if ( M68K_HAS_SEPARATE_STACKS == 1 )        move.l  SYM (initial_isp),a0        movec   a0,isp        move.l  SYM (initial_usp),a0        movec   a0,usp        move.l  SYM (initial_msp),a0        movec   a0,msp#else        movea.l SYM (initial_msp),a7#endif        move.w  SYM (initial_sr),sr        rtsEND_CODEBEGIN_DATA	PUBLIC (environ)        .align 2SYM (environ):	.long	env	PUBLIC (start_frame)SYM (start_frame):        .space  4,0END_DATABEGIN_BSSenv: .long  0arg: .long  0	PUBLIC (initial_isp)SYM (initial_isp):        .space  4	PUBLIC (initial_msp)SYM (initial_msp):        .space  4	PUBLIC (initial_usp)SYM (initial_usp):        .space  4         PUBLIC (initial_sr)SYM (initial_sr):        .space  2END_DATA#endifEND

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?