被中断打断后,程序不继续运行。

[复制链接]
2561|7
 楼主| ma1986 发表于 2009-10-21 08:48 | 显示全部楼层 |阅读模式
原来的程序被一大堆中断打断后,在中断停止后没有继续运行。但是按了一个按键中断,设置了一个在程序中没有使用的变量,程序居然又继续运行了。
这又是怎么回事啊???这个程序在这之前也运行了很久了。
zchong 发表于 2009-10-21 20:29 | 显示全部楼层
是不是一直处于中断状态?比如没有个地方忘记清除中断了
 楼主| ma1986 发表于 2009-10-23 10:46 | 显示全部楼层
2# zchong
中断是每次一进入就清除了。
而且我的中断进进出出也上千次了~~~
biao.l 发表于 2009-10-24 16:06 | 显示全部楼层
堆栈空间太小
 楼主| ma1986 发表于 2009-10-26 17:13 | 显示全部楼层
4# biao.l
DRAM_END EQU 0x0c800000
AREA RamData, DATA, READWRITE
^ (DRAM_END - 0x800)
UserStack # 256
SVCStack # 256
UndefStack # 256
AbortStack # 256
IRQStack # 256
FIQStack # 256
EXPORT UserStack
EXPORT SVCStack
EXPORT UndefStack
EXPORT AbortStack
EXPORT IRQStack
EXPORT FIQStack
MAP (DRAM_END - 0x100)
SysRstVector # 4
UdfInsVector # 4
SwiSvcVector # 4
InsAbtVector # 4
DatAbtVector # 4
ReservedVector # 4
IrqSvcVector # 4
FiqSvcVector # 4
EXPORT SysRstVector
EXPORT UdfInsVector
EXPORT SwiSvcVector
EXPORT InsAbtVector
EXPORT DatAbtVector
EXPORT ReservedVector
EXPORT IrqSvcVector
EXPORT FiqSvcVector

;****************************************************
;初始化堆栈
;Do not use DRAM,such as stmfd,ldmfd......
;SVCstack is initialized before
;Under toolkit ver 2.50, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'

mrs r0, cpsr
bic r0, r0, #(MODEMASK|NOINT)

orr r1, r0, #UNDEFMODE|NOINT
msr cpsr_cxsf, r1  ;UndefMode
ldr sp, =UndefStack

orr r1, r0, #ABORTMODE|NOINT
msr cpsr_cxsf, r1  ;AbortMode
ldr sp, =AbortStack

orr r1, r0, #IRQMODE|NOINT
msr cpsr_cxsf, r1  ;IRQMode
ldr sp, =IRQStack

orr r1, r0, #FIQMODE|NOINT
msr cpsr_cxsf, r1  ;FIQMode
ldr sp, =FIQStack
  
orr r1, r0, #SVCMODE  ;enable irq,fiq
; orr r1, r0, #SVCMODE|NOINT ;disable irq, fiq
msr cpsr_cxsf,r1  ;SVCMode
ldr sp, =SVCStack
;USER mode is not initialized.
;未初始化用户模式栈,程序使用SVC模式
;****************************************************


按照这个初始代码,我是不是还可以给用户模式的堆栈再分配256字节的堆栈空间吗???只需要改成UserStack # 512 就好了吗??
我程序的嵌套比较深,可能有10多层的调用。怕堆栈不够。

堆栈太小,会导致进入其他中断无法进入吗???
flashdyc 发表于 2009-10-26 21:27 | 显示全部楼层
堆栈小程序可能直接就飞了。。
 楼主| ma1986 发表于 2009-10-27 09:54 | 显示全部楼层
6# flashdyc
问个问题啊。。我们用户模式下的程序堆栈,我调用函数的过程中,每个函数的局部变量都会加入到该堆栈中吗???比如我在某函数内int a[50];然后在该函数中再调用其他函数的时候,压栈,会将a[50]压到栈里吗???
flashdyc 发表于 2009-10-27 20:04 | 显示全部楼层
a[50]本身就在栈里,定义的时候就进去了,你可以看反汇编程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

101

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部