首页> 中国专利> 一种针对嵌入式系统的程序调试方法及嵌入式系统

一种针对嵌入式系统的程序调试方法及嵌入式系统

摘要

本发明提供了一种针对嵌入式系统的程序调试方法及嵌入式系统,属于程序调试领域。该方法包括:嵌入式系统的CPU通过其通讯口接收来自调试主机的高层调试指令,并将其转换为底层调试指令;测试接入端口控制器将底层调试指令对应的数据预先存储到嵌入式实时在线电路仿真器的寄存器中;嵌入式实时在线电路仿真器将所述寄存器中预先存储的数据与所述CPU在程序实时运行时的数据进行比对,当两者一致时,则使程序进入调试模式;之后CPU将程序实时运行产生的数据经协议转换后通过其通讯口传输给调试主机。本发明由CPU通过其通讯口传输高层调试指令并将其转换成底层调试指令,以及在进入调试模式后,由其通讯口输出数据,降低了调试成本。

著录项

  • 公开/公告号CN102662835A

    专利类型发明专利

  • 公开/公告日2012-09-12

    原文格式PDF

  • 申请/专利号CN201210081161.9

  • 发明设计人 王泰运;林淑琴;方嘉崧;

    申请日2012-03-23

  • 分类号G06F11/36;

  • 代理机构北京德琦知识产权代理有限公司;

  • 代理人牛峥

  • 地址 中国台湾新竹科学工业园区创新一路19-1号

  • 入库时间 2023-12-18 06:28:50

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-05-10

    未缴年费专利权终止 IPC(主分类):G06F11/36 授权公告日:20151028 终止日期:20160323 申请日:20120323

    专利权的终止

  • 2015-10-28

    授权

    授权

  • 2014-03-26

    专利申请权的转移 IPC(主分类):G06F11/36 变更前: 变更后: 登记生效日:20140303 申请日:20120323

    专利申请权、专利权的转移

  • 2012-11-07

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20120323

    实质审查的生效

  • 2012-09-12

    公开

    公开

说明书

技术领域

本发明涉及程序调试技术领域,尤其涉及一种针对嵌入式系统的程序调 试方法及嵌入式系统。

背景技术

程序调试的主要工作是跟踪变量的赋值过程,以及查看内存堆栈的内 容,查看这些内容的目的在于观察变量的赋值过程与赋值情况,从而达到调 试的目的。目前,程序调试除了有软件调试方式外,还有硬件调试。

所谓硬件调试是指在计算上调试软件的配合下实现的一种交叉调试过 程。硬件调试的过程主要是:计算机软件把编译好的程序通过串行口、并行 口或者USB口传输到仿真器中,仿真器仿真全部的目标板资源如所有的目标 板接口且真实的引脚输出。仿真器可以接入实际的电路中,然后像目标板一 样执行。同时,仿真器也会返回目标板内部内存与时序等情况给计算机的辅 助软件,这样,通过利用调试软件设置单步、全速、运行到光标的常规调试 指令就可以利用辅助软件在计算机上观测到程序真实的执行情况。

现有技术中,常用的针对嵌入式系统的硬件调试方式包括采用在线仿真 器(ICE,In-Circuit Emulator)方式以及采用在线调试器(ICD,In-Circuit  Debug)方式。由于嵌入式系统应用的一个显著特点是与现实世界中的硬件 直接相关,存在各种异变和事先未知的变化,从而给微处理器的指令执行带 来各种不确定因素,这种不确定性在目前情况下只有通过在线仿真器ICD才 有可能发现。但是,由于在线仿真器ICE的发展远远落后于CPU的发展, 其运行速度也难以跟上CPU的主频,使得其在模拟CPU的同时向外输送调 试信息变得较为困难。另外,一种CPU就需要与之对应的专用在线仿真器 ICE,这样,也就导致开发成本较高。针对这些问题,业界开发出在线仿真 器ICD在线调试方式,在这种调试方式中,通过在芯片中内嵌一在线仿真器 ICE,同时利用在开发板上引出的调试端口,通过一具有核心硬件的在线调 试器ICE的接口盒即在线仿真器ICD将来自主机的高层调试指令转换成该调 试端口可以发送或接收的调试指令,从而完成调试过程。目前,已有ARM 公司、MOTO公司开发出相应的在线调试器ICD调试方案。

