打印

LPC2300的启动代码摸过以后就不能用了

[复制链接]
2701|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pigeon0411|  楼主 | 2009-8-18 16:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pigeon0411 于 2009-8-18 16:51 编辑

一件很郁闷又奇怪的事: 在KEIL中调试LPC2300的板子时,将启动代码中多加了一句引入函数的语句:IMPORT main,重新编译后,程序竟然不能正常运行了。 于是将刚加的那句又删除掉,重新编译,结果还是不能正常运行。 我用事先备份好的正常程序,用同样的方法,先加IMPORT main,就不能运行了,删除后,一样不能运行。 不知道是怎么回事,难道她知道我摸过她了,就不让再用了? 下面是启动代码:

;******************************************************************************
;
;                               STARTUP CODE
;                                  LPC2378
;                             KEIL's uVision3
;                   (RealView Microprocessor Developer Kit)
;
; Filename      : init.s
;******************************************************************************
                PRESERVE8
                AREA   INIT, CODE, READONLY                     ; Name this block of code                                   ;
                ARM
;******************************************************************************
;                                  IMPORTS
;******************************************************************************
                 IMPORT  main  ;就是在这行加了这句,然后再删除掉,竟然就不能运行了。              
                IMPORT  __main
                IMPORT  ||Image$$ARM_LIB_STACK$$ZI$$Limit||     ; Import stack limit from scatter-loading file              ;
;******************************************************************************
;                                  EXPORTS
;******************************************************************************
                EXPORT  ResetHndlr
;******************************************************************************
;                                DEFINITIONS
;******************************************************************************
MODE_BITS     EQU     0x1F  ; Bit mask for mode bits in CPSR
USR_MODE     EQU     0x10  ; User mode
FIQ_MODE     EQU  0x11  ; Fast Interrupt Request mode
IRQ_MODE     EQU     0x12  ; Interrupt Request mode
SVC_MODE     EQU     0x13  ; Supervisor mode
ABT_MODE     EQU     0x17  ; Abort mode
UND_MODE     EQU     0x1B  ; Undefined Instruction mode
SYS_MODE        EQU  0x1F  ; System mode

I_BIT           EQU     0x80
F_BIT           EQU     0x40
                                                           ; Define stack sizes                                        ;
IRQ_STK_SIZE    EQU     0x00000200
FIQ_STK_SIZE    EQU     0x00000100
SVC_STK_SIZE    EQU     0x00000200
ABT_STK_SIZE    EQU     0x00000200
UND_STK_SIZE    EQU     0x00000200
SYS_STK_SIZE    EQU     0x00000200
MEMMAP          EQU     0xE01FC040
                                                          ; Define stack pointers                                     ;
;******************************************************************************
;                             PERFORM ROM/RAM REMAPPING
;******************************************************************************               
                ENTRY
ResetHndlr      
                                                           ; If interrupt vectors in RAM, then perform remap           ;
                IF :DEF: REMAP
               
                ldr     r0, =MEMMAP
                mov     r1, #2
                str     r1, [r0]
               
                ENDIF
;******************************************************************************
;                              SETUP STACK POINTERS
;******************************************************************************
               
                ldr     r1, =||Image$$ARM_LIB_STACK$$ZI$$Limit||
               
                mrs     r0,cpsr                             ; Original PSR value                                        ;
                bic     r0,r0,#MODE_BITS                    ; Clear the mode bits                                       ;
                orr     r0,r0,#IRQ_MODE                     ; Set IRQ mode bits                                         ;
                msr     cpsr_c,r0                           ; Change the mode                                           ;
                mov     sp, r1
                sub     r1, r1, #IRQ_STK_SIZE
               
                mrs     r0,cpsr                             ; Original PSR value                                        ;
                bic     r0,r0,#MODE_BITS                    ; Clear the mode bits                                       ;
                orr     r0,r0,#ABT_MODE                     ; Set IRQ mode bits                                         ;
                msr     cpsr_c,r0                           ; Change the mode                                           ;
                mov     sp, r1
                sub     r1, r1, #ABT_STK_SIZE
               
                mrs     r0,cpsr                             ; Original PSR value                                        ;
                bic     r0,r0,#MODE_BITS                    ; Clear the mode bits                                       ;
                orr     r0,r0,#UND_MODE                     ; Set IRQ mode bits                                         ;
                msr     cpsr_c,r0                           ; Change the mode                                           ;
                mov     sp, r1
                sub     r1, r1, #UND_STK_SIZE
                mrs     r0,cpsr                             ; Original PSR value                                        ;
                bic     r0,r0,#MODE_BITS                    ; Clear the mode bits                                       ;
                orr     r0,r0,#FIQ_MODE                     ; Set IRQ mode bits                                         ;
                msr     cpsr_c,r0                           ; Change the mode                                           ;
                mov     sp, r1
                sub     r1, r1, #FIQ_STK_SIZE
               
                mrs     r0,cpsr                             ; Original PSR value                                        ;
                bic     r0,r0,#MODE_BITS                    ; Clear the mode bits                                       ;
                orr     r0,r0,#SVC_MODE                     ; Set IRQ mode bits                                         ;
                msr     cpsr_c,r0                           ; Change the mode                                           ;
                mov     sp, r1
        
                msr     cpsr_c, #SVC_MODE:OR:F_BIT          ; Enable interrupts, if required                            ;
