单片机的程序有多大?
之前一直很奇怪一个问题,每次写好单片机程序之后,用烧录软件进行烧录时,能看到烧录文件也就是 hex 的文件大小:
我用的单片机芯片是 STM32F103C8T6,程序储存器(flash)只有 64K。
从上图可以看出,hex 有 128K。
我有两点疑问,
1. 只是一个很简单的平衡小车程序而已,有 128K,这么大吗?
2. 就算有 128K,能下载到只有 64K 容量的单片机中去?
这可能是一道送命题!
下面开始我们的探索之旅,以 STM32 开发为例。在 keil 中进行程序编译之后,在界面部分:
很多朋友估计看到这界面,也只关心 2 个点:
第一、自己编写的程序是否正确生成了 hex!第二、自己编写的程序有没有错误,有没有警告!
在图中红线部分:
有 4 个:Code、RO-data、RW-data、ZI-data。
Code:表示所要执行的代码,程序中所有的函数都位于此处。
RO-data:表示只读数据,程序中所定义的全局常量数据和字符串都位于此处。
RW-data:表示已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量位于此处。
ZI-data:表示未初始化的读写数据,程序中定义了但没有初始化的全局变量和静态变量位于此处。
从描述中可以得出:
1. 下载到单片机 FLASH 的程序是:Code+RO-data+RW-data(上图中数据为字节数,kb=byte/1024);
hex=(39546+5862+12428)/1024=56.48
2. 运行在 RAM 中的数据是:RW-data+ZI-data;
原来 window 下显示的 hex 大小,并非是我们下载到单片机中的 hex 大小。
关于为什么显示不同,这又是一个十分有趣的问题,有兴趣的朋友可以一起探讨下。
最后,貌似 C8T6 这个芯片的资源差不多被榨干了,要考虑换芯片了。
你写的单片机程序有多大,你知道吗?
单片机我们都用过,我们知道单片机的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文件,用记事本打开,拉到最后就可以看到了。
本订阅号致力于单片机、ARM等嵌入式软硬件的设计经验分享,秉承“人人都是电子设计经验的分享者”的理念,成功路上不孤单,我们一起努力。公众号:micropoint8
相关问答
一般 单片机 多少毫安?不带负载时,一般十毫安左右,与工作频率有关,工作频率高时,耗电会增加不少,另外外设比较多的单片机耗电肯定多一些,如STM32F103单片机虽然号称功耗低,但工...
单片机有 多少晶体管?2300个。单片机4004处理器于1971年11月15日宣布,它是芯片巨人第一个完整的单片机和第一个商业微处理器。4004处理器有2300个晶体管,手指甲大小,计算性能与第...
单片机 消耗功率一般 多大 ?关于这个问题,单片机消耗功率大小与其具体型号、运行频率、电源电压等因素有关,一般情况下,单片机消耗的功率较小,通常在几毫瓦到几十毫瓦之间。在低功耗应用...
单片机 能控制 多大 的电流和电压?单片机本身并不直接控制电流和电压的大小,它作为一个微控制器,主要负责控制外部器件的开关和逻辑操作。单片机的输出引脚通常具有较小的电流(几毫安级别)和电...
51 单片机 RAM 多大 ?51系列单片机片内RAM容量介绍如下:1、51系列,00H~7FH,分三大块,00H~1FH为工作寄存器区,20H~2FH为位寄存器区,30H~7FH为用户存储器区。2、52系列,00H~0....
...5v的电压;它们各自加上的电阻为 多大 ?用于 单片机 上控制的....[最佳回答]5V电压串联不行的,要并联可以的.就算是普通的发光二极管,导通电压也要2V,串一个加上2V,串20个你自己算算电压要多少啊.并联可行不过电源要有足够驱...
假设 单片机 存储器容量为8kb,地址范围?8kb是13根地址线,为1FFFH,加上起始地址1000H,为2FFFH8kb是13根地址线,为1FFFH,加上起始地址1000H,为2FFFH
利用 单片机 控制独立键盘,怎么计算上拉电阻要 多大 ?利用51 单片 ...[最佳回答]没有什么公式,都是经验值,一般单片机电源是5V,P口输入电流不超过额定输入电流就成,上拉电阻10K左右就行,电流才0.5mA.51单片机不用接上拉电阻都可以...
51 单片机 能提供 多大 的电压电流?答:51单片机输出低电平驱动能力很强,至少可达20mA~50mA。高电平驱动能力很弱,电流在5mA以下。带动4~8个TTL负载是指一个输出类的IO口可与4~8个TTL的输入引脚相...
红绿灯, 单片机 是多少位数?灯顺序L8红,L7黄,L6绿,L5蓝,L4红,L3黄,L2绿,L1白5,6位数码管对应AB路口。灯顺序L8红,L7黄,L6绿,L5蓝,L4红,L3黄,L2绿,L1白5,6位数码管对应AB路口。