下面以ARM公司开发ARM9基于JTAG端口的ICD程序调试方案对通 用的在线调试器ICD方案进行说明。联合测试行动小组(JTAG,Joint Test  Action Group)是一种国际标准测试协议(IEEE 1149.1兼容),通常所说的 JTAG端口大致分两类,一类用于测试芯片的电气特性,检测芯片是否有问 题;另一类用于程序的调试(Debug);JTAG端口最初是用来对芯片进行测 试的,但后来发现也可以用JTAG端口对程序进行调试。现在多数的高级器 件都支持JTAG协议,如与JTAG端口兼容的器件可以是微处理器(MPU, micro-processing unit)、微控制器(MCU,micro-controlling unit)、可编程 逻辑器件(PLD,programmable logic device)、现场可编程门阵列(Field- Programmable Gate Array,FPGA)、数字信号处理器(DSP,Digital signal  processor)、特殊应用集成电路(ASIC,Application Specific Integrated Circuit) 或其它符合IEEE1149.1规范的芯片。标准的JTAG端口是4线:调试模式 选择(TMS,Test Mode Selection)信号、调试时钟输入(TCK,Test Clock Input) 信号、调试数据串行输入(TDI,Test Data Input)信号、调试数据串行输出 (TDO,Test Data Output)信号,只要通过调试时钟输入信号TCK和调试模 式选择信号TMS的设置即可实现调试数据串行输入信号TDI和调试数据串 行输出信号TDO的控制。调试时钟输入信号TCK用于输入调试时钟,调 试时钟输入信号TCK上升沿时将数据通过调试数据串行输入信号TDI输入 JTAG端口;调试时钟输入信号TCK下降沿数据通过调试数据串行输出信号 TDO从JTAG端口输出;调试时钟输入信号TCK上升沿时调试模式选择信 号TMS用来设置JTAG端口处于某种特定的调试模式,也就是选择对应的扫 描链使扫描链对应的芯片与外界IO隔离开来,避免外界IO干扰,以对该扫 描链对应的芯片进行数据输入输出,而扫描链在非调试状态下,对于芯片来 说是透明的,并不影响芯片的正常工作。

图1为ARM9的ICD硬件调试的硬件连接示意图。

PC主机101作为调试主机(调试主机也可以是工控机、工作站),发 出高层调试指令,如设置断点、设置观察点、访问内存等。

在线调试器ICD 102作为协议转换器,将调试主机发出的高层调试指令 转换为底层的调试指令,这些指令再通过JTAG端口103就可以直接利用嵌 入式ICE-RT 107与目标CPU106对话。在线调试器ICD102实际上在PC主 机101和JTAG端口103之间架起一座桥梁,用于实现PC端高层调试指令 与JTAG协议的转换,将PC端的并行数据转换为可通过JTAG端口传输的 串行数据,例如将PC端的一次鼠标点击转换成JTAG端口传输的数据,并 最终依据转换后的数据通过嵌入式ICE-RT107实现对CPU106的控制。

嵌入式实时在线电路仿真器(ICE-RT,In-Circuit Emulator-Realtime)107 可以实现实时寻址、断点、单步以及对CPU 106的控制,使用边界扫描链和 JTAG端口103与PC主机101交互信息,嵌入式ICE-RT107包括断点和观 察点寄存器和比较器,断点和观察点寄存器分别用来存储断点和观察点的地 址,而比较器则是将存储的断点和观察点地址与CPU106运行程序实时的数 据地址进行比对,确定是否进入调试模式。嵌入式ICE-RT 107使运行的代码 能够停下来以便调试,当遇到断点或观察点时,处理器停下来并进入调试状 态。一旦进入调试状态,就可使用第一扫描链105强制指令进入指令流水线, 检查处理器的寄存器。对所有寄存器的数据进行存储,将它们的值送到数据 总线,在数据总线上再启用第一扫描链105、在线调试器ICD102转换后输送 给PC主机101。在调试装置中可以通过特定的arm/thumb指令来读写CPU 的内部寄存器和修改内存的内容。

测试接入端口(TAP,Test Access Port)控制器104,通过JTAG端口 103的底层调试指令来控制和操作扫描链。在ARM中,第一扫描链105和第 二扫描链108最常用,第一扫描链105设置在CPU 106的周围,通过第一扫 描链105访问通用的寄存器和系统存储空间,第二扫描链108设置在嵌入式 ICE-RT107的周围,通过第二扫描链108来访问嵌入式ICE-RT107内部的寄 存器。

利用图1所示的硬件连接进行ICD调试流程如图2所示,包括如下步骤:

步骤201:PC主机101产生高层调试指令(如设置断点)。

步骤202:ICD 102将该高层调试指令转换成JTAG端口103的调试模式 选择信号TMS、调试时钟输入信号TCK、调试数据串行输入信号TDI、调试 数据串行输出信号TDO并发送给TAP控制器104,这些信号组成可被ARM 识别的底层调试指令。

步骤203:TAP控制器104根据调试模式选择信号TMS启用第二扫描链 108,将第二扫描链108连接在调试数据串行输入信号TDI和调试数据串行 输出信号TDO对应的信号线之间,并根据调试模式选择信号TMS和调试时 钟输入信号TCK信号通过调试数据串行输入信号TDI对应的信号线将底层 调试指令对应的数据(例如:断点地址)预先存储到嵌入式ICE-RT107的寄 存器中。

步骤204:嵌入式ICE-RT107中对CPU 106在运行程序时产生的数据进 行监控,并利用其内的一比较器将预先存储的数据与CPU 106在程序实时运 行数据进行比对,当两者一致时,则进入程序调试。

步骤205:根据PC主机101产生的另一高层调试指令(如查看内存), 经在线调试器ICD 102转换后产生底层调试指令,该底层调试指令经过TAP 控制器104后将对应的第一扫描链105置于调试数据串行输入信号TDI和调 试数据串行输出信号TDO对应的信号线之间,CPU 106运行程序产生的数据 经过调试数据串行输出信号TDO对应的信号线输出到JTAG端口103,再由 在线调试器ICD 102转换成可通过JTAG端口103输送到PC主机101的数 据。