;******************************************************************************
;                                   MOVE TO MAIN
;******************************************************************************
                ldr     r0, =__main
                bx      r0                                  ; Save this in register for possible long jump              ;
                LTORG
                END

;******************************************************************************
;
;                             INTERRUPT VECTORS
;                                    ARM
;                             KEIL's uVision3
;                   (RealView Microprocessor Developer Kit)
;
; Filename      : vectors.s
;******************************************************************************
                PRESERVE8
                AREA   VECT, CODE, READONLY                     ; Name this block of code                                   ;
                ARM
                ENTRY
;******************************************************************************
;                                  IMPORTS
;******************************************************************************
                IMPORT  OS_CPU_ARM_ExceptUndefInstrHndlr
                IMPORT  OS_CPU_ARM_ExceptSwiHndlr
                IMPORT  OS_CPU_ARM_ExceptPrefetchAbortHndlr
                IMPORT  OS_CPU_ARM_ExceptDataAbortHndlr
                IMPORT  OS_CPU_ARM_ExceptIrqHndlr
                IMPORT  OS_CPU_ARM_ExceptFiqHndlr
                IMPORT  ResetHndlr
               
;******************************************************************************
;                                  EXPORTS
;******************************************************************************

;******************************************************************************
;                                DEFINITIONS
;******************************************************************************

;******************************************************************************
;                      INITIALIZE EXCEPTION VECTORS
;******************************************************************************
Vectors
                ldr     pc, Reset_Addr
                ldr     pc, Undef_Addr
                ldr     pc, SWI_Addr
                ldr     pc, Prefetch_Addr
                ldr     pc, Abort_Addr
                nop
          ldr     pc, IRQ_Addr
          ldr     pc, FIQ_Addr
Reset_Addr      dcd     ResetHndlr
Undef_Addr      dcd     OS_CPU_ARM_ExceptUndefInstrHndlr
SWI_Addr        dcd     OS_CPU_ARM_ExceptSwiHndlr
Prefetch_Addr   dcd     OS_CPU_ARM_ExceptPrefetchAbortHndlr
Abort_Addr      dcd     OS_CPU_ARM_ExceptDataAbortHndlr
                nop
IRQ_Addr        dcd     OS_CPU_ARM_ExceptIrqHndlr
FIQ_Addr        dcd     OS_CPU_ARM_ExceptFiqHndlr

                END

相关帖子

沙发
pigeon0411|  楼主 | 2009-8-18 16:48 | 只看该作者
晕了,竟然保存不了格式啊,怎么乱七八糟的

使用特权

评论回复
板凳
auzxj| | 2009-8-18 16:50 | 只看该作者
里面还有表情:D

使用特权

评论回复
地板
ziranren| | 2009-8-18 17:02 | 只看该作者
下面不是有
IMPORT  __main
了吗?

使用特权

评论回复
5
pigeon0411|  楼主 | 2009-8-19 08:33 | 只看该作者
IMPORT  __main
IMPORT  main  这两句是不同的,我想大家都明白,所以我不是强调这个问题

我是说我在代码中加了 IMPORT  main 这句编译后不能正常运行,那么我再删掉它,重新编译,按我们常规的理解:我先加了这句,然后再又删掉了这句,那就等于没加,但是就是这么操作了一下,它就不能正常运行了,诡异啊……

https://bbs.21ic.com/icview-129319-1-1.html

使用特权

评论回复
6
ziranren| | 2009-8-19 13:30 | 只看该作者
这两句的差别在哪呢?虚心请教以下.

使用特权

评论回复
7
pigeon0411|  楼主 | 2009-8-19 13:38 | 只看该作者
百度一下,很多相关的**,可以看一下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

157

帖子

3

粉丝