单片机我们都用过,我们知道单片机的FLASH有4K的,有8K的,单片机程序我们也写过,但是我们写好的程序有多大,你知道吗?
程序写好并编译后生成hex文件,这个hex文件就是要下载到单片机里的文件,这个文件的大小不能超过单片机的FLASH大小,否则就要优化程序或者选用更大FLASH的单片机。
如下图所示,就是一个编译好的hex文件:
我们发现他后边的大小是9KB,这个是程序的大小吗?其实这是错误的,程序的大小要在这里看见:
Code:表示所要执行的代码,程序中所有的函数都位于此处。
RO-data: 表示只读数据,程序中所定义的全局常量数据和字符串都位于此处。
RW-data:表示已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量位于此处。
ZI-data:表示未初始化的读写数据,程序中定义了但没有初始化的全局变量和静态变量位于此处。
通过上面的描述就可以看出:
下载到单片机FLASH的程序是:Code+RO-data+RW-data;
运行在RAM中的数据是:RW-data+ZI-data;
好了,从今天起你就要知道你所写的程序有多大该怎么看了,另外程序的大小还可以在工程目录下的.map文件中看到:
找到.map文件,用记事本打开,拉到最后就可以看到了。
关键字:单片机程序 HEX文件 实际大小
引用地址:
单片机程序: HEX文件实际大小
推荐阅读最新更新时间:2024-03-16 15:44
51单片机写中断程序的一般步骤
51单片机内部有5个中断源: 1、INT0 外部中断0(序号0); 2、T0 定时器/计数器0中断(1); 3、INT1 外部中断1(2); 4、T1 定时器/计数器1中断(3); 5、T1/R1 串行口中断;(4) 外部中断程序步骤(以外部中断0为例): 1、EA=1 //开总中断 2、EX0=1//开外部中断0 3、IT0=1//跳变沿触发(默认为0,0为低电平触发) 中断服务程序 void 函数名() interrupt 0 { 中断处理内容 } 定时器中断程序步骤(以定时器0中断为例) 1、TMOD=0x01(设置定时器0为工作方式1) 2、TH0=(65536-50000)/256
[单片机]
C51单片机LCD1602驱动程序
LCD1602简介 LCD1602字符型液晶(每行显示16个字符,一共可以显示两行)——一种专门用来显示字母、数字、符号的点阵型液晶模块。它由若干个5x7或者5x10的点阵字符组成,每个点阵字符位都可以用来显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。 1602的引脚 我们只需要关注以下几个管脚: 3 脚:VL,液晶显示偏压信号,用于调整LCD1602 的显示对比度,一般会外接电位器用以调整偏压信号,注意此脚电压为0时可以得到最强的对比度。 4 脚:RS,数据/命令选择端,当此脚为高电平时,可以对1602 进行数据字节的传输操作,而为电平时,
[单片机]
单片机简易加法计算器程序
学到这里,我们已经掌握了一种显示设备和一种输入设备的使用,那么是不是可以来做点综合性的实验了。好吧,那我们就来做一个简易的加法计算器,用程序实现从板子上标有0~9数字的按键输入相应数字,该数字要实时显示到数码管上,用标有向上箭头的按键代替加号,按下加号后可以再输入一串数字,然后回车键计算加法结果,并同时显示到数码管上。虽然这远不是一个完善的计算器程序,但作为初学者也足够你研究一阵子了。 首先,本程序相对于之前的例程要复杂得多,需要完成的工作也多得多,所以我们把各个子功能都做成独立的函数,以使程序便于编写和维护。大家分析程序的时候就从主函数和中断函数入手,随着程序的流程进行就可以了。大家可以体会体会划分函数的好处,想想如果还是只有主
[单片机]
使用命令行编译C51源码并生成HEX文件的示例
参考Keil\C51\HLP\C51.pdf以及A51.pdf文档,示例及说明如下: set PATH=%PATH%;G:\develop\keil\C51\BIN;G:\develop\keil\C51\INC;G:\develop\keil\C51\LIB set C51_LIB=G:\develop\keil\C51\LIB\ (注:其中的G:\develop\keil目录要改成本机安装keil的位置) set DST_NAME=obj\output (注:指定输出文件名) set DIR=D:\source (注:指定源文件所在目录) echo 转向工作目录 d: (注:源文件所在区) cd %DIR% echo 编译文件
[单片机]
使用Keil下载Hex文件进STM32
前言 初学STM32时,是通过串口1把Hex文件下载进STM32的,需要一个串口模块,而且还要设置BOOT0和BOOT1电平,然后通过FlyMcu软件进行下载,这也是一种不错的方法,这里我要介绍的是使用JLink调试器和Keil MDK-ARM来下载Hex文件,无需源代码,只需要一个调试器。 所需要的工具和软件 Hex文件,如Demo_STM32.hex Keil软件,v4或v5版本,如Keil v5.16a ARM调试器,Jlink或ST-Link,如Jlink v9 STM32开发板,如STM32F103RET6 1.准备一个完整的工程 准备一个完整的工程,注意,这个工程的芯片型号、
[单片机]
关于IAREWSTM8 HEX文件
研究了一下BIN与HEX的关系,发现由BIN转到HEX比较简单,但是由BIN转到HEX就觉得多了一行东西。 上图看一下: 用别人写的代码也是一样多出来。 上网找了一下发现也有人跟我遇到相同的问题: http://bbs.21ic.com/icview-187817-1-1.html 并且给出了答案 以 :0400000508004ABDE8 为例子。 其中的地址是0x08004ABD,当下载代码到芯片里后(不勾选 run to main),程序恰好停在 0x08004ABD,对应于标号: __iar_program_start 维基百科是这么说: http://en.wikipedia.org/wik
[单片机]
avr单片机 TC1的16位PWM输出程序
********************************************/ * 工作频率:内部8M * * 编 译 器:ICCAVR 6.31A * * 输 出:PD4输出PWMB,PD5输出PWMA * * 产生的PWM频率为8M/65536约122Hz * ********************************************/ #include iom16v.h #include macros.h //延时函数:入口time 需延时的MS数 void delay_ms(unsigned int time) { unsi
[单片机]
PIC单片机程序设计基础格式
PIC单片机程序设计基础格式 为了快速掌握PIC单片机源程序的基本结构,这里给出一个典型的程序结构框架。 建立源程序时首先用伪指令TITLE提供程序的标题,接着给出整个程序的总说明,并用列表伪指令LIST指定所用单片机型号和文件输出格式,再利用INCLUDE伪指令读入MPASM中提供的定义文件如《P16F84?INC》,然后对片内常用资源进行定义,再给出一般程序的基本结构框架。现举例如下。 TITLE“This is……”;程序标题 ;程序说明 LIST P="16F84",F=1NHX8M ; include -config_RC_Qsc &_WDT_0FF… ;资源定义
[单片机]