JTAG调试的关键就在于将所需要的指令寄存器或者数据寄存器至于调 试数据串行输入信号TDI和调试数据串行输出信号TDO对应的信号线之间, 然后通过调试模式选择信号TMS和调试时钟输入信号TCK信号来读写这些 寄存器的内容,而调试的本质是通过设置这些寄存器的值来达到启动调试、 设置断点、观察给定地址值等功能。如果要启用第二扫描链的话,在调试时 钟输入信号TCK上升沿调试模式选择信号TMS信号有效时,首先将相应的 指令写入到指令寄存器中,访问被该指令连接到调试数据串行输入信号TDI、 调试数据串行输出信号TDO对应的信号线之间的扫描链选择寄存器,通过 将“2”(扫描链标识)写入扫描链选择寄存器中,从而将第二扫描链连接在 调试数据串行输入信号TDI、调试数据串行输出信号TDO对应的信号线之 间。底层调试指令对应的地址通过调试数据串行输入信号TDI写入到对应的 扫描链,该地址通过调试数据串行输出信号TDO从对应的寄存器中读出, 以与CPU运行程序产生的地址进行比对。在进入调试模式后,底层调试指令 对应的数据、地址、控制字通过调试数据串行输入信号TDI写入到对应的扫 描链,之后,CPU根据这些数据、地址、控制字运行程序产生的对应数据、 地址、控制字通过调试数据串行输出信号TDO输出。

在ICD调试方案中,必不可少的要用到在线调试器ICD,以将高端调试 指令转换为调试端口(如JTAG端口)可传输的底层调试指令的专用ICD, 必须通过PC→在线调试器ICD→JTAG端口→TAP控制器→扫描链→嵌入式 ICE-RT→CPU的路径来进行调试指令;在调试过程中,将CPU运行程序产 生的数据经过在线调试器ICD转换后在PC端呈现给调试者。由于这种在线 调试器ICD的购置成本动辄万元,有的高达十几万元,从而使得程序开发的 成本较高。另外,由于要使用这种专用在线调试器ICD连接在调试主机和调 试目标之间,所以在调试目标的开发板上必须要设置对应的端口引线,增加 了开发板得封装成本。

发明内容

本发明提供了一种嵌入式系统及针对嵌入式系统的硬件调试方法,可极 大降低针对嵌入式系统的硬件调试的成本。

为克服现有技术的上述缺陷,本发明提供了一种针对嵌入式系统的程序 调试方法,包括:

A1、嵌入式系统的CPU通过其通讯口接收来自调试主机的高层调试指令, 并将其转换为底层调试指令;

B1、测试接入端口控制器将底层调试指令对应的数据预先存储到嵌入式实 时在线电路仿真器的寄存器中;

C1、嵌入式实时在线电路仿真器将所述寄存器中预先存储的数据与所述 CPU在程序实时运行时的数据进行比对,当两者一致时,则使程序进入调试模 式并执行步骤D1;否则,继续执行步骤C1;

D1、所述CPU将程序实时运行产生的数据经协议转换后通过其通讯口 传输给调试主机。

为克服现有技术的上述缺陷,本发明提供了另一种针对嵌入式系统的程 序调试方法,包括:

A2、嵌入式系统的第一CPU通过其通讯口接收来自调试主机的高层调试指 令,并将其转换为底层调试指令;

B2、测试接入端口控制器将底层调试指令对应的数据预先存储到嵌入式实 时在线电路仿真器的寄存器中;

C2、嵌入式实时在线电路仿真器将所述寄存器中预先存储的数据与第二 CPU在程序实时运行的数据进行比对,当两者一致时,则使程序进入调试模式 并执行步骤D2,否则继续执行步骤C2;

D2、第一CPU将第二CPU程序实时运行产生的数据经协议转换后通过其 通讯口输出到调试主机。

为克服现有技术的上述缺陷,本发明提供了又一种针对嵌入式系统的程序调 试方法,包括:

A3、嵌入式系统的CPU通过其通讯口接收来自调试主机的高层调试指令, 并将其转换为底层调试指令,和/或,嵌入式系统外接的在线调试器对来自调试 主机的高层调试指令转换生成底层调试指令;

B3、数据选择开关选择来自嵌入式系统外接的在线调试器生成的、经调试 端口传输的底层调试指令,或者嵌入式系统的CPU生成的底层调试指令至测试 接入端口控制器;

C3、测试接入端口控制器将底层调试指令对应的数据预先存储到嵌入式实 时在线电路仿真器的寄存器中;

D3、嵌入式实时在线电路仿真器将所述寄存器中预先存储的数据与CPU在 程序实时运行时的数据进行比对,当两者一致时,则使程序进入调试模式并执 行步骤E3;否则,继续执行步骤D3;

