完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
RealView MDK中生成带调试信息和不带调试信息的AXF文件 一、问题: 在使用RealView MDK和ULink调试时常常发现生成的可执行文件axf远远大于片上SRAM的大小,但却可以完全在片上SRAM中调试而无须占用其它空间,例如SOC AT91RM9200片上SRAM大小为16KB,某个例程在默认配置下编译链接之后生成的可执行文件大小大于200KB,但完全可以选择在片上SRAM的调试方式,即仅占用片上16KB的片上SRAM而无须占用其它空间,这是为什么呢? 二、原因: 原因在于生成的AXF文件可能带有调试信息,这些调试信息在调试时是不必下到SRAM中去的。真正下到SRAM中的信息仅仅是可执行代码。其实去掉调试信息的可执行代码大小会大大减小。 三、如何生成不带调试信息的AXF文件: 在默认配置下一般生成的AXF文件带有调试信息,我们可以用以下方法去掉调试信息。 在Project->Option->Output 中去掉Debug Information选项前面的对勾。点击确定之后,再重新编译链接即可看到生成的axf文件大小大大减小。实际上我们在调试时需要下到SRAM中的代码就是这个文件的内容,对于那些调试信息是不下到SRAM中的,这也就是为什么能调试大小远大于SRAM容量的axf文件的原因所在。以下两个图分别是将带有调试信息和不带调试信息的AXF文件下到SRAM中调试的汇编代码情况: 图一 带调试信息的AXF文件调试反汇编情况 图二 不带调试信息的AXF文件调试反汇编情况 调试信息包含以下内容: 1、 可以将源代码包括注释夹在反汇编代码中,并且我们可以随时切换到源代码中调试, 2、 我们还可以对程序中的函数调用情况进行跟踪(用Watch & Call Stack Window查看)。 3、 对变量进行跟踪(用Watch & Call Stack Window查看)。 而不带调试信息则没有这些功能。因此带调试信息的AXF文件远大于不带调试信息的AXF文件。 在做AT91RM9200的ROM_BootLoader_test实验时,如果加上调试信息,生成的AXF文件大小将在200KB以上,而去掉调试信息时,生成的AXF文件大小仅8KB,而AT91RM9200片上SRAM大小16KB,在调试带调试信息的AXF文件时,实际上下到SRAM中的内容仅只有8KB。这也就是为什么可以调试远远大于片上SRAM大小的axf文件之原因所在。 四 如何减少调试信息 如果希望带调试信息,那么在目标文件和库中减少调试信息是非常有益的,减少调试信息可以减少目标文件和库的大小、加快了链接速度、减小最终镜象的代码。以下几种方法可用来减少每个源文件产生的调试信息: 2 避免在头文件中条件使用#define,链接器不能移除共用的调试部分,除非这些部分是完全一样的; 2 更改C/C++源文件,以使#included包含的所有头文件有相同的顺序; 2 将头文件信息分成几个小块,也就是,尽量使用数量较多的小头文件而不使用较大的单一头文件,这有利于链接器能获取更多的通用块; 2 在程序中只包含那些必须要用到的头文件; 2 避免重复包含头文件,可使用编译器选项--remarks来产生警告信息; 2 使用编译命令行选项--no_debug_macros以从调试表中丢弃预处理宏定义。 |
|
相关推荐 |
|
迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-配置创建私有配置文件
777 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之Makefile修改
885 浏览 0 评论
飞凌嵌入式-ELFBOARD-ELF 2硬件知识分享之Debug
968 浏览 1 评论
飞凌嵌入式ElfBoard ELF 1板卡-烧录流程介绍之单独更新内核
2528 浏览 1 评论
飞凌嵌入式ElfBoard ELF 1板卡-TF卡烧录流程之烧写过程
1072 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 09:36 , Processed in 0.370923 second(s), Total 34, Slave 28 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号