keil中的Code_RO-data_RW-dat_ZI-dat 矫情吗;* 2022-07-28 05:20 179阅读 0赞 ARM开发总结的小知识 字节 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 + ROData) 18568 ( 18.13kB) Total RW Size (RW Data + ZIData) 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\] 用户模式(usr):ARM处理器正常的程序执行状态。 10000 快速中断模式(fiq):用于高速数据传输或通道处理。 10001 外部中断模式(irq):用于通用的中断处理。 10010 管理模式(svc):操作系统使用的保护模式。 10011 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。10111 系统模式(sys):运行具有特权的操作系统任务。 11111 定义指令中止模式(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 CODE SIZE, RO DATA, RW DATA, ZI DATA,idata, pdata---project Map 文件解读(一) optimization project时,开始往往是关注一时间性能,如codec mips或MCPS等。当时间性能达到了要求时,往往还会加入size这一参数来作比较,这时就要考虑各种各样的size。这一性能参数可能在projectrequirements book中有明显的说明,在testperformance result或在release note中也有更加准备的数据记录。 如下表: Program ROM Data RAM ROM Table Scratch Stack Static XX XX XX XX XX 首先我们要弄清楚这些size的含义以及所反应的性能意义。 1、CODE SIZE, RO DATA, RW DATA, ZIDATA 上面这些变量是在ARM 开发环境下会出现的数值,可以在armlink中加一些参数,得到相应有.map文件,从中就能准确的获取这些值,有一篇文章详细说明这些含义: ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成 一个ARM程序包含3部分:RO段,RW段和ZI段 RO是程序中的指令和常量 RW是程序中的已初始化变量 ZI是程序中的未初始化的变量 由以上3点说明可以理解为: RO就是readonly, RW就是read/write, ZI就是zero ARM映像文件的组成 所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image文件来称呼它。 Image文件包含了RO和RW数据。 之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。 Q:为什么Image中必须包含RO和RW? A:因为RO中的指令和常量以及RW中初始化过的变量是不能像ZI那样“无中生有”的。 ARM程序的执行过程 从以上两点可以知道,烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有必要了解ARM程序是如何从ROM中的image到达实际运行状态的。 实际上,RO中的指令至少应该有这样的功能: 1. 将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。 2. 将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM中 在程序运行的最初阶段,RO中的指令完成了这两项工作后C程序才能正常访问变量。否则只能运行不含变量的代码。 说了上面的可能还是有些迷糊, RO , RW 和 ZI 到底是什么,下面我将给出几个例子,最直观的来说明 RO , RW , ZI 在 C 中是什么意思。
相关 keil5 支持keil4安装包(Keil uVision5支持keil4) 方法一、执行文件后缀添加x,例如: xxx.uvproj修改为xxx.uvprojx,再次打开工程。 ![在这里插入图片描述][20210427084056569.pn 旧城等待,/ 2023年07月11日 05:48/ 0 赞/ 43 阅读
相关 Keil-MDK 中 [WEAK] 的作用 移植后的代码戳这里: [https://code.csdn.net/KISSMonX/freertos\_f3discovery\_test][https_code.csdn. 忘是亡心i/ 2022年08月26日 00:58/ 0 赞/ 218 阅读
相关 keil中常见的几种警告 keil中常见的几种警告,固然,相对于错误的,警告的程度不及错误的严重性,有时候忽略,会出现意想不到的错误。先看看常见的几种错误,分析出来现的原因。 1. Warni 爱被打了一巴掌/ 2022年06月18日 10:24/ 0 赞/ 284 阅读
相关 KEIL MDK 的优化 Keil RMDK 默认优化是LEVEL 2 ![Center][] ![Center 1][] [Center]: /images/20220615/2e - 日理万妓/ 2022年06月15日 01:11/ 0 赞/ 273 阅读
相关 Keil中使用MicroLib,以及malloc The C Standard Library (stdlib.h) contains a number of useful and common tools, includin 待我称王封你为后i/ 2022年05月31日 02:08/ 0 赞/ 443 阅读
相关 Keil中的USE MicroLib说明 出处:[https://www.cnblogs.com/zyqgold/p/6114637.html][https_www.cnblogs.com_zyqgold_p_6114 忘是亡心i/ 2022年05月29日 09:15/ 0 赞/ 220 阅读
相关 Keil中代码的颜色设置 因为长时间要编程,对于[keil][]上的黑字白底,如果看久了会让人眼睛产生疲倦感,所以最好将代码颜色和底色都改变一下,让自己看起来舒服一点。 下面是文字图片教程(如果自己没 Dear 丶/ 2022年03月22日 08:56/ 0 赞/ 754 阅读
相关 Keil中的code关键字 一般说来,我们在C语言中定义的每一个变量初始化后都会占用一定的内存(RAM)空间。但是在keil中提供了 一个特殊的关键字“code”,这个关键字在标准C中是没有的。其语法举例 不念不忘少年蓝@/ 2021年12月11日 09:37/ 0 赞/ 234 阅读
相关 keil中使用Astyle格式化你的代码的方法-keil4 keil5通用 简介:在给RTT 提交代码,需要符合RT-Thread 的代码规范,本文简单介绍如何使用Astyle 格式化为符合RTT要求的代码风格。 关于Astyle Asty 待我称王封你为后i/ 2021年11月02日 07:26/ 0 赞/ 697 阅读
还没有评论,来说两句吧...