E3、将CPU程序实时运行产生的数据通过数据选择开关选择发送给所 述CPU并通过所述CPU的通讯口传输给调试主机,或者发送给嵌入式系统 外接的在线调试器进行协议转换后传输给调试主机。

为克服现有技术的上述缺陷,本发明提供了又一种针对嵌入式系统的程 序调试方法,包括:

A4、嵌入式系统的第一CPU通过其通讯口接收来自调试主机的高层调试指 令,并将其转换为底层调试指令,和/或,嵌入式系统外接的在线调试器对来自 调试主机的高层调试指令转换为底层调试指令;

B4、数据选择开关选择来自嵌入式系统的第一CPU或者嵌入式系统外接的 在线调试器生成的底层调试指令传输至测试接入端口控制器;

C4、测试接入端口控制器将底层调试指令对应的数据预先存储到嵌入式实 时在线电路仿真器的寄存器中;

D4、嵌入式实时在线电路仿真器将所述寄存器中预先存储的数据与第二 CPU在程序实时运行时的数据进行比对,当两者一致时,则使程序进入调试模 式并执行步骤E4;否则,继续执行步骤D4;

E4、将第二CPU程序实时运行产生的数据通过数据选择开关选择发送给所 述第一CPU经所述第一CPU协议转换后通过其通讯口传输给调试主机,或者经 调试端口发送给嵌入式系统外接的在线调试器进行协议转换后传输给调试主 机。

为克服现有技术的上述缺陷,本发明提供了一种针对嵌入式系统,包括: CPU、测试接入端口控制器和嵌入式实时在线电路仿真器;

所述CPU用于通过其通讯口接收来自调试主机的高层调试指令,并将其转 换为底层调试指令;以及在程序进入调试模式后,将CPU上程序实时运行产生 的数据通过其通讯口传输给调试主机;

测试接入端口控制器用于将底层调试指令对应的数据存储到嵌入式实时在 线电路仿真器的寄存器中;

嵌入式实时在线电路仿真器用于将所述寄存器中预先存储的数据与CPU在 实时程序运行时的数据进行比对,当两者一致时,则使程序进入调试模式。

克服现有技术的上述缺陷,本发明还提供了一种针对嵌入式系统,包括第一 CPU、第二CPU、测试接入端口控制器和嵌入式实时在线电路仿真器:

所述第一CPU用于通过其通讯口接收来自嵌入式系统外部调试主机的高层 调试指令,并将其转换为底层调试指令;以及在进入调试模式后将第二CPU程 序实时运行产生的数据进行协议转换后通过所述通讯口输出到调试主机;

所述测试接入端口控制器用于将底层调试指令对应的数据存储到嵌入式实 时在线电路仿真器的寄存器中;

所述嵌入式实时在线电路仿真器用于将预先存储在所述寄存器中的数据与 第二CPU在程序实时运行数据进行比对,当两者一致时,则使程序进入调试模 式。

为克服现有技术的上述缺陷,本发明还提供了一种针对嵌入式系统,包括 CPU、测试接入端口控制器、嵌入式实时在线电路仿真器、数据选择开关和调 试端口;

所述CPU用于通过其通讯口接收来自调试主机的高层调试指令,并将其转 换为底层调试指令以及实时运行程序;

所述调试端口用于传输嵌入式系统外接的在线调试器生成的底层调试指令;

所述数据选择开关用于选择来自嵌入式系统外接在线调试器生成的、经调试 端口传输的底层调试指令,或者所述CPU生成的底层调试指令至测试接入端口 控制器;当进入调试模式时,所述数据选择开关选择将所述CPU程序实时运行 产生的数据发送给所述CPU进行协议转换,并通过所述通讯口传输给调试主机; 或者发送给嵌入式系统外接在线调试器进行协议转换后传输给调试主机;

所述测试接入端口控制器将底层调试指令对应的数据预先存储到所述嵌入 式实时在线电路仿真器的寄存器中;

所述嵌入式实时在线电路仿真器将所述寄存器中预先存储的数据与所述 CPU在程序实时运行时的数据进行比对,当两者一致时,则使程序进入调试模 式。

为克服现有技术的上述缺陷,本发明还提供了一种针对嵌入式系统,包括第 一CPU、第二CPU、测试接入端口控制器、嵌入式实时在线电路仿真器、数据 选择开关和调试端口;

所述第一CPU用于通过其通讯口接收来自调试主机的高层调试指令,并将 其转换为底层调试指令;

所述调试端口用于传输嵌入式系统外接的在线调试器生成的底层调试指令;

所述数据选择开关用于选择来自嵌入式系统外接的在线调试器生成的、经调 试端口传输的底层调试指令,或者所述第一CPU生成的底层调试指令至所述测 试接入端口控制器;当进入调试模式时,数据选择开关选择将所述第二CPU程 序实时运行产生的数据由第一CPU进行协议转换后经所述通讯口传输给调试主 机,或者发送给嵌入式系统外接的在线调试器进行协议转换后传输给调试主机;

所述测试接入端口控制器将底层调试指令对应的数据预先存储到所述嵌入 式实时在线电路仿真器的寄存器中;

