Keil编译后的Code,RO,RW,ZI等相关

news/2024/10/4 23:31:46

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

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

  • 这些参数的单位是Byte
  • 图中几个参数分别代表 
    • Code:代码的大小
    • RO:常量所占空间(加了const修饰)
    • 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://www.ryyt.cn/news/28841.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

团队项目第一阶段评分及其点评

1组:调用对话接口,但内容太少,页面不美观 2组:页面不行,作品阶段质量太差 3组:内容太少 4组:页面整体可以,内容可以 5组:页面整体美观,内容较好 6组:内容较多,质量可以 7组:质量较好 8组:内容太少,质量差 9组:内容可以,质量较好 10组:内容多,质量好 11组:创…

Windows下使用ONNXRuntime的GPU进行推理时提示cudnn64_8.dll异常

一、问题复现 将模型放到GPU上推理时时发生的异常。 OrtSessionOptionsAppendExecutionProvider_CUDA(session_options, 0);...ort_outputs = session_.Run(Ort::RunOptions{ nullptr }, inputNames.data(), &input_tensor_, 1, outNames.data(), outNames.size());二、解决…

攻防世界 easyphp

打开场景 这种难度为1的题目,可能是把代码都放前端,让我们读。可以看到要传3个参数a、b、c a满足:转换为整数后大于6000000&&长度<=3,1e7 1e8 1e9都可以 b满足:md5加密后,后6位是8b184b,这里暴力枚举一下就行 c满足:json格式的数组,有两个索引c[m],c[n]。c…

k8s——核心概念篇

服务的分类 有状态代表应用nginx apache优点对客户端透明,无依赖关系,可以高效实现扩容,迁移缺点不能存储数据,需要额外的数据服务支撑无状态代表应用MYSQL Redis优点可以独立存储数据,实现数据管理缺点集群环境下需要实现主从,数据同步,备份,水平扩容负载。资源和对象…

轻量化城市三维模型CIM的主要技术方法

三维工厂K3DMaker是一款三维模型浏览、分析、轻量化、顶层合并构建、几何校正、格式转换、调色裁切等功能专业处理软件。可以进行三维模型的网格简化、纹理压缩、层级优化等操作,从而实现三维模型轻量化。轻量化压缩比大,模型轻量化效率高,自动化处理能力高;采用多种算法对…

一个小工具识别哪个docker占用gpu

我们经常会为了组内谁在占用某块gpu卡而不使用 烦恼,通过简单的代码就能快速识别到这块卡上面的进程是哪个容器的。 下面的代码会给出如下图这样的结果#! /miniconda3/bin/python # -*- coding: utf-8 -*- import psutil import subprocess as spdef pre():ans = sp.check_out…

一图说明在时间栏位增加多个时区时间

一图说明在时间栏位增加多个时区时间 如下最后效果您能读到这儿,我呢是发自真心的感谢您,若要转载,还望请您带上链接

华为云开发者桌面全新发布CodeArts IDE for Python,极致优雅云原生开发体验

华为云正式发布CodeArts IDE for Python,这是一款内置华为自研Python语言服务,提供智能编程、灵活调试能力的可扩展桌面开发工具。本文分享自华为云社区《华为云发布CodeArts IDE for Python,极致优雅云原生开发体验》,作者:华为云头条。 近日,华为云正式发布CodeArts ID…