KEIL MDK Program Size 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data的解释

【Keil编译后查看ram和flash大小及占比】 Keil编译后查看ram和flash大小及占比 阅读详情

本文来自:

http://blog.chinaunix.net/uid-21227800-id-3316051.html


KEIL RVMDK编译后的信息

 

Program Size: Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116 

 

Code是代码占用的空间,RO-data是 Read Only 只读常量的大小,如const型,RW-data是(Read Write) 初始化了的可读写变量的大小,ZI-data是(Zero Initialize) 没有初始化的可读写变量的大小。ZI-data不会被算做代码里因为不会被初始化。

 

简单的说就是在烧写的时候是FLASH中的被占用的空间为:Code+RO Data+RW Data

程序运行的时候,芯片内部RAM使用的空间为: RW Data + ZI Data


keil显示内存和存储占用百分比进度条工具(Keil5_disp_size_bar) 原理是使用C语言遍历目录找到keil工程生成出的.map文件,然后找到对应的ram和flash的总大和占用大小,然后以进度条和百分比的直观格式输出来,以便嵌入式软件工程师方便调试,知道芯片占用情况,进行裁剪和优化。放到工程目录下,要放在在.map文件更上一层的目录,例如可以放在和工程文件同一目录下。3.接着每次按下编译就能看到生成的代码对ram和flash的占用大小百分比进度条。生成的代码对ram和flash的占用大小百分比进度条,keil5环境下通用。(50.76 KB, 下载次数: 130) 阅读详情

相关推荐

从零理解Keil MDK中的内存分配:Code、RO-data、RW-data和ZI-data在STM32开发中的实际应用

本文深入解析了Keil MDK编译STM32项目时生成的Code、RO-data、RW-data和ZI-data内存区域。通过实战案例,详细阐述了它们与Flash和RAM的映射关系,并指导开发者如何利用.map文件进行内存诊断与优化,从而有效管理有限的嵌入式资源,避免内存溢出。

yhn456789的博客 867

zi data远大于ram容量为啥程序还能正常运行

没有问题, 编译的时候keil选用了优化。这个zi-data可能库,或者是你的字库或者点阵,如果程序中确实没用到,优化的时候不会编译进hex文件,你要看生成的hex文件大小。

dianqicyuyan的博客 1239

MDK(KEIL) Program Size优化实战:Code与RO-data的存储压缩技巧

本文详细介绍了MDK(KEIL)开发中Program Size的优化实战技巧,重点解析了Code与RO-data的存储压缩方法。通过编译器选项配置、函数结构优化、常量与字符串处理等策略,有效减少Flash占用,提升嵌入式项目的存储效率与运行稳定性。

kotlin6android的博客 531

KEIL MDK 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data的解释

<br />KEIL RVMDK编译后的信息<br /> <br />Program Size: Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116  <br /> <br />Code是代码占用的空间,RO-data是 Read Only 只读常量的大小,如const型,RW-data是(Read Write) 初始化了的可读写变量的大小,ZI-data是(Zero Initialize) 没有初始化的可读写变量的大小。ZI-data不会被算做代码里因为不

Grant的工作笔记 3万+

Code、RO-data、RW-data、ZI-data、堆和栈

Code 段:存储程序的可执行代码。RO-data 段:存储只读数据,如常量和字符串字面量。RW-data 段:存储可读写数据,包括已初始化的全局变量和静态变量。ZI-data 段:存储在程序初始化时清零的数据段,包括未初始化的全局变量和静态变量。栈:存储局部变量、函数参数和返回地址。堆:用于动态分配内存,存储在程序运行时分配的对象和数据。

tyustli 1万+

Android中的Service:Binder,Messenger,AIDL(2)

前言前面一篇博文介绍了关于Service的一些基本知识,包括service是什么,怎么创建一个service,创建了一个service之后如何启动它等等。在这一篇博文里有一些需要前一篇铺垫的东西,建议没有看过前一篇博文的同学先去看一下前一篇: Android中的Service:默默的奉献者 (1) 。但是在前一篇博文中也有一些遗漏的东西——主要是关于bindService()这一块的具体细节。由于这

lypeer的专栏 5万+

Keil MDK中的Code,RO-data RW-data,ZI-data详解

在编译工程结束时,编译器都会给出工程代码的代码量大小以及RAM使用情况,我们可以了解代码的相关情况。 下面就以Keil5 为IDE平台演示: 代码工程地址:https://download.youkuaiyun.com/download/emoeror_zhang/11286638 工程编译后显示如图所示: Build target 'LED' compiling main.c... linking...