所述嵌入式实时在线电路仿真器将所述寄存器中预先存储的数据与第 二CPU在程序实时运行时的数据进行比对,当两者一致时,则使程序进入调 试模式。

本发明中,通过嵌入式系统本身的CPU将来自调试主机的高层调试指令 转换为底层调试指令并通过其本身的通讯口传输给TAP控制器,并通过TAP 控制器将进入调试模式对应的底层调试指令相对应数据预先存储TAP控制 器中,并与CPU实时运行程序产生的数据进行比对,当两者一致时,则使程 序进入调试模式。在调试的过程中,可以通过CPU本身的上述通讯口与调试 主机进行数据的交互,而避免了使用外接的ICD即以对应的调试端口,从而 降低了调试成本。

附图说明

图1为现有技术中ARM9的ICD硬件调试的硬件连接示意图;

图2为现有技术中利用图1所示的硬件连接进行ICD调试流程图;

图3为本发明实施例提供的针对单核嵌入式系统的程序调试一流程图;

图4为本发明实施例提供的对单核嵌入式系统进行调试的一硬件连接示 意图;

图5为本发明实施例提供的针对单核嵌入式系统的程序调试另一流程 图;

图6为本发明实施例提供的针对单核嵌入式系统的程序调试另一硬件连 接示意图;

图7为本发明实施例提供的针对双核嵌入式系统的程序调试一流程图;

图8为本发明实施例提供的针对双核嵌入式系统进行硬件调试的一硬件 连接示意图;

图9为本发明实施例提供的针对双核嵌入式系统的程序调试另一流程 图;

图10为本发明实施例提供的针对双核嵌入式系统进行硬件调试的另一 硬件连接示意图。

具体实施方式

为了克服ICD调试技术方案中的上述缺陷,本发明由嵌入式系统的CPU 通过其通讯口传输高层调试指令,并将该高层调试指令转换为底层调试指令。 将该底层调试指令对应的数据存储到嵌入式ICE-RT的寄存器中,以与CPU 上实时运行的程序产生的数据进行比对,确定是否进入调试模式;当两者数 据一致时,使程序进入调试模式。之后,则可以将程序实时运行产生的数据 经协议转换后通过CPU本身的调试口传输给调试主机。高层调试指令可以包 括断点(breakpoint)设置、观察点(watching point)设置、单步执行(single  stepping)。CPU本身的通讯口可以包括通用异步接收/发送装置(UART、 Universal Asynchronous Receiver/Transmitter)接口、以太网(ethernet)接口、 通用串行总线(USB,Universal Serial Bus)接口等有线或其他无线通讯口。

为使本发明的技术原理、特点以及技术效果更加清楚,以下通过具体实 施例进行详细阐述。

针对单核嵌入式系统的程序调试方法和硬件连接示意图实施例

对于单核设备,由于只有一颗CPU,CPU既要被动的参与调试,又要主 动的参与调试产生底层调试指令,因此,如果要依托扫描链来进行数据读写, 则不能被启动CPU周围的扫描链,否则,会使CPU停止工作,从而也就无 法使得CPU参与高层调试指令到底层调试指令的转换。

图3为本发明实施例提供的针对单核嵌入式系统的程序调试一流程图。 如图3所示,包括如下步骤:

步骤301:嵌入式系统的CPU通过其通讯口接收来自PC主机的高层调 试指令并将其转换为可被TAP控制器接收的底层调试指令。

现有技术中,由嵌入式系统外接的在线电路仿真器接收调试主机的高层 调试指令,并将其进行协议转换后生成底层调试指令,并通过对应的调试端 口传输。本实施例中,直接利用参与程序调试的CPU本身的通讯口来接收来 自调试主机的高层调试指令,并将由CPU将该高层调试指令直接转换为底层 调试指令,避免了对嵌入式系统外接ICD的依赖。

对于基于不同调试端口的嵌入式系统调试方案来说,调试端口不同,对 应的底层调试指令具体的体现也有不同。比如,对于两线(SBW,SPY-BI -WIRE)-JTAG端口来说,对应的底层调试指令可对应到调试时钟输入信 号(SPY-BI-WIRE Test Clock Input,SBWTCK)以及调试数据串行输入 /输出信号(SPY-BI-WIRE Test Data Input/output,SBWTDIO);对背景 调试模式端口(BDM,Background Debugging Mode)来说,则可对应到调 试时钟输入信号(DSCLK,debug serial clock),调试数据串行输入信号 (DSI,debug serial input),调试数据串行输出信号(DSO,debug serial  output)。对于串行线调试(SWD,Serial wire debug)端口来说,则可对应 到:调试数据串行输入输出信号(SWDIO,Serial wire debug input/output)调 试时钟输入信号(SWDCLK,Serial wire debug clock)。对于标准的JTAG端 口来说,可对应到调试模式选择信号TMS、调试时钟输入信号TCK、调试 数据串行输入信号TDI和调试数据串行输出信号TDO。底层调试指令对应的 这些信号可通过其各自对应的信号线进行传输,并可存在对应的寄存器中。

