IAR编译信息分析

1、怎么设置可以查看单片的内存(消耗)使用状况?

IAR的菜单栏 -->Tools -->IDE Options -->Messages -->Show build messages选择 ALL

1. Tools->option->messages show build messages设置成all

这样可以在编译后看到用了多少个RAM多少Code,中间每个文件使用情况也可以看得到。

2.
Project->Options...(Alt-F7))的Linker->List中勾选Generate
linker map file

这样可以生成map文件,这个就更详细了(需要什么自己勾选)。

3. Project->Options...(Alt-F7))的C/C++ compile
->List中勾选output list file

这样可以看到每个文件编译的细节的list文件,还可以看到反汇编(需要什么自己勾选)

二、编译信息

1、 下面什么意思

4 960 bytes of CODE  memory
4 150 bytes of DATA  memory
44 bytes of CONST memory

4 960 个字节的代码(占FLASH)

4150 个字节的变量数据(占RAM)
44 个字节的常量数据(占FLASH)

生成bin文件的大小= 4960+44

1、
9 486 bytes of CODE memory
  404 bytes of DATA memory (+ 36 absolute )
  520 bytes of CONST memory

1、的括号内表示内存的绝对使用量,对应你设的全局变量大小
2、表示共享的存储空间,和单片机的结构有关

2、提问:

9 176 bytes of CODE  memory
(+    
30 bytes shared)
   568 bytes of CONST memory (+
18 148 bytes shared)
   943 bytes of
DATA  memory
(+    114 bytes
shared)

答:"+ 114 bytes
shared"或linking后的"+114 bytes absolute"指的是您在程序中有144bytes 使用@ operator 或
#pragma location=operator 或__no_init volatile语法定义的数据。

也可以说是可以在汇编中定义的数据。举例:P1OUT在430头文件中就用到了上述语法,当您读写P1OUT时,编译器和链接器就认为您使用了一个上述sahred/absolute数据。
  编译器和链接器并不能真正地辨认出什么是RAM什么是Flash,它们使用DATA(没有指定固定的数据)和CONST/CODE(有指定固定的数据)概念来工作。

原文:http://blog.sina.com.cn/s/blog_4c0cb1c00100vy5n.html

时间: 2024-11-09 00:14:40

IAR编译信息分析的相关文章

STM32的堆与栈与编译信息查看

因为一个项目中使用malloc函数动态分配内存400多个字节,返回为0,分配失败.查找失败原因,为堆空间不足分配导致.查看堆和栈分别设置了2K,按正常情况看应能满足分配空间,原因可能因为栈分配空间不够,导致到堆的内存空间致使,堆的内存空间过小.下面就说一下STM32的RAM区的分配,堆和栈的信息和编译信息查看. 以下引用网上资料 理解堆和栈的区别和KEIL打印信息的理解 (1)栈区(stack):由编译器自动分配和释放,存放函数的参数值.局部变量的值等,其操作方式类似 于数据结构中的栈. (2)

linux下编译原理分析

linux下编译hello.c 程序,使用gcc hello.c,然后./a.out就可以运行:在这个简单的命令后面隐藏了许多复杂的过程,这个过程包括了下面的步骤: ====================================================================================== 预处理: 宏定义展开,所有的#define 在这个阶段都会被展开 预编译命令的处理,包括#if #ifdef 一类的命令 展开#include 的文件,像上面h

maven仓库信息分析站点推荐

maven是java的一个依赖,打包管理的工具,稍微大一点的java项目都需要使用maven. 随着java的壮大,maven仓库越来越大,仓库中的jar包有60多万,各种group,各种构件,各种版本.jar包之间的依赖关系也不容易理清楚,有的jar包有很多个版本,我们很难搞清楚那个版本是更通用,各个版本之间有什么区别. 现在好了内存溢出OutOfMemory.CN开发一个maven内容分析的网站,这里有最近更新的jar包,有group的列表,还有各个版本,以及各个版本在maven中央仓库的引

随机森林 - 寿险客户信息分析

注:  出于职业要求, 本文中所有数字均被人为修改过, 并非真实数字, 很抱歉也不能贴出源代码 目标: 个险客户特征分析 背景: 目前市场部使用的推广活动分析系统只能针对客户调查返回的信息分析,且仅有年龄/性别/婚姻状态/收入四个维度, 预测精度不高.  市场部希望能从现有的寿险客户信息分析出影响他们选择保险产品的关键因素, 借此更有针对性地改进市场推广活动 建模过程: 输入: 从现有上千万的客户信息抽取其个人信息, 清洗后留下100多个特征, 包括婚姻, 年龄, 收入, 身高体重, 职业风险度

javaweb学习总结十九(http协议概述以及http请求信息分析)

一:http协议概述 1:http协议定义 2:使用telnet程序连接web服务器,获取资源 3:http协议:超文本传输协议,它是基于tcp/ip协议,就是建立在tcp/ip之上工作的, http协议前提是必须浏览器与服务器建立连接. 4:http/1.0与http/1.1的区别 telnet连接tomcat服务器演示: http1.0协议: 只与服务器交互了1次,然后就端口连接. http1.1协议: 5:浏览器请求服务器端次数问题 一个浏览器访问服务器,首先拿到html页面,然后发现有图

用javap命令反编译来分析字符串问题

编写Test.java,编译完后生成Test.class文件,然后对该文件执行javap -c Test命令,生成字节码指令,阅读并得出结论 一.s1和s2指向常量池的不同常量 ①java代码 public class Test { public static void main(String[] args) throws IOException { String s1="t"; String s2="m"; } } ②反编译可以看到字节码指令执行如下: Compi

使用IAR编译STM8S 如何生产烧录文件

IAR编译后可以生成的烧录文件格式有4中,如下 第一种是Motorola,其生成文件和STVD生成烧录文件.s19格式一样的,即可以通用 第二种是16进制,keil等等常都用到的: 第三种是二进制的,个人比较少用 第四种是??我也没有用过. IAR中格式选择:按图指示: I 至此,重新编译,即可生成想要的烧录文件及其格式. 使用IAR编译STM8S 如何生产烧录文件,布布扣,bubuko.com

IAR编译STM8S 中的脚位操作对库函数的一点修改

IAR编译STM8S 自带的库函数都知道,IO口中有个每局定义如下: typedef enum { GPIO_PIN_0    = ((u8)0x01),  /*!< Pin 0 selected */ GPIO_PIN_1    = ((u8)0x02),  /*!< Pin 1 selected */ GPIO_PIN_2    = ((u8)0x04),  /*!< Pin 2 selected */ GPIO_PIN_3    = ((u8)0x08),   /*!< Pi

编译结果分析

从编译信息可以看出,我们的代码占用 FLASH 大小为:1364 字节(1028+336),所用的 SRAM 大小为:1336 个字节(12+1324).这里我们解释一下,编译结果里面的几个数据的意义:Code:表示程序所占用 FLASH 的大小(FLASH).RO-data:即 Read Only-data,表示程序定义的常量,如 const 类型(FLASH).RW-data:即 Read Write-data,表示已被初始化的全局变量(SRAM)ZI-data:即 Zero Init-da