欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    STM32芯片的ROM与RAM.pdf

    • 资源ID:73836739       资源大小:206.93KB        全文页数:6页
    • 资源格式: PDF        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    STM32芯片的ROM与RAM.pdf

    按照上边的例子,在 Keil 中编译工程成功后,在下面的 Bulid Ouput 窗口中会输出下面这样一段 信息:Program Size:Code=119222 RO-data=18266 RW-data=320 ZI-data=23492 代表的意思:Code:是程序中代码所占字节大小 RO-data:程序中所定义的指令和常量大小(个人理解:Read Only)RW-data:程序中已初始化的变量大小(个人理解”:Read/Write)ZI-Data:程序中未初始化的变量大小(个人理解:Zero Initialize)ROM(Flash)size=Code+RO-data+RW-data;RAM size=RW-data+ZI-data 可以通过.map 查看占用的 flash 和 ram 大小 Code 是代码占用的空间,RO-data 是 Read Only 只读常量的大小,如 const 型,RW-data 是(Read Write)初始化了的可读写变量的大小,ZI-data 是(Zer o Initialize)没有初始化的可读写变量的大小。ZI-data 不会被算做代码里 因为不会被初始化。简单的说就是在烧写的时候是 FLASH 中的被占用的空间为:Code+RO Data+RW Da ta 程序运行的时候,芯片内部 RAM 使用的空间为:RW Data+ZI Data ARM 编译中的 RO、RW 和 ZI DATA 区段 ARM 程序(指在 ARM 系统中正在执行的程序,而非保存在 ROM 中的 bin 文件)的 组成 一个 ARM 程序包含 3 部分:RO 段,RW 段和 ZI 段 RO 是程序中的指令和常量 RW 是程序中的已初始化变量 ZI 是程序中的未初始化的变量 由以上 3 点说明可以理解为:RO 就是 readonly,RW 就是 read/write,ZZ 就是 zero AAA 映像文件的组成 所谓 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 中是什么意思。1;RO 看下面两段程序,他们之间差了一条语句,这条语句就是声明一个字符常量。因此按照我们之前说的,他们之间应该只会在 RO 数据中相差一个字节(字符常 量为 1 字节)。Prog1:#include void main(void);Prog2:#include const char a=5;void main(void);Prog1 编译出来后的信息如下:=Code RO Data RW Data ZI Data Debug 948 60 0 96 0 Grand Totals=Total RO Size(Code+RO Data)1008(0.98kB)Total RW Size(RW Data+ZI Data)96(0.09kB)Total ROM Size(Code+RO Data+RW Data)1008(0.98kB)=Prog2 编译出来后的信息如下:=Code RO Data RW Data ZI Data Debug 948 61 0 96 0 Grand Totals=Total RO Size(Code+RO Data)1009(0.99kB)Total RW Size(RW Data+ZI Data)96(0.09kB)Total ROM Size(Code+RO Data+RW Data)1009(0.99kB)=以上两个程序编译出来后的信息可以看出:Prog1 和 Prog2 的 RO 包含了 Code 和 RO Data 两类数据。他们的唯一区别就是 P rog2 的 RO Data 比 Prog1 多了 1 个字节。这正和之前的推测一致。如果增加的是一条指令而不是一个常量,则结果应该是 Code 数据大小有差别。2;RW 同样再看两个程序,他们之间只相差一个“已初始化的变量”,按照之前所讲 的,已初始化的变量应该是算在 RW 中的,所以两个程序之间应该是 RW 大小有 区别。Prog3:#include void main(void);Prog4:#include char a=5;void main(void);Prog3 编译出来后的信息如下:=Code RO Data RW Data ZI Data Debug 948 60 0 96 0 Grand Totals=Total RO Size(Code+RO Data)1008(0.98kB)Total RW Size(RW Data+ZI Data)96(0.09kB)Total ROM Size(Code+RO Data+RW Data)1008(0.98kB)=Prog4 编译出来后的信息如下:=Code RO Data RW Data ZI Data Debug 948 60 1 96 0 Grand Totals=Total RO Size(Code+RO Data)1008(0.98kB)Total RW Size(RW Data+ZI Data)97(0.09kB)Total ROM Size(Code+RO Data+RW Data)1009(0.99kB)=可以看出 Prog3 和 Prog4 之间确实只有 RW Data 之间相差了 1 个字节,这个字 节正是被初始化过的一个字符型变量“a”所引起的。3;ZI 再看两个程序,他们之间的差别是一个未初始化的变量“a”,从之前的了解中,应该可以推测,这两个程序之间应该只有 ZI 大小有差别。Prog3:#include void main(void);Prog4:#include char a;void main(void);Prog3 编译出来后的信息如下:=Code RO Data RW Data ZI Data Debug 948 60 0 96 0 Grand Totals=Total RO Size(Code+RO Data)1008(0.98kB)Total RW Size(RW Data+ZI Data)96(0.09kB)Total ROM Size(Code+RO Data+RW Data)1008(0.98kB)=Prog4 编译出来后的信息如下:=Code RO Data RW Data ZI Data Debug 948 60 0 97 0 Grand Totals=Total RO Size(Code+RO Data)1008(0.98kB)Total RW Size(RW Data+ZI Data)97(0.09kB)Total ROM Size(Code+RO Data+RW Data)1008(0.98kB)=编译的结果完全符合推测,只有 ZI 数据相差了 1 个字节。这个字节正是未初始 化的一个字符型变量“a”所引起的。注意:如果一个变量被初始化为 0,则该变量的处理方法与未初始化华变量一 样放在 ZI 区域。即:ARM C 程序中,所有的未初始化变量都会被自动初始化为 0。总结:1;C 中的指令以及常量被编译后是 RO 类型数据。2;C 中的未被初始化或初始化为 0 的变量编译后是 ZI 类型数据。3;C 中的已被初始化成非 0 值的变量编译后市 RW 类型数据。附:程序的编译命令(假定 C 程序名为 tst.c):armcc-c-o tst.o tst.c armlink-noremove-elf-nodebug-info totals-info sizes-map-list a a.map-o tst.elf tst.o 编译后的信息就在 aa.map 文件中。ROM 主要指:NAND Flash,Nor Flash RAM 主要指:PSRAM,SDRAM,SRAM,DDRAM

    注意事项

    本文(STM32芯片的ROM与RAM.pdf)为本站会员(l***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开