本实施例中,对于基于JTAG端口来说,可以通过4条信号线分别传输 调试模式选择信号TMS、调试时钟输入信号TCK、调试数据串行输入信号 TDI和调试数据串行输出信号TDO,并将其分别存储到四个不同的寄存器中, 以便于数据读写。相应的高层调试指令到底层调试指令的转换可结合具体应 用在调试主机端的调试工具如GDB,参考国际标准测试协议IEEE 1149.1。

步骤302:TAP控制器将调试模式选择信号TMS信号对应的扫描链至于 调试数据串行输入信号TDI和调试数据串行输出信号TDO对应的信号线之 间。

步骤303:根据调试模式选择信号TMS、调试时钟输入信号TCK,通过 调试数据串行输入信号TDI对应的信号线将底层调试指令对应的数据经该对 应的扫描链存储到嵌入式ICE-RT的寄存器中;

为了控制嵌入式ICE-RT中数据的读写,在嵌入式ICE-RT周围可以设置 有扫描链,利用该扫描链即可分别通过调试数据串行输出信号TDO、调试数 据串行输入信号TDI对应的信号线对嵌入式ICE-RT中的数据进行读写。

本实施例中,底层调试指令对应的数据可以包括断点地址、观察点地址 或内存访问地址,即可将底层调试指令所针对的程序运算对应的地址存储到 嵌入式ICE-RT的寄存器。

步骤304:嵌入式ICE-RT中将预先存储的数据与CPU在程序实时运行 数据进行比对,当两者一致时,则进入程序调试。

步骤304换言之,是嵌入式ICE-RT对CPU在运行程序时产生的数据进 行监控的过程。如果嵌入式ICE-RT寄存器中预先存储的数据是底层调试指 令对应的地址,将CPU在程序实时运行时的地址与预先存储的地址进行比 对,当二者一致时,则使程序进入调试模式。

本实施例中,可以在嵌入式ICE-RT设置一比较器,利用该比较器来进 行程序实时运行时的地址与预先存储的地址的比对。

步骤305:在进入调试模式后,CPU将运行程序产生的数据经过协议转 换后通过其通讯口传输给PC主机。

现有技术中ICD程序调试方案中在程序进入调试模式后,当调试主机要 读取CPU在程序实时运行产生的数据的话,需要启动CPU周围对应的扫描 链,再根据底层调试指令对应的信号读取程序实时运行产生的数据,并将该 数据通过TAP控制器、调试端口输出给嵌入式系统外接的ICD,由嵌入式系 统外接的ICD进行协议转换后发送给调试主机。而本实施例中,进入调试模 式后,CPU寄存器的数据送到数据总线,在经过与调试工具如GDB对应的 协议转换后,利用CPU本身的通讯口与调试主机进行直接的数据传输,一方 面避免了使用价格昂贵的外接ICD,降低了调试成本,另外一方面避免了使 用调试端口,从而可以减少引线数量,降低封装成本。

图4为本发明实施例提供的对单核嵌入式系统进行硬件调试的一硬件连 接示意图。如图4所示,包括PC主机401,该单核嵌入式系统包括CPU 402、 TAP控制器403、扫描链404和嵌入式ICE-RT 405。

PC主机401作为调试主机发出高层调试指令,如设置断点、设置观察 点、访问内存等。调试主机也可以是工控机、工作站。断点包括但不限于INT3 断点、硬件断点、内存断点、消息断点、条件断点等。

CPU 402用于通过其通讯口接收来自PC主机401的高层调试指令并将 其转换为可被TAP控制器103接收的底层调试指令;以及在进入调试模式后, 将CPU上程序实时运行产生的数据经过对应的协议转换后通过其本身的通 讯口传输给PC主机401。

TAP控制器403用于启动嵌入式ICE-RT406周围的扫描链404,将底层 调试指令对应的数据(例如:断点地址、观察点地址或内存访问地址)存储 到嵌入式ICE-RT406的寄存器中;

嵌入式ICE-RT 40用于将寄存器中预先存储的数据如地址与CPU在程序 实时运行数据如地址进行比对,当两者一致时,使程序进入调试模式。

图5为本发明实施例提供的针对单核嵌入式系统的程序调试另一流程 图。本实施例中,为了便于调试人员灵活进行调试方案的选择,设置了一数 据选择开关,通过该数据选择开关选择底层调试指令的来源。

步骤501、嵌入式系统的CPU通过其通讯口接收来自调试主机的高层调试 指令,并将其转换为底层调试指令,和/或,嵌入式系统外接的在线调试器ICD 接收来自调试主机的高层调试指令并将其转换为底层调试指令;

步骤502、数据选择开关选择来自嵌入式系统外接的ICD生成的、经调试端 口传输的底层调试指令,或者嵌入式系统的CPU生成的底层调试指令至TAP控 制器;

步骤503、TAP控制器将底层调试指令对应的数据预先存储到嵌入式ICE-RT 的寄存器中;

步骤504、嵌入式ICE-RT将其寄存器中预先存储的数据与CPU在程序实时 运行时的数据进行比对,当两者一致时,则使程序进入调试模式并执行步骤505; 否则,继续执行步骤504;

