xivisi 发表于 2011-5-20 17:49:29

【已解决】IAR 下初始化mini 2440 栈指针问题

前段时间 搞来一块 mini2440 起初用Keil开发但是老是在调试的时候出现错误,改为更稳定的IAR环境开发磕磕碰碰几天现在遇到一个问题

从启动代码(参照Keil启动代码修改而来) 进入main 再调用其他函数,然后——————然后程序就跑飞了…………
Jlink 调试确定为SP指针问题,不过修改多次 要么和icf冲突 要么达不到效果特来求助
http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_641575VNOM7Y.JPG
(原文件名:1.JPG)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_641576ZQCMNH.JPG
(原文件名:2.JPG)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_641577OQ0KSN.JPG
(原文件名:3.JPG)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_641578RLHBLE.JPG
(原文件名:4.JPG)

http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_641579MA19AD.JPG
(原文件名:5.JPG)

xivisi 发表于 2011-5-20 21:06:52

发现一个怪问题IAR 调用 c 函数 栈指针 是向下减的----特意做了一个 递归 测试

xivisi 发表于 2011-5-20 21:23:11

还是自己搞定了不知道正规的做法是怎么做的

xivisi 发表于 2011-5-20 21:25:18

;//========================栈空间定义===========================================
        SECTION CSTACK:DATA:ROOT(2)
        DATA
CSTACK_BASE
        DS8 __ICFEDIT_size_cstack__
CSTACK_TOP
        SECTION SVC_STACK:DATA:ROOT(2)
        DATA
SVC_STACK_BASE
        DS8 __ICFEDIT_size_svcstack__
SVC_STACK_TOP
        SECTION IRQ_STACK:DATA:ROOT(2)
        DATA
IRQ_STACK_BASE
        DS8 __ICFEDIT_size_irqstack__
IRQ_STACK_TOP
        SECTION FIQ_STACK:DATA:ROOT(2)
        DATA
FIQ_STACK_BASE
        DS8 __ICFEDIT_size_fiqstack__
FIQ_STACK_TOP
        SECTION UND_STACK:DATA:ROOT(2)
        DATA
UND_STACK_BASE
        DS8 __ICFEDIT_size_undstack__
UND_STACK_TOP
        SECTION ABT_STACK:DATA:ROOT(2)
        DATA
ABT_STACK_BASE
        DS8 __ICFEDIT_size_abtstack__
ABT_STACK_TOP
       
      LDR                R0,=UND_STACK_BASE
        MSR   CPSR_c, #Mode_UND|I_Bit|F_Bit
        MOV   SP, R0
       
        LDR                R0,=ABT_STACK_BASE
        MSR   CPSR_c, #Mode_ABT|I_Bit|F_Bit
        MOV   SP, R0
       
        LDR                R0,=FIQ_STACK_BASE
        MSR   CPSR_c, #Mode_FIQ|I_Bit|F_Bit
        MOV   SP, R0
       
        LDR                R0,=FIQ_STACK_BASE
        MSR   CPSR_c, #Mode_IRQ|I_Bit|F_Bit
        MOV                SP,R0
       
        LDR                R0,=SVC_STACK_BASE
        MSR   CPSR_c, #Mode_SVC|I_Bit|F_Bit
        MOV                SP,R0
       
        LDR                R0,=SVC_STACK_BASE
        MSR   CPSR_c, #Mode_SVC|I_Bit|F_Bit
        MOV                SP,R0
       
        LDR                R0,=CSTACK_TOP
        MSR   CPSR_c, #Mode_USR
        MOV         SP,R0


define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   {section CSTACK};
define block SVC_STACK with alignment = 8, size = __ICFEDIT_size_svcstack__ {section SVC_STACK};
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ {section IRQ_STACK};
define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ {section FIQ_STACK};
define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ {section UND_STACK};
define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ {section ABT_STACK};
页: [1]
查看完整版本: 【已解决】IAR 下初始化mini 2440 栈指针问题