Keil中的Code,RO,RW,ZI分别表示什么?

在使用keil开发STM32应用程序时,点击Build后在Build Output窗口中经常会有如下信息:

这里写图片描述

以前一直好奇这几个参数和实际使用的STM32芯片中Flash和SRAM的对应关系,于是上网搜了一圈,做如下总结:

  • 这些参数的单位是Byte
  • 图中几个参数分别代表 
    • Code:代码的大小
    • RO:常量所占空间
    • RW:程序中已经初始化的变量所占空间
    • ZI:未初始化的static和全局变量以及堆栈所占的空间
  • 上述参数和芯片Flash以及SRAM的对应关系是 
    • Flash占用大小=Code+RO+RW
    • SRAM占用大小=RW+ZI

不知道有没有人会像我一样好奇为什么RW参数同时参与了Flash和SRAM占用量的计算。这是因为Flash部分的属性是Read-Only的,而SRAM虽然是Read-Write但里面数据不能掉电保存,所以只能把已经初始化的值保存到ROM里,上电后再拷贝到SRAM中进行读写操作,即两部分都需要留出RW变量所占用的空间。这里给出的解释比较详细,在此我参照着用STM32F407ZGT6图解一下。 
STM32F407ZGT6的Flash大小为1MB,SRAM大小为(128KB+64KB)。这里SRAM之所以分开表示是因为在芯片内部前面的128KB和后面的64KB地址不是连续的,后面的64KB在ST官方叫做CCM (core coupled memory) ,据说是由内核直接访问的,不能由外设访问(见原帖2楼)。下面给出的示意图中只标出了前面的128KB的SRAM空间。红色部分表示STM32F407ZGT6提供的Flash和SRAM大小。

这里写图片描述

结合上图说下STM32F407ZGT6的启动过程(采用Cortex-M4、Cortex-M3内核的芯片基本都是这个过程):上电后首先从0x00000000(映射到0x08000000,这里只考虑从内部Flash启动)处获得中断向量表,然后在运行用户代码之前会在标号2处有一段引导代码负责把存在Flash中的初始化变量的值Copy到SRAM中对应的变量位置(标号3),之后把ZI区域全部清零(标号4),之后才正式开始运行用户代码(标号5)。

对于详细的启动过程,这个帖子写得比较详细,可以试试~

参考资料: 
http://stackoverflow.com/questions/5430284/rom-and-ram-in-arm 
http://blog.csdn.net/he_ning/article/details/35226125 
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/4027.html 
http://anlx27.iteye.com/blog/1575848

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JTAG、SWD接口定义

版权声明:本文为博主原创文章,转载请注明。 博客已转到 http://blog.csdn.net/upc_xbt https://blog.csdn.net/u014124220/article/details/50829713Jlink仿真器接口仿真器端口连接目标板备注1. VCCMCU电源VCCVCC2. VCCMCU电源VCCVCC3. TRSTTRSTTest ReS…

Drainage Ditches - poj 1273(网络流模板)

题意:1是源点,m是汇点,求出来最大流量,没什么好说的就是练习最大流的模板题 ************************************************************** 先用Edmonds-Karp的算法做一下试试吧重边贡献了 1W,要加上所有的重边才算…

linux RTC 驱动模型分析

linux RTC 驱动模型分析RTC(real time clock)实时时钟,主要作用是给Linux系统提供时间。RTC因为是电池供电的,所以掉电后时间不丢失。Linux内核把RTC用作“离线”的时间与日期维护器。当Linux内核启动时,它从RTC中读取时间与日期,…

Install Docker Mac OS X

检查 Mac OS version 要求必须是 OS X 10.6 Snow Leopard or newer to run Boot2Docker安装 Boot2Docker 列表内容下载地址:https://github.com/boot2docker/osx-installer/releases/download/v1.7.0/Boot2Docker-1.7.0.pkg 下载后点击安装,就是按照提示…

linq to sql报错,

以上是由于我把关联表中的string类型写成int类型所导致的,记一下,备用。转载于:https://www.cnblogs.com/server126/archive/2011/05/25/2057416.html

[VC6] RadioBox使用入门