烛火飞蛾 2694

奇安信 2025 年护网蓝队初选笔试题(附答案解析)

熬夜为大家整理了 奇安信 2025 年护网蓝队初选笔试题,(关注我我会持续更新)涵盖 SQL 注入、Web 安全、渗透测试、二进制安全 等核心知识点,并附上详细答案解析,助力大家高效备考!12.下列关于虚表指针描述正确的是(1.5分)✅ B. 虚表指针存储的是虚表的首地址❌ A. 任何类对象都存在虚表指针(仅含虚函数的类有)❌ C. 虚表指针位于对象内存空间的起始处(由编译器决定)❌ D. 虚表指针是否存在不影响对象所占内存空间的大小(存在时会增加指针大小)📌 解析:虚表指针(vptr)用于实现多态,指向

Aishenyanying33的博客 4698

理解Keil编译器中编译程序时出现的Code、RO-data、RW-data和ZI-data的含义

Code:代表执行的代码,程序中所有的函数; RO-data:代表只读数据(Read Only Data),程序中所定义的全局常量数据; RW-data:代表已初始化的读写数据(Read And Write Data),程序中定义并且初始化的全局变量和静态变量;

m0_50862404的博客 6791

从入门到精通:激光器恒流驱动电路的设计与选型指南

本文深入解析了激光器恒流驱动电路的设计与选型。文章从基础电路原理讲起,对比了简易恒流源与高精度运放反馈方案的优劣,并重点阐述了如何为不同功率与精度要求的激光器项目选择合适的恒流驱动方案,强调了恒流源对于保障激光器稳定工作、防止热失控及延长寿命的核心作用。

grafana6viz的博客 711

Oracle EBS报表开发入门:Report Builder安装避坑指南(Win10/11兼容版)

本文详细介绍了在Windows 10/11系统上成功安装和配置Oracle Report Builder的完整避坑指南。通过修改系统兼容性、解决虚拟内存报错、正确设置NLS_LANG和TNS连接等关键步骤,确保开发环境稳定运行。同时,阐述了Report Builder与BI Publisher在现代Oracle EBS报表开发中的协作定位与工作流,帮助开发者高效搭建报表开发环境。

d6e7f8的博客 754

keil MDK编译完成后,Program Size: Code,RO-data,RW-data,ZI-data的意义

keilMDK编译完成后,ProgramSize:Code,RO-data,RW-data,ZI-data的意义 转载 2016-02-12 15:27:07 Program Size: Code=344 RO-data=252 RW-data=100 ZI-data=1024 看了多遍,总是忘,这次还是把它分析透了吧,若有不对的地方还请各位看官指正补充 固定不变的代码存在ROM...

komtao520的博客 1088

劳特巴赫 Trace32 调试使用教程

详细介绍如何使用trace32进行调试

m0_56208280的博客 4万+

Keil/MDK 小知识点:Program size: Code, RO-data , RW-data, ZI-data 解释(什么意思)

最近开始留意MCU 的存储分配问题,所以我产生了一下疑问。同时,也有很多网友都有这个疑问。大家的观点答题相同,但又不尽详细。 参考文章: http://anlx27.iteye.com/blog/1575848 http://www.mamicode.com/info-detail-1043059.html http://limountain.blog.163.com/blog/sta

yuleicqut的专栏 2万+

手把手教你用Python实现ITRS与GCRS坐标转换(附完整代码)

本文详细介绍了如何使用Python的Astropy库实现ITRS与GCRS坐标转换。文章从环境配置、坐标对象构建入手,深入解析了transform_to方法背后的转换矩阵与地球定向参数管理,并通过卫星地面轨迹计算实战案例,帮助开发者掌握高精度空间坐标转换的核心技术与工程实践。

weixin_28335283的博客 80

Python实战:高效稳定采集微信视频号评论的API爬虫方案

网络爬虫是数据采集领域的核心技术,其原理是通过程序模拟浏览器行为,向目标服务器发送HTTP请求并解析响应数据,从而自动化获取网页或接口中的信息。这项技术的核心价值在于能够高效、批量化地收集公开数据,为市场分析、舆情监控和竞品研究提供数据基础。在社交媒体分析、电商价格监控等应用场景中,爬虫技术尤为重要。针对微信视频号这类动态加载的复杂应用,传统的GUI自动化工具(如影刀RPA)常面临性能瓶颈和风控挑战。本文聚焦于通过Python实现**无感采集**,直接与后端**API接口**交互,构建稳定高效的评论数据采集