步骤505、将CPU程序实时运行产生的数据通过数据选择开关选择发送给 所述CPU进行协议转换后,并通过所述CPU的通讯口传输给调试主机,或者发 送给嵌入式系统外接的ICD进行协议转换后传输给调试主机。

本实施例中,数据选择开关可以通过设置一对应寄存器的存储数据来进行控 制,比如,当寄存器存储的数据为0时,选择来自基于嵌入式系统外接的在线 调试器ICD和调试端口进行程序调试;当寄存器存储的数据为1时,选择基于 嵌入式系统本身的CPU及其通讯口进行程序调试。整个调试的其他详细内容可 参见前述内容,在此不再赘述。

对应地,图6为本发明实施例提供的针对单核嵌入式系统的程序调试另一硬 件连接示意图,如图所示,包括PC主机601,该嵌入式系统包括CPU602、TAP 控制器603、嵌入式ICD-RT604、数据选择开关605、调试端口606、外接ICD607、 第一扫描链609和第二扫描链608;

PC主机601作为调试主机,根据调试人员的设置产生高层调试指令。

CPU602用于通过其通讯口接收来自调试主机的高层调试指令,并将其转换 为底层调试指令以及实时运行程序;

TAP控制器603用于启动第二扫描链608将底层调试指令对应的数据预先 存储到嵌入式ICD-RT604的寄存器中,或者在进入调试模式后,启动第一扫描 链609将CPU602实时运行程序产生的数据发送给嵌入式系统外接ICD607;

数据选择开关605用于选择来自嵌入式系统外接ICD生成的、经调试端口 传输的底层调试指令,或者嵌入式系统的CPU602生成的底层调试指令至TAP 控制器603;当进入调试模式时,数据选择开关605选择将CPU602实时运行程 序产生的数据发送给CPU602进行协议转换后,并通过CPU602的通讯口传输给 PC主机601,或者启动第一扫描链609将CPU602实时运行程序产生的数据发 送给嵌入式系统外接ICD607进行协议转换后传输给PC主机601;

调试端口606用于传输嵌入式系统外接ICD607生成的底层调试指令;

嵌入式ICE-RT604将其寄存器中预先存储的数据与CPU602在程序实时运 行时的数据进行比对,当两者一致时,则使程序进入调试模式。

针对多核嵌入式系统的程序调试方法和硬件连接示意图实施例

对于双核或者多核设备来说,可以使用非调试目标CPU参与高层调试指 令到底层调试指令的转换,因此可以采用TAP控制器控制调试目标CPU周 围的扫描链,实现调试数据的输入输出。双核或多核设备比如手机等手持型 终端,家电如电视等大型设备。这些核之间可以是同类型、同功能的多对称 多处理机(SMP,Symmetrical Multi-Processing),或者不同类型、不同功能 的异构多处理机(HMP,Heterogeneous multi-processing)。

图7为本发明实施例提供的针对双核嵌入式系统的程序调试一流程图。 如图7所示,包括:

步骤701、嵌入式系统的第一CPU通过其通讯口接收来自调试主机的高层 调试指令,并将其转换为底层调试指令;

本实施例中,嵌入式系统的第一CPU本身的通讯口可以为通用异步接收/ 发送装置(UART,Universal Asynchronous Receiver/Transmitter)接口、以太网 (ethernet)接口、通用串行总线(USB)接口等有线或其他无线通讯口。

本实施例中,对于基于JTAG端口来说,可以通过4条信号线分别传输 调试模式选择信号TMS、调试时钟输入信号TCK、调试数据串行输入信号 TDI和调试数据串行输出信号TDO,并在步骤702之前将其分别存储到四个 不同的寄存器中,以供数据读取。

步骤702、TAP控制器根据调试模式选择信号TMS将嵌入式ICE-RT对应 的扫描链置于调试数据串行输入信号TDI和调试数据串行输出信号TDO对应的 信号线之间。

步骤703、TAP控制器根据调试模式选择信号TMS和调试时钟输入信号 TCK,通过调试数据串行输入信号TDI、调试数据串行输出信号TDO将底层调 试指令对应的数据预先存储到嵌入式ICE-RT的寄存器中。

步骤704、嵌入式ICE-RT将所述寄存器中预先存储的数据与第二CPU在 程序实时运行的数据进行比对,当两者一致时,则使程序进入调试模式并执行 步骤705,否则继续执行步骤704;

步骤705、TAP控制器将第二CPU对应的扫描链置于调试数据串行输入信 号TDI和调试数据串行输出信号TDO对应的信号线之间;

步骤706、TAP控制器根据调试模式选择信号TMS和调试时钟输入信号 TCK,通过调试数据串行输出信号TDO将第二CPU程序实时运行产生的数据 输出到第一CPU;

步骤707、第一CPU将第二CPU程序实时运行产生的数据经协议转换后通 过第一CPU的通讯口输出到调试主机。

