在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2551|回复: 3

[讨论] arm启动代码的分析\交流

[复制链接]
发表于 2012-7-15 17:05:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
1RESERVE8:
  Reguire8和Preserve8
  C和汇编有8位对齐的要求,这两个伪指令可以满足此要求,存在REQUIRE8<——> PRESERVE8的对应关系,但不是说有一个REQUIRE8就要有一个 PRESERVE8,如果是一个c文件和一个汇编文件的调用,也就涉及一个PRESERVE8或者是一个REQUIRE8.
  另外,REQUIRE8和PRESERVE8并不完成8 byte 对齐的操作,对齐由ALIGN完成。
  将ADS的代码移植到KEIL MDK上需要做的修改:
  当用户拥有ADS遗留工程的所有源代码时,使用MDK重新编译链接全部代码是最好的解决方法,MDK中的新版本编译工具会重新生成满足堆栈8BYTE对齐要求的目标文件,避免由于堆栈不对齐引起的链接错误.
  从ADS到KEIL很重要的一个修改的地方就是这里的8BYTE对齐,想要编译通过,在startup.s里面我们必须加入PRESERVE8指令,使得寄存器8BYTE对齐.
  代码:
  CODE32
  PRESERVE8  ;这个在KEIL里面是必须的,要求8BYTE对齐.在ADS的启动代码中就没有.
  AREA vectors,CODE,READONLY
  2: arm的处理器可工作于多种模式,下面设置个模式的一些参数.
  Mode_USR        EQU     0x10  用户模式
  Mode_FIQ        EQU     0x11  快中断模式
  Mode_IRQ        EQU     0x12  中断模式
  Mode_SVC        EQU     0x13  管理模式
  Mode_ABT        EQU     0x17  中止模式
  Mode_UND        EQU     0x1B  未定义模式
  Mode_SYS        EQU     0x1F  系统模式
  参数的由来:这里各个模式的参数是由寄存器CPSR的模式位设置M[4:0]得来的,比如这里的用户模式,CPSR的M[4:0]设置为10000就是0x10,同理其他.详见<<ARM嵌入式系统基础教程>>47页,CPSR设置很关键!
  3:
  I_Bit           EQU     0x80            ; when I bit is set, IRQ is disabled
  F_Bit           EQU     0x40            ; when F bit is set, FIQ is disabled
  也和CPSR寄存器的设置有关,这里两位是禁止/开启快速中断和一般中断的设置.
  4: 各模式下定义的堆栈地址.
  UND_Stack_Size  EQU     0x00000000
  SVC_Stack_Size  EQU     0x00000100
  ABT_Stack_Size  EQU     0x00000000
  FIQ_Stack_Size  EQU     0x00000000
  IRQ_Stack_Size  EQU     0x00000100
  USR_Stack_Size  EQU     0x00000200
发表于 2012-9-16 13:12:00 | 显示全部楼层
呵呵,不懂
发表于 2012-9-29 12:31:05 | 显示全部楼层
看看,学习下
发表于 2013-6-22 22:49:39 | 显示全部楼层
怎么感觉是 ARM7 和 ARM9 下的 bootload 代码
而且也不全
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-6-5 16:40 , Processed in 0.043048 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表