zoukankan      html  css  js  c++  java
  • Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)

    转载:”http://www.cnblogs.com/shirishiqi/p/5545085.html

     

    一 基础知识

    字节  8位
    半字  16位
    字    32位

    二 解惑

    Code, RO-data,RW-data,ZI-data

    Code为程序代码部分
    RO-data 表示 程序定义的常量const temp;
    RW-data 表示 已初始化的全局变量
    ZI-data 表示 未初始化的全局变量

    Program Size: Code="18248" RO-data=320 RW-data=260 ZI-data=3952

    Code, RO-data,RW-data ............flash
    RW-data, ZIdata...................RAM

    三 详细分析

    初始化时RW-data从flash拷贝到RAM

    生成的map文件位于list文件夹下 (KEIL)

        Total RO  Size (Code + RO Data)                18568 (  18.13kB)
        Total RW  Size (RW Data + ZI Data)              4212 (   4.11kB)
        Total ROM Size (Code + RO Data + RW Data)      18828 (  18.39kB)

    ARM指令的长度刚好是1个字(分配为占用4个字节),Thumb指令的长度刚好是半字(占用2个字节)

    R0-R15 (R15-PC,R14-LR,R13-SP) 32位

    每个异常模式还带有一个程序状态保存寄存器 (SPSR),它用于保存在异常事件发生之前的CPSR

    LDMIA R1!,{R2-R7, R12} ;将R1单兀中的数据读出到R2-R7,R12,  R1自动加1
    STMIA RO!,{R3-R6,R10}  ;将R3-R6,R10中的数据保存到RO指向的地址,RO自动加1

    在数据传送之前,将偏移量加到Rn中,其结果作为传送数据的存储地址.若使用后缀“!”,则结果写回到Rn中,且Rn值不允许为R15.指令举例如下:
    LDR   Rd, [Rn, #Ox4]!

    LDMFD  SP!,{R0-R3,PC}^ ;中断返回
    “^”符号表示这是一条特殊形式的指令。这条指令在从存储器中装载PC的同时(PC是最后恢复的),CPSR也得到恢复

    大端格式(Big-endian)
    小端格式(Little-endian)

    数据0x12345678存储格式
          大端格式
    低地址<----0x12|0x34|0x56|0x78---->高地址
          小端格式
    低地址<----0x78|0x56|0x34|0x12---->高地址

    ARM微处理器支持7种运行模式,分别为: CPSR M[4:0]

    1.用户模式(usr):ARM处理器正常的程序执行状态。       10000
    2.快速中断模式(fiq):用于高速数据传输或通道处理。    10001
    3.外部中断模式(irq):用于通用的中断处理。            10010
    4.管理模式(svc):操作系统使用的保护模式。            10011
    5.数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。10111
    6.系统模式(sys):运行具有特权的操作系统任务。        11111
    7.定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 11011

    ARM正常工作一般工作在用户模式和系统模式,复位的时候进入管理模式。

    对于ARM指令集来说,PC指向当前指令的下两条指令的地址,

    注意pc,在调试的时候显示的是当前指令地址,而用mov lr,pc的时候lr保存的是此指令向后数两条指令的地址

    假设反汇编代码:  0x000001 :  mov lr pc   

    (此时查看PC寄存器的值是0x000001,但实际PC值是0x000003, lr里面保存的就是0x000003)

    fields 指定传送的区域(psr  CPSR或SPSR)
    c 控制域屏蔽字节(psr[7..0])
    x 扩展域屏蔽字节(psr[15..8])
    s 状态域屏蔽字节(psr[23..16])
    f 标志域屏蔽字节(psr[31..24])

    例如:MSR cpsr_c, #0xD3 ;  CPSR[7...0] = 0xD3

  • 相关阅读:
    测试
    unittest发送测试报告邮件
    unittest生成测试报告
    Navicat连接Oracle详细教程
    Windows 2012 安装 Oracle 11g 报错:[INS-13001]环境不满足最低要求。
    Windows server 2012安装oracle11g(32/64位)步骤
    ElasticSearch和solr的差别
    HashMap和Hashtable的区别
    final关键字所修饰的类有什么特点
    springboot测试的时候插入数据: error performing isolated work; SQL [n/a]; nested exception is org.hibernate...
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/10369468.html
Copyright © 2011-2022 走看看