IAR中设置和编译信息解析 程序运行耗时 内存分配MAP
2014-04-02 10:32
309 查看
一、设置:
1、怎么设置可以查看单片的内存(消耗)使用状况?
IAR的菜单栏-->Tools-->IDEOptions-->Messages-->Showbuildmessages选择ALL
设置完后IAR点MAKE,没有error的话最后会在Message框显示代码的大小
(菜单栏-->View-->Maessge-->Build)
1.Tools->option->messagesshowbuildmessages设置成all
这样可以在编译后看到用了多少个RAM多少Code,中间每个文件使用情况也可以看得到。
2.Project->Options...(Alt-F7))的Linker->List中勾选Generatelinkermapfile
这样可以生成map文件,这个就更详细了(需要什么自己勾选)。
3.Project->Options...(Alt-F7))的C/C++compile->List中勾选outputlistfile
这样可以看到每个文件编译的细节的list文件,还可以看到反汇编(需要什么自己勾选)。
二、编译信息
1、下面什么意思
4960个字节的代码(占FLASH)
4150个字节的变量数据(占RAM)
44个字节的常量数据(占FLASH)
生成bin文件的大小=4960+44
1、
9486bytesofCODEmemory
404bytesofDATAmemory(+36absolute)
520bytesofCONSTmemory
1、的括号内表示内存的绝对使用量,对应你设的全局变量大小
2、表示共享的存储空间,和单片机的结构有关
2、2011年5月提问:
9176bytesofCODEmemory(+30bytesshared)
568bytesofCONSTmemory(+18148bytesshared)
943bytesofDATAmemory(+114bytesshared)
在软件仿真下,可以看到整个程序走的时间,当语言然能看到C语言的时间了,单步走,就知道一条C的CPU周期,乘周期时间125NS,就是一条指令的周期了!
2012.2.20IAR查看程序指令代码所花的时间
软件仿真设置:Project————Options————Debugger————Driver选Simulator就可以了。
然后View——Regstrers的CPURegstrers的CYCLECOUNTER的值!
软件仿真时计算两断点CYCLECOUNTER(在CPUregisters中)的差值,乘以指令周期(MCLK)
2012.6.28各函数运行速度比对
原文:http://www.iartools.com/Info_ArticleList_Show.asp?ArticleId=147
1、在VIEW中选择PROFILING开打刨析记录。启动程序全速运行,当运行到一个断点或程序结束时,窗口中将显示对当年程序所有函数运行的刨析记录结果
2、代码覆盖分析:
代码覆盖分析用于帮助用户确认是否所有程序代码都得到执行,这对于鉴别程序代码中是否有不能被执行的部分特别有用。打开VIEW-CODECOVERAGE窗口,如图9显示的是当前代码覆盖分析状态报告,即哪部分代码在分析开始后至少执行了一次。
3、C-SPY可以在调试过程中随时显示整个调用链,跟踪显示当前调用函数内容,以方便调试和修改源代码中的错误。在VIEW-CALLSTACK打开调用堆栈窗口其中显示的是程序调用过程中函数调用的列表。并将当前函数置顶。
4、增加调试功能
Debugger选项配置中的Plugins选项卡,用于指定在调试阶段需要加载的C-SPY插件模块并启动其功能。例如选用实时操作系统RTOS插件模块,应用任务列表,队列等RTOS特定组件,可以使用户对基于实时操作系统上的应用程序有更全面的控制功能,同时使调试任务变的更轻松。
三、跳到函数、变量定义、Gotodefinitionof
一般IAR默认是不可以能过右键直接查找变量、函数的定义的。
方法1、你选中一个函数名在上面点右键发现“Gotodefinitionof……”是灰色的,无法找到函数的定义处。但是,IAR是支持快速查找变量、类型、函数甚至是宏定义功能的。设置方法如下:
1、打开工程,在菜单栏的【TOOLS】项下,选择【options...】
2、弹出的IDEoptions对话框中选择Project选项卡,勾选“Generatebrowseinformation"
3、设置完点击【确定】即可生效。
这时再来查找函数的定义,查找时先将鼠标在函数名上双击,定位光标到函数名字串,再右键弹出快捷菜单。发现原先灰色的“Gotodefinitionofuart0Send”选项已经可选了。在单击“GotodefinitionofdummyInterrupt”后,IDE界面直接跳转显示到函数定义的地方。
方法2、
在工程的C编译器选项里的预编译添加$TOOLKIT_DIR$\inc可以搞定。
深入剖析之通过IARMAP文件查看目标文件内存分配
查看映象文件
检查project1.map文件,观察段是如何定义以及代码是怎样放置在存贮器中的。一个映象文件主要包含以下几点信息:
1、怎么设置可以查看单片的内存(消耗)使用状况?
IAR的菜单栏-->Tools-->IDEOptions-->Messages-->Showbuildmessages选择ALL
设置完后IAR点MAKE,没有error的话最后会在Message框显示代码的大小
(菜单栏-->View-->Maessge-->Build)
1.Tools->option->messagesshowbuildmessages设置成all
这样可以在编译后看到用了多少个RAM多少Code,中间每个文件使用情况也可以看得到。
2.Project->Options...(Alt-F7))的Linker->List中勾选Generatelinkermapfile
这样可以生成map文件,这个就更详细了(需要什么自己勾选)。
3.Project->Options...(Alt-F7))的C/C++compile->List中勾选outputlistfile
这样可以看到每个文件编译的细节的list文件,还可以看到反汇编(需要什么自己勾选)。
二、编译信息
1、下面什么意思
4960bytesofCODEmemory 4150bytesofDATAmemory 44bytesofCONSTmemory |
4150个字节的变量数据(占RAM)
44个字节的常量数据(占FLASH)
生成bin文件的大小=4960+44
1、
9486bytesofCODEmemory
404bytesofDATAmemory(+36absolute)
520bytesofCONSTmemory
1、的括号内表示内存的绝对使用量,对应你设的全局变量大小
2、表示共享的存储空间,和单片机的结构有关
2、2011年5月提问:
9176bytesofCODEmemory(+30bytesshared)
568bytesofCONSTmemory(+18148bytesshared)
943bytesofDATAmemory(+114bytesshared)
答:"+114bytesshared"或linking后的"+114bytesabsolute"指的是您在程序中有144bytes使用@operator或#pragmalocation=operator或__no_initvolatile语法定义的数据。也可以说是可以在汇编中定义的数据。举例:P1OUT在430头文件中就用到了上述语法,当您读写P1OUT时,编译器和链接器就认为您使用了一个上述sahred/absolute数据。编译器和链接器并不能真正地辨认出什么是RAM什么是Flash,它们使用DATA(没有指定固定的数据)和CONST/CODE(有指定固定的数据)概念来工作。http://zhidao.baidu.com/question/268793362.html
在软件仿真下,可以看到整个程序走的时间,当语言然能看到C语言的时间了,单步走,就知道一条C的CPU周期,乘周期时间125NS,就是一条指令的周期了!
2012.2.20IAR查看程序指令代码所花的时间
软件仿真设置:Project————Options————Debugger————Driver选Simulator就可以了。
然后View——Regstrers的CPURegstrers的CYCLECOUNTER的值!
软件仿真时计算两断点CYCLECOUNTER(在CPUregisters中)的差值,乘以指令周期(MCLK)
2012.6.28各函数运行速度比对
原文:
1、在VIEW中选择PROFILING开打刨析记录。启动程序全速运行,当运行到一个断点或程序结束时,窗口中将显示对当年程序所有函数运行的刨析记录结果
2、代码覆盖分析:
代码覆盖分析用于帮助用户确认是否所有程序代码都得到执行,这对于鉴别程序代码中是否有不能被执行的部分特别有用。打开VIEW-CODECOVERAGE窗口,如图9显示的是当前代码覆盖分析状态报告,即哪部分代码在分析开始后至少执行了一次。
3、C-SPY可以在调试过程中随时显示整个调用链,跟踪显示当前调用函数内容,以方便调试和修改源代码中的错误。在VIEW-CALLSTACK打开调用堆栈窗口其中显示的是程序调用过程中函数调用的列表。并将当前函数置顶。
4、增加调试功能
Debugger选项配置中的Plugins选项卡,用于指定在调试阶段需要加载的C-SPY插件模块并启动其功能。例如选用实时操作系统RTOS插件模块,应用任务列表,队列等RTOS特定组件,可以使用户对基于实时操作系统上的应用程序有更全面的控制功能,同时使调试任务变的更轻松。
三、跳到函数、变量定义、Gotodefinitionof
一般IAR默认是不可以能过右键直接查找变量、函数的定义的。
方法1、你选中一个函数名在上面点右键发现“Gotodefinitionof……”是灰色的,无法找到函数的定义处。但是,IAR是支持快速查找变量、类型、函数甚至是宏定义功能的。设置方法如下:
1、打开工程,在菜单栏的【TOOLS】项下,选择【options...】
2、弹出的IDEoptions对话框中选择Project选项卡,勾选“Generatebrowseinformation"
3、设置完点击【确定】即可生效。
这时再来查找函数的定义,查找时先将鼠标在函数名上双击,定位光标到函数名字串,再右键弹出快捷菜单。发现原先灰色的“Gotodefinitionofuart0Send”选项已经可选了。在单击“GotodefinitionofdummyInterrupt”后,IDE界面直接跳转显示到函数定义的地方。
方法2、
在工程的C编译器选项里的预编译添加$TOOLKIT_DIR$\inc可以搞定。
深入剖析之通过IARMAP文件查看目标文件内存分配
查看映象文件
检查project1.map文件,观察段是如何定义以及代码是怎样放置在存贮器中的。一个映象文件主要包含以下几点信息:
相关文章推荐
- 【IAR】设置和编译信息解析 程序运行耗时 内存分配MAP
- 设置和编译信息解析 程序运行耗时 内存分配MAP
- 程序及其运行时内存分配解析
- 程序编译后运行时的内存分配
- 程序编译后运行时的内存分配-转
- 程序编译后运行时内存分配
- C/C++程序编译时和运行时内存区域分配
- 程序编译后运行时的内存分配
- 1.22关于new动作的分析(编译时加载类信息,运行时分配内存)
- Android(安卓)内存分配机制详解 不需要关闭后台运行程序
- 为golang程序使用pprof远程查看httpserver运行堆栈,cpu耗时等信息
- C/C++编译的程序占用的内存情况详细解析
- java程序运行时内存分配详解
- java程序运行时内存分配详解
- 自己动手编译、运行Java程序,解析package的作用
- C/C++变量编译时运行时分配内存
- 由C/C++编译的程序占用的内存分配-堆与栈的区别
- 如何用命令行(CMD)编译运行C 程序—环境变量的设置
- 获取java程序运行时内存信息
- java程序运行时的内存分配