keil全局编译后,可通过以下信息查看代码所占大小,如下图所示
可以看见,keil编译后分别有code,RO-data,RW-data,ZI-data四个类别,那么后面的数据就是其大小,这些参数的单位是Byte,几个参数分别代表含义如下:
Code(CODE DATA):代码的大小 ,存储在ROM中,掉电保存
RO(read only data) :常量所占空间 ,只读,存储在ROM中
RW(已初始化可读可写数据段RW DATA) :程序中已经初始化的变量所占空间 ,可读可写变量,既在ROM中,又在RAM中存储
ZI:未初始化的static变量和全局变量以及堆栈所占的空间 ,初始化为0的变量,存储在RAM中
计算公式:
RAM = RW + ZI;
ROM = code + RW + RO;
上述参数和芯片Flash以及SRAM的对应关系是 :
Flash占用大小=Code+RO+RW(前三个之和)
SRAM占用大小=RW+ZI(后两个之和)
以Flash为啥,那么上图编译后的大小就应该是3000+268+48=3316Bytes,也就是3K左右的数据。我这里通过串口上传进行IAP升级,可以看到接收的数据大小是正常的,如下图所示:
关键字:Keil 工程编译 存储位置
引用地址:
Keil工程编译后的程序大小及存储位置说明
推荐阅读最新更新时间:2024-11-10 20:45
单片机keil编译软件怎么防止代码拼写错误
1. 认真听讲,掌握语法规则,例如: (1)汇编语句每行语句结束一般不加符号 (2)C51的关键词大部分都是以有意义的英文单词命名的,例如for ,不能拼写成fro 等等 2. 先记忆,再打字。 3. 中英文键盘切换,记得英文输入模式下打字。 4. 字体改大,便于发现错误,Edit- Configuration- Colors &Fonts- 8051:Edit Asm/C Files - Text- 点击Font右边按钮,修改Size为24 5. 自查和互查,检查的时候要一个字母,一个空格,一个符号逐个检查。 6. 根据Build Output窗口提示的错误行数进行排查。例如: eightledmain.asm(1
[单片机]
解决ads工程转到MDK(keil)可能出现的error
解决ads工程转到MDK(keil)可能出现的error 最近把ADS1.2工程转到MDK4.03出现一些error,罗列了可能出现的error,并给予相关的办法,让大家在以后的转换中尽快搞定 1:error : No section matches selector –no section to be FIRST/LAST. 把原来的Init 代码段名修改成RESET: ;AREA Init,CODE,READONLY AREA RESET,CODE,READONLY 2:error Undefined symbol Main (referred from 2440init.o). error: scatter-lo
[单片机]
KEIL编译错误之xdata空间的代码
在用TFT和DS18B20做一个温度检测系统,利用Keil C51编程时,发现程序逻辑上没有错误,但在连接时却出现了错误,如下: *** ERROR L107: ADDRESS SPACE OVERFLOW SPACE: DATA SEGMENT: ?DT?MAIN LENGTH: 0004H *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: T SEGMENT: ?DT?MAIN *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: TEMPL
[单片机]
使用keil3编程测试程序运行时间
时间是跟晶振频率有关,默认的晶振频率是24MHz;此处的晶振频率一定要与开发板的晶振频率保持一致。 注意:修改后一定要重新进行编译后,再进行测试 1、设置晶振频率的位置: 2、 在24MHz的晶振频率下,程序运行到断点的时间是0.045s 3、我们将晶振频率改为12MHz后,再全速执行到断点处,时间为24MHz的2倍了。
[单片机]
keil利用Breakpoints追踪内存值异常修改分析说明
在开发过程中,经常会遇到内存值被异常篡改的情况。而且,篡改者往往并不是你当前所正在进行调试的部分(即内存异常篡改其实早就存在,只不过现在才凸显出来),这样问题很难跟踪,故利用keil的这一特性,追踪问题。 以下项目举例说明 1. 用电设备,A相电压偏差极值显示63.25%,而此时额定电压为220v,A相单相上电,偏差值不应有这么大偏差值计算公式为: ΔU = ((U - Un) / Un) * 100%; 式中:△U--电压偏差百分比;U一实际电压:Un电网标称电压。 2. 观察ac_data_memory中相应数据显示确实为这么大,考虑数据调试过程中异常,故对到下一日,对时后,数据变为0,1分钟后变为
[单片机]
STM32开发环境(工具)之Keil MDK 介绍
STM32微处理器基于ARM核,所以很多基于ARM嵌入式开发环境都可用于STM32开发平台。开发工具都可用于STM32开发。选择合适的开发环境可以加快开发进度,节省开发成本。本章将先对STM32常用的开发工具Keil MDK和IAR EWARM进行简单介绍,然后结合STM32_SK仿真评估板和STM32F103C的开发板讲解STM32片上资源使用,最后给出一个基于STM32的数据采集器的应用实例。 5.1 Keil MDK介绍 Keil是德国知名软件公司Keil(现已并入ARM 公司)开发的微控制器软件开发平台,是目前ARM内核单片机开发的主流工具。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器在内
[单片机]
keil常见错误和解决方法
1. Warning 280: i :unreferenced local variable 说明局部变量i 在函数中未作任何的存取操作。 解决方法消除函数中i 变量的宣告。 2. Warning 206: Music3 :missing function-prototype 说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用。 解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告。 3. Compling :C:8051MANN.C Error:318:can t open file beep
[单片机]
Keil C51 中使用Printf()进行串口输出
如何使用printf在串口显示信息,有两种办法,因为在keil C51中 printf函数是调用putchar进行数据传送的,而putchar应该是先判断TI是否为1,不为1则等待为1。 如果为1则清0,然后送出一个字符。因此如果你直接使用printf函数,你的程序就会在putchar函数中等待TI为1。这时你的程序就相当于直接死掉了。你可以通过改写putchar函数实现自己的目的。TI相当于是初始化不给赋初值就不干活。 所以第一种办法就是在初始化的时候,给TI赋值为1,比如 void uart_init() { PCON &= 0x7F; //波特率不倍速 SCON = 0x50; //8位数据,可变波特率
[单片机]