原创 ARM7两种开发环境堆栈设置小结

2009-7-7 23:04 5360 8 8 分类: MCU/ 嵌入式

 首先说说KeilGCC, 虽然很多人认为用Keil开发ARM很土,但是对于从单片机转入的人来说作为入手工具倒也不错,
其实我觉得什么工具无所谓,结果对是重要的。
 (1) KeilGCC中, 堆栈设置完全靠程序实现,程序中指定
  .equ Top_Stack,      0x40003000   @ 堆栈栈顶地址
  .equ UND_Stack_Size, 0x00000004   @ 各部分堆栈大小
  .equ SVC_Stack_Size, 0x00000004
  .equ ABT_Stack_Size, 0x00000004
  .equ FIQ_Stack_Size, 0x00000040
  .equ IRQ_Stack_Size, 0x00000040
  .equ USR_Stack_Size, 0x00000400
 等设置,之后调用堆栈初始化完成则OK!


 (2) Keil RV30,31 这事KEIL的新版本,据说不错,但是我也不知道如何。
 若使用KEIL实例给出的方法,只需要指定
  UND_Stack_Size  EQU     0x00000000
  SVC_Stack_Size  EQU     0x00000008
  ABT_Stack_Size  EQU     0x00000000
  FIQ_Stack_Size  EQU     0x00000000
  IRQ_Stack_Size  EQU     0x00000080
  USR_Stack_Size  EQU     0x00000400
 等各部分大小即可,堆栈会自动进行分配地址。
 也可以用ADS的分散加载方式。


 (3) ADS是ARM最早的开发工具,用的人也多,口碑也好,国内又有ZLG的支持(包括LPC系列芯片),过于他的堆栈设
置, ZLG的模板基本可以直接使用, 但是我觉得其内容比较麻烦,自己按照 KEIL GCC的方式改写了, 基本要设置的是:
  UND_Stack_Size  EQU     0x00000000
  SVC_Stack_Size  EQU     0x00000008
  ABT_Stack_Size  EQU     0x00000000
  FIQ_Stack_Size  EQU     0x00000000
  IRQ_Stack_Size  EQU     0x00000080
  USR_Stack_Size  EQU     0x00000400
 等各部分大小, 并且在程序中如下实现:
  AREA Stack, NOINIT, READWRITE, ALIGN="3"
Stack_Mem  SPACE   Size
Stack_Top
 在分散加载文件中指定堆栈的起始内存位置(不是栈顶, 其值应该为 Stack_Top(Keil中指定的那个地址)-Size, 计算不
对会超出地址范围!),这样在堆栈初始化中就和Keil GCC基本相同设置了, 我本人看着比较顺眼, 感觉也易懂一些。


 以上是本人的一些学习心得,记在此处,若是有什么不妥之处欢迎大家指点!


【2007-08-10】

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条