当前位置:首页 > 公众号精选 > 嵌入式案例Show
[导读]在基于KEIL的项目开发过程中,会遇变量值与预设的运行结果不一样,在挂上仿真器debug了n个小时,排除了所有逻辑问题后,发现似乎这个值被意外更改了,但是要找到是谁修改了他却不好下手。

01

前言

在基于KEIL的项目开发过程中,会遇变量值与预设的运行结果不一样,在挂上仿真器debug了n个小时,排除了所有逻辑问题后,发现似乎这个值被意外更改了,但是要找到是谁修改了他却不好下手。现提出一种查找此类问题的方法——利用map文件查找越界。

02

MAP文件输出

首先需要设置map的输出,在MDK-ARM的Option for Target—Output Listing的标签页中设置需要输出的map文件内容,如图:

03

MAP文件分析


在工程编译完成后在设置的目录下会生成项目名.map的文件。大致来说map到可以分为如下几个部分:

  • Section Cross References:模块、段的交叉引用关系;

  • Removing Unused input   sections from the image:移除未使用的段;

  • Image Symbol  Table:映射符号表,列出了各个段所存储的对应地址;

  • Memory Map of the image:映像的内存分布;

  • Image component sizes:映像组组件大小。

解决越界数据修改问题我们主要关注的是Image Symbol Table部分。例如:

含义为:

  • Symbol Name:符号名称

  • Value:存储对应的地址;

    0x0800xxxx指存储在FLASH里面的代码、变量等。

    0x2000xxxx指存储在内存RAM中的变量Data等。

  • Ov Type:符号对应的类型

符号类型大概有几种:Number、Section、Thumb Code、Data等;

  • Size:存储大小

  • Object(Section):当前符号所在段名

现假设在调试中的一个全局变量u8 g_testFlag数值与逻辑总是不符,那么就可以怀疑被意外修改了,在map文件中搜索g_testFlag,看到在g_testFlag所在地址前是一个u8 upgradeFileName[15]。那么问题就很可能是upgradeFileName操作是越界了。

查找代码中发现存在如下操作,

memcpy(upgradeFileName,"MyUpgradeFile001.bin",21);

upgradeFileName被memcpy后,越过了它的size范围,而修改了邻近地址的g_testFlag。




免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Intel公司1980年推出了MCS-51系列单片机:集成 8位CPU、4K字节ROM、128字节RAM、4个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K,并有控制功能较强的布尔处理器。 80C5...

关键字: C51 KEIL 编程

c上标3下标5怎么算用计算机,c上标3下标5怎么算

关键字: C51 KEIL

GD32F405系列互联型产品采用全新工艺制程设计,整合了强大的运算效能和丰富的外设接口。处理器主频可达168MHz,并提供了完整的DSP指令集,并行计算能力和专用浮点运算单元(FPU)。

关键字: gd32f405rgt6 C KEIL

CANopen学习笔记

关键字: canopen C KEIL

本程序是在基于STC12C5A60S2芯片基础上采用硬件PCA/PWM模块编写。

关键字: stc12c5a60s2 51单片机 C KEIL 头文件

在众多的51系列单片机中,要算国内STC 公司的1T增强系列更具有竞争力,因他不但和8051指令、管脚完全兼容,而且其片内的具有大容量程序存储器且是FLASH工艺的,如STC12C5A60S2单片机内部就自带高达60K...

关键字: stc12c5a60s2 51单片机 C KEIL

STC系列单片机中的STC89LE516AD/X2提供了8路8位精度的高速A/D转换器,位于P1口上,从而省去了片外ADC的麻烦。这8路ADC为电压输入型,可做按键扫描,电池电压检测,频谱检测等。ADC转换过程需要17个...

关键字: ad C KEIL

STC12C5A60S2单片机实现ISP自动下载

关键字: C KEIL 芯片 烧录

STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机。它是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,...

关键字: C KEIL 芯片 引脚图

STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机。它是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,...

关键字: C KEIL 芯片
关闭
关闭