基于对话框的应用程序,界面如下: 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 具体请参考代码: 关键代码: // del2Dlg.cpp : implementation file //#include "stdaf…

树莓派使用STEP1:装系统

1、windows安装SD卡格式化软件:SDFormatter.exe 2、windows安装系统烧录软件Win32DiskImager.exe 3、下载镜像:https://www.raspberrypi.org/downloads/raspbian/ 并解压缩 4、用Win32DiskImager将下载的镜像文件烧录进SD卡。 5、插上SD到树莓派&…

树莓派使用STEP2:设置网络

安装好系统并开机,插入鼠标键盘和显示器,登陆系统,打开终端。按以下操作。 1、sudo raspi-config 进入配置,打开SSH功能。 Interfacing Options -> SSH 2、扩展系统内存。 Advanced options -> Expand Filesystem 3、设置…

linux3.0-内核自带led驱动移植

********************************************************************************************************************************************************************************** cpu : s3c2440(arm9) linux内核:linux-3.0 开发板 &am…

树莓派使用STEP3:更换镜像源

更换国内镜像源,这里使用中科大的源,软件下载和更新速度更快。 1、sudo nano /etc/apt/sources.list 2、sudo nano /etc/apt/sources.list.d/raspi.list 3、sudo apt-get update && apt-get upgrade

树莓派使用STEP4:安装vim

系统原装的vi操作对新手和学习者不友好,可以用nano编辑器,因为我比较熟悉vi和vim,这里推荐使用vim。首先需要删除原装的vi,然后重新安装新的vim,过程比较简单。 1、卸载预装的vi sudo apt-get remove vim-common 2、…

手机测试pc端网页

在这个问题上徘徊了 一个钟头了,终于被我找到方法了,就赶紧记下来,以后好查阅!! 主要问题在防火墙,防火墙阻当了80端口,所以怎么用手机访问都是访问不了的。把防火墙关闭就好了! 贴上…

树莓派使用STEP5:安装samba文件共享服务器

samba服务器可以在多平台多操作系统搭建文件服务器,用于共享文件。为了方便windows和树莓派交换文件,将samba服务器的搭建过程记录如下。 1、安装samba服务器。 sudo apt-get install samba samba-common-bin 出现以下提示:Modify smb.conf…

ETH—Lwip以太网通信

第39章 ETH—Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 互联网技术对人类社会的影响不言而喻。当今大部分电子设备都能以不同的方式接入互联网(Inter…

计算从A地出发到各个地方的路径及距离

数据库环境:SQL SERVER 2005 如题,现有bus表数据如下,dstart是起点,dend是终点,distance是两地的距离。 求从A地出发到各个地方的距离。 有经验的人一看,就知道题目关于树形查询的。SQL SERVER 2005数据库…

树莓派使用STEP6:安装git

git用于创建和管理代码仓,是一个很优秀的版本控制工具。linux/树莓派安装非常简单。 1、sudo apt-get install git-core

cJSON 使用笔记

缘 起 最近在stm32f103上做一个智能家居的项目,其中选择的实时操作系统是 rt_thread OS v1.2.2稳定版本,其中涉及到C和java(android)端数据…

使用虚拟路径时出现404问题

今天在做一个小项目的时候使用了如下路径 web.xml如下: 一切配置都正确,可还是404 在折腾了半天之后发现浏览器的地址栏没有项目名!也就是说连接到项目外面去了,果断404。然后才记得虚拟路径前面的“/”和通常用的“../”具有同样…

树莓派使用STEP7:安装wiringPi硬件外设驱动C库

基于C/C开发树莓派外设,比较好的一种库是wiringPi,这里记录安装的流程和步骤。 一、在线安装 1、控制命令行 :git clone git://git.drogon.net/wiringPi 克隆git代码仓库 2、控制命令行: git pull origin 拉取最新的wiringPi…

STM32的I2C主从机通信

最近一段时间在做I2C通信协议,需要在两块STM32之间做I2C通信,定的是主机用IO口模拟,从机用的是STM32的硬件I2C,我的项目要求是需要主从机之间能够进行一串数据收发而不出错,实验时在主机方面,利用IO口模拟主…