与单核嵌入式系统程序调试流程不同之处在于,由于双核嵌入式系统具 有两个处理机核,因此,可以选用其中第一CPU来进行高层调试指令到底层 调试指令的转换;而第二CPU运行拟调试的程序而第二CPU并不像单核系 统那样,即负责指令转换,又要负责程序的运行,所以在依托扫描链来读写 芯片内数据的过程中,则可以启动第二CPU周围的扫描链,使用扫描链强制 指令进入指令流水线,检查第二CPU的寄存器,对所有寄存器的数据进行存 储,将它们的值送到数据总线,在数据总线上再启用第二CPU周围的扫描链 以实现通数据向调试主机的传输。

图8为本发明实施例提供的针对双核嵌入式系统进行硬件调试的一硬件 连接示意图,如图8所示,PC主机801作为调试主机发出高层调试指令。嵌 入式系统可以包括第一CPU802、TAP控制器803、第一扫描链804、第二扫 描链805、嵌入式ICE-RT806和第二CPU807。

第一CPU 802用于接收来自PC主机801的高层调试指令,并将其转换 为可被TAP控制器803接收的底层调试指令,以及在进入调试模式后将第二 CPU802程序实时运行产生的数据进行协议转换后输出到PC主机801。该底 层调试指令可以对应到基于JTAG端口的四线信号:分别传输调试模式选择 信号TMS、调试时钟输入信号TCK、调试数据串行输入信号TDI和调试数 据串行输出信号TDO。

TAP控制器803用于启动第一扫描链804和第二扫描链805,以分别访 问第二CPU807的通用的寄存器和系统存储空间来读写数据,访问嵌入式 ICE-RT506内部的寄存器读写数据。

嵌入式ICE-RT806用于将预先存储在其寄存器中的数据与第二CPU807 在程序实时运行数据进行比对,当两者一致时,则使程序进入调试模式。

图9为本发明实施例提供的针对双核嵌入式系统的程序调试另一流程 图。如图9所示,包括:

步骤901、嵌入式系统的第一CPU通过其通讯口接收来自调试主机的高层 调试指令,并将其转换为底层调试指令,和/或,嵌入式系统外接的在线调试器 ICD接收来自调试主机的高层调试指令并将其转换为底层调试指令;

步骤902、数据选择开关选择来自嵌入式系统的第一CPU经其本身的通讯 口,或者嵌入式系统外接的ICD生成的底层调试指令经调试端口传输至TAP控 制器;

步骤903、TAP控制器将底层调试指令对应的数据预先存储到嵌入式实时在 线电路仿真器的寄存器中;

步骤904、嵌入式ICE-RT将其寄存器中预先存储的数据与第二CPU在程序 实时运行时的数据进行比对,当两者一致时,则使程序进入调试模式并执行步 骤905;否则,继续执行步骤904;

步骤905、将第二CPU程序实时运行产生的数据通过数据选择开关选择发 送给第一CPU进行协议转换,并经其通讯口传输给调试主机,或者经调试端口 发送给嵌入式系统外接的ICD进行协议转换后传输给调试主机。

图10为本发明实施例提供的针对双核嵌入式系统进行硬件调试的另一 硬件连接示意图。PC主机1001作为调试主机发出高层调试指令。嵌入式系 统包括:第一CPU1002、TAP控制器1003、第一扫描链1004、第二扫描链 1005、嵌入式ICE-RT1006、第二CPU1007、数据选择开关1008、调试端口 1009、外接的ICE1010。

第一CPU1002用于通过其通讯口接收来自调试主机的高层调试指令,并将 其转换为底层调试指令;

调试端口1009用于传输嵌入式系统外接的在线调试器ICD由高层调试指令 转换生成的底层调试指令;

数据选择开关1008用于选择来自嵌入式系统外接的ICD生成的、经调试端 口1009传输的底层调试指令,或者嵌入式系统的第一CPU1002生成的底层调 试指令经其本身的通讯口至TAP控制器1003;当进入调试模式时,数据选择开 关1008通过启动第一扫描链1004,并选择将第二CPU1007程序实时运行产生 的数据发送给第一CPU1002进行协议转换,并经第一CPU1002通讯口传输给 PC主机1001,或者经调试端口1009发送给嵌入式系统外接的ICE1010进行协 议转换后传输给PC主机1001;

TAP控制器通过启动嵌入式ICE-RT1006周围第二扫描链1005,将底层调试 指令对应的数据预先存储到嵌入式ICE-RT1006寄存器中,以及在进入调试模式 后启动第二CPU1007周围的第一扫描链1004读取第二CPU1007在程序实时运 行时的数据,以输出给第一CPU1002。

嵌入式ICE-RT1006将其寄存器中预先存储的数据与第二CPU1007在程序 实时运行时的数据进行比对,当两者一致时,则使程序进入调试模式。

双核嵌入式系统中,负责高级调试指令到底层调试指令转化你的第一CPU 也可以由微处理器MPU、微控制器MCU、数字信号处理器DSP等处理机核代 替。

本发明的上述方案除了克服使用ICD测试导致程序开发成本较高等缺 陷,还有可实现不拆机进行调试。由于大多数终端设备至少都具有USB口或 者其他通讯口,所以,可以直接用该设备上配置的usb口与PC建立连接, 而不需要拆机使用JTAG端口与在线调试器ICD连接,再与PC连接完成调 试,降低了调试成本。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本 发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在 本发明保护的范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号