weixin_30899023的博客 329

MDK(KEIL) Program Size解析

Program Size,Code,RO-data,RW-data,ZI-data

qiongyou88的博客 1437

基于PCL、Open3d、Easy3d 、VTK等常见开源库的QT开发

PCL+QT开发

阁楼 2万+

keil-mdk arm 中program size的解析

文章来源:http://bbs.21ic.com/icview-1666996-1-1.html?fromuser= KEIL RVMDK编译后的信息 Program Size: Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116 Code是代码占用的空间。 RO-data是 Read Only 只读常量的大小,如const型。 RW-d...

huhuandk的博客 630

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

KEIL编译后程序的大小,Code、RO-data、RW-data、ZI-data的关系

MDK编译后显示: Program Size: Code=9748 RO-data=392 RW-data=20 ZI-data=1228 首先要弄懂这几个分别是什么? Code:程序代码,存储在rom中; RO-data:只读数据,存储在rom中; RW-data:可读可写数据,既存储在ram中,也存储在rom中(RW-data已初始化的数据会存储在rom中,上电会从rom搬移至ram中); ZI-data:Zero Initialize,未初始化的数据,存储在rom中。 因此程序占用rom大小=C

freemote的博客 3855

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Keil MDK编译信息解读:嵌入式开发中代码量与RAM使用分析指南

在嵌入式系统开发中,理解程序的内存占用是优化系统性能与稳定性的基础。程序编译后生成的映像文件通常包含代码段、只读数据段、可读写数据段等多个部分,这些信息直接反映了Flash和RAM的资源消耗。通过分析编译输出信息,开发者可以掌握程序的静态内存需求,从而在资源受限的单片机环境中做出合理的设计决策。例如,Code段和RO-data段占用Flash空间,而RW-data和ZI-data则决定了RAM的静态使用量。这项技能对于嵌入式工程师至关重要,尤其是在使用Keil MDK这类主流开发工具时,能够帮助识别内存瓶颈

weixin_30681615的博客 347

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

为什么一样的程序,编译后,内存占用差异很大(Code + RO-data + RW-data)

KEIL 中的CODE,RO-DATA,RW-DATA,ZI-DATA .hex文件中包含有实际代码的存储地址、帧长度、类型、校验等,而这些东西在你烧录程序时并不会烧录进单片机,这些东西只是为烧录软件指定程序要烧录进单片机的地址,以及保证要烧录数据的完整性。所以实际烧录进单片机的数据要远远小于.hex中的数据。比如,我的一个.hex的文件大小为52KB,我烧录进单片机,但实际上占用的单片机的存储空间只有20.5KB。

云轩阁 1102

Code RO-data RW-data ZI-data KEIL MDK

KEIL MDK 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data的解释 KEIL RVMDK编译后的信息   Program Size: Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116    Code是代码占用的空间,RO-data是 Read Only 只读常量的大小,如const型

ysdaniel的专栏 8415

keil编译后显示的Program size含义

示例 使用keil编译完成后, 程序会弹出如下类似信息, 可能有些人不关注此类信息, 其实某些时候还是挺有帮助的, 比如裁剪程序尺寸, 使其大小能装进目标机器运行时; Program Size: Code=33112 RO-data=1108 RW-data=1236 ZI-data=89452 FromELF: creating hex file... 解释 Code表示代码占用空间; RO=read-only; RW=read-write; ZI=zero-initialized; 以LPC1

时有限 4210

Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)

一 基础知识 字节  8位 半字  16位 字    32位   二 解惑 Code, RO-data,RW-data,ZI-data Code为程序代码部分 RO-data 表示 程序定义的常量const temp; RW-data 表示 已初始化的全局变量 ZI-data 表示 未初始化的全局变量 Program Size: Code="18248" RO-d

u013720740的博客 572

KEIL MDK Program Size 查看代码量

KEIL RVMDK编译后的信息   Program Size: Code=16288 RO-data=836 RW-data=104 ZI-data=2824    Code是代码占用的空间,RO-data是 Read Only 只读常量的大小,如const型,RW-data是(Read Write) 初始化了的可读写变量的大小,ZI-data是(Zero Initialize)

smxdhb的专栏 2740
上一篇: STM32 启动解析,启动代码,__main main
下一篇: 如何使用GNU编译器GCC来编译Cortex-M3?GCC + STM32
#Page#
博客等级 码龄23年 1691粉丝 360原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值