英飞凌XC2000 系列单片机的反汇编步骤

2015-11-28 03:07胡瑞忠
山西电子技术 2015年6期
关键词:英飞凌代码调试

胡瑞忠

(山西省电子工业科学研究所,山西 太原 030006)

为了适应汽车级应用环境,英飞凌单片机经过了严格的、高于一般工业应用的测试,确保了其在汽车电子设备中的可靠耐久的操作。特别是英飞凌功能强大和高度集成的XC2000 家族是英飞凌新一代16/32 位微控制器,特别为汽车嵌入式系统应用精心设计[2]。基于上述原因英飞凌XC2000 系列单片机在汽车行业的应用越来越广泛。如何更好的学习和掌握英飞凌XC2000 单片机的编程技巧和方法,成为了许多项目工程师的首要任务。

从一个现有的英飞凌单片机应用系统中读出目标代码进行反汇编,可以分析原程序的设计思想。同时,反汇编后,我们可以更快的学习和了解英飞凌单片机的编程原则和一些常规用法,也可更快捷的进行逆向工程的设计和开发。本文将重点介绍一种针对XC2000 单片机的简便快捷的反汇编方法。

1 怎样获取程序的目标代码

XC2000 单片机的内存空间是冯·诺以曼结构[1],即数据和程序在同一个线性地址空间。该单片机的地址空间为16 MB。最大的外挂存储空间为12 MB。该系列单片机多为Flash 结构的内部程序代码存储形式,Flash 存储范围从64 K~832 K。在一般的汽车电子产品的应用中,片内的Flash 已经能够满足需求,不需要再外挂片外存储器。

因此本文仅介绍片内目标代码的获取方式。XC2000 单片机的片上Flash 的起始地址为C00000H。

利用英飞凌XC2000 家族微控制器的免费程序烧录工具Memtool 就可以完成目标代码的读取。首先要把目标单片机从产品的PCB 板焊下来,再将它重新焊接到英飞凌提供的XC2000 仿真调试板上(型号为Easy Kit XC2XXX)。随后将调试板与计算机进行正确连接。打开Memtool,按照XC2000 单片机的具体型号,按照正常烧录程序的步骤设定该软件。当计算机与单片机建立通讯后,会出现界面如图1所示。

图1 Memtool 的界面

如果在“index”列有蓝色的小锁头出现,那该单片机已加密,无法读取目标代码。如果没有小锁头出现,就点击“Read”按钮。然后根据单片机Flash 的容量和起始地址,设定读取的地址范围,开始读取目标代码。读取完后,点击“Edit”,然后保存.H86 文件,目标代码读取完成。

2 怎样进行反汇编

在获得正确的目标代码后,进行反汇编有2 种方式可供选择。

1)如果代码容量比较小,可以采用人工反汇编。XC2000 系列单片机的汇编指令在<<Instruction Set Manual—for the C166 Family of Infineon 16-Bit Single-Chip Microcontrollers >>一书中有详细介绍。但在一般情况下,该方式仅用来订正某一条有争议的汇编指令,作为自动反汇编的一个补充。

2)一般的反汇编的步骤如下:

a)将英飞凌提供的XC2000 仿真调试板(型号为Easy Kit XC2XXX)与计算机进行正确连接。仿真板上的单片机必须是与读取目标代码时相同型号的单片机,用Memtool 烧录工具,将目标代码写入。当然如果不怕损坏,也可以直接用刚刚读取代码的单片机。

b)按照英飞凌XC2000 系列单片机的C 程序开发流程。先由数字应用虚拟工程师DAvE 建立一个这种型号单片机的工程文件* .Dav[2]。再将DAvE 目标工程文件* .dav 装载到Keil 中,自动生成一个包含main{}函数和头文件的C 工程文件* .prj。该工程可以是一个最简工程,不必设置太多模块。

c)如图2 所示,设置好Keil 的Debug 调试器。并在“Flash Download Options”中正确添加该型号单片机的Flash地址范围。将该工程正确编译,但千万不要“Load”编译后的代码。然后点击“d”进入Debug 调试界面。

图2 debug 调试器的设置

d)在该debug 调试界面的“反汇编(Disassembly)”栏中,就显示出了目标代码的汇编语言及Flash 单元地址和对应的机器码。汇编程序的起始地址为00C00000H,该存储器为线性地址空间,结束地址可根据该单片机的Flash 容量计算得到。由于没有给单片机“Load”本工程的文件,所以下方C 语言文件那一栏和反汇编栏的数据没有关系。

图3 debug 界面

e)将所有反汇编指令拷贝到EXCEL 文件中,仔细研读。再将这些指令归纳为C 语言指令,重新写回目标工程中。这就实现了平常所说的逆向工程,同时还可以根据自己的控制思路,改善原有的程序,增加和改良一些系统功能。

综上所诉,本文简单介绍了汽车电子产品中一款主流单片机的反汇编过程。希望对研究和使用该款单片机的初级使用者,有一些帮助和提高。

[1]程军.亿恒(西门子)C166 系列——16 位单片机原理与开发[M].北京:北京航空航天大学出版社,2001.

[2]汽车嵌入式微控制器的工作原理与应用——英飞凌XC2000 家族MCU[OL].www.infineon.com,2013-09.

猜你喜欢
英飞凌代码调试
创世代码
创世代码
创世代码
创世代码
基于航拍无人机的设计与调试
FOCAS功能在机床调试中的开发与应用
无线通信中频线路窄带临界调试法及其应用
调压柜的调试与试运行探讨
英飞凌推出新款大功率光触发晶闸管 首次集成保护功能
英飞凌新一代CoolMOSTM可减少50%的开关损耗;专用EiceDRIVERTM IC可进一步节省空间和设计成本