用于硬件平台所开发的应用程序的调试方法和系统
技术领域
本发明主要涉及应用程序的调试方面,涉及一种用于硬件平台所开发的应用程序的调试方法和系统。
背景技术
通常,硬件平台(尤其是嵌入式系统开发平台)自身的操作系统功能极为有限,没有提供可调试的支持(即,在硬件平台内不存在硬件仿真器或者硬件虚拟机),在这些硬件平台的开发操作处于一种高复杂度且低可见度的状态,为了验证所开发的程序的正确性,开发操作一般要使用硬件仿真器(也称为硬件调试器)。现有技术中,调试器(DeBugger)是作为软件维护与错误修正的一个最重要、最直接,同时也是必不可少的一种机制。在应用中,调试器一般是通过串口与上位机(即计算机)软件相连,在连接之后由上位机软件发出控制命令,通过该串口将待调试的可执行程序发送到硬件仿真器内,然后由硬件仿真器执行该可执行程序。所不同的是,硬件仿真器可以对这些程序做特定的运行,如单步、断点、更改执行地址、查看内存与寄存器状态等等来实现固件的调试。
使用硬件仿真器进行开发,首先要建立一个符合要求的硬件平台,如果该硬件平台涉及的程序比较复杂,还要搭建一个人机交流通道,例如,可以是一个简单的发光二极管、蜂鸣器或串口通讯的LCD显示屏等。然后编写一个简单的程序示例,通过此前建立的人机交流通道验证该硬件平台是否正常工作,之后再验证底层驱动程序和用户框架程序是否正常工作,然后才能对应用程序进行调试。所以,开发时搭建该硬件平台时操作过程比较复杂,而且硬件仿真器价格也较昂贵。
发明内容
为了解决上述问题,本发明提供一种用于硬件平台所开发的应用程序的调试方法和系统。
根据本发明的一个方面,提供了一种用于硬件平台所开发的应用程序的调试方法,其包括以下步骤:
步骤S1,确定硬件平台的IO操作,用上位机系统内的IO操作代码来模拟硬件平台的IO操作;
步骤S2,将用于模拟的IO操作代码编译为库文件,将待调试的应用程序编译为上位机的可执行程序,并将库文件与可执行程序的各执行代码分别进行初始链接;
步骤S3,通过模拟的IO操作,在上位机上运行并调试可执行程序。
作为优选,硬件平台以非硬件相关的语言编写应用程序。
作为优选,库文件包括动态库文件或静态库文件。
作为优选,步骤S1进一步包括:
通过硬件平台为应用程序提供的API来确定硬件平台的IO操作。
作为优选,硬件平台的IO操作包括下列至少之一:
文件IO操作、图形显示、时钟、硬件信息IO操作、执行单元IO操作。
根据本发明的另一个方面,提供了一种用于硬件平台所开发的应用程序的调试系统,其包括:
模拟模块,其配置为确定硬件平台的IO操作,用上位机系统内的IO操作代码来模拟硬件平台的IO操作;
编译模块,其配置为将用于模拟的IO操作代码编译为库文件,且将待调试的应用程序编译为上位机的可执行程序,并将库文件与可执行程序的各执行代码分别进行初始链接;
调试模块,其配置为通过模拟的IO操作,在上位机上运行并调试可执行程序。
作为优选,硬件平台以非硬件相关的语言编写应用程序。
作为优选,库文件包括动态库文件或静态库文件。
作为优选,模拟模块进一步配置为通过硬件平台为应用程序提供的API来确定硬件平台的IO操作。
作为优选,硬件平台的IO操作包括下列至少之一:
文件IO操作、图形显示、时钟、硬件信息IO操作、执行单元IO操作。
本发明相对于现有技术的有益效果在于:
1、本发明利用上位机的IO操作代码来模拟硬件平台的主要IO操作,使在上位机上进行调试的应用程序的运行逻辑以及运行效果与在硬件平台上运行时保持一致,从而使得硬件平台所开发的应用程序可以易于由上位机的调试工具进行调试从而定位该应用程序内的逻辑错误,解决了在硬件平台上开发软件时遇到的仿真操作过程复杂的问题,并且不需要硬件仿真器,因此可以降低开发成本,并且本发明的技术方案的实现不同于现有技术中的硬件虚拟机,硬件虚拟机在进行调试时需要模拟硬件指令集,而本发明的只需要模拟该硬件平台的IO操作,因而所需的开发周期很短,能够实现轻量级的仿真方法;
2、适用于多种上位机系统,便于对硬件平台所开发的应用程序进行调试,并且在上位机上也不需要额外的硬件支持,仅使用其常用的开发调试工具即可。
附图说明
图1为根据本发明的用于硬件平台所开发的应用程序的调试方法的流程图;
图2为根据本发明的用于硬件平台所开发的应用程序的调试系统的结构框图。
具体实施方式
以下结合附图对本发明的进行详细描述。
根据本发明的实施例,提供了一种用于硬件平台所开发的应用程序的调试方法,其可以包括以下步骤:
步骤S1,确定硬件平台的IO操作,用上位机系统内的IO操作代码来模拟硬件平台的IO操作。
一般硬件平台会为应用程序提供API(Application ProgrammingInterface),由于硬件平台的操作系统往往十分精简,其API一般都是IO操作,因此可以通过利用硬件平台为应用程序提供的API来确定硬件平台的IO操作。其中,硬件平台的IO操作可以包括文件IO操作、图形显示、时钟、硬件信息IO操作、执行单元IO操作等。根据对硬件平台IO操作的分析可以确定该硬件平台的IO操作中是否存在文件操作,该硬件平台是否有显示设备,该应用程序是否需要向显示设备显示一些信息,该平台的程序是否要向系统获取时钟等。
在一些优选实施方式中,如果上位机系统为Windows或Linux等主流操作系统,则步骤S1中的IO操作代码的模拟可以包括:将文件IO操作模拟为Windows或Linux平台的文件操作,将图形显示模拟为窗口显示,将时钟模拟为获取系统的时间等。其中,此类IO操作一般为操作系统的系统调用。
步骤S2,将用于模拟的IO操作代码编译为库文件,将待调试的应用程序编译为上位机的可执行程序,并将库文件与可执行程序的各执行代码分别进行初始链接。
由于硬件平台的此类应用程序的开发通常直接使用非硬件相关的语言(例如C语言)进行编写,所以可以直接将硬件平台开发的应用程序编译为任意上位机平台(如Windows或Linux等)的指令,使得应用程序可以直接在上位机进行执行,便于对硬件平台所开发的应用程序进行调试,并且在上位机上也不需要额外的硬件支持,仅使用其常用的开发调试工具即可。
步骤S3,通过模拟的IO操作,在上位机上运行并调试可执行程序。
通过上述技术方案,可以使得硬件平台上开发的应用程序可以直接在上位机上进行调试或运行,效果与上位机系统内的普通应用程序一样,并可以直接查看模拟的IO操作效果是否与预期的一致。
库文件可以包括动态库文件或静态库文件。静态库和动态库是两种共享程序代码的方式。使用动态库的优点是系统只需载入一次动态库,不同的程序可以使用内存中相同的动态库的副本,因此节省了很多内存。使用静态库的特点是调试程序中包含了库代码的一份完整拷贝。
根据本发明的一个实施例,提供了一种调试方法在实践中用于嵌入式平台(即对应于上述硬件平台)所开发的应用程序。在一个嵌入式平台中具有多份源文件(即对应于待调试的应用程序的执行代码)。该嵌入式平台为该源文件提供了API,可通过如上步骤实现仿真(即调试):
步骤1、上位机根据该嵌入式平台所提供的API(即IO操作)、用上位机的IO操作代码对嵌入式平台的IO操作进行模拟,然后将用于模拟的IO操作代码编译为静态库文件,其中,该嵌入式平台的应用程序以C语言所编写,将应用程序直接编译为上位机的Windows操作系统的可执行程序;
步骤2、将该可执行程序与步骤1中所模拟的静态库文件进行链接;
步骤3、通过上位机的调试工具对该可执行程序进行运行和调试,通过模拟的IO效果,验证程序逻辑是否正确。
根据本发明的实施例,还提供了一种用于硬件平台所开发的应用程序的调试系统,该调试系统可以配置在上位机中。硬件平台可以以非硬件相关的语言编写应用程序。
该调试系统可以包括:
模拟模块21,其配置为确定硬件平台的IO操作,硬件平台的IO操作可以包括下列至少之一:文件IO操作、图形显示、时钟、硬件信息IO操作、执行单元IO操作。该模拟模块21利用上位机系统内的IO操作代码来模拟硬件平台的IO操作,优选地,该模拟模块21可以配置为通过硬件平台为应用程序提供的API来确定硬件平台的IO操作;
编译模块22,其配置为将用于模拟的IO操作代码编译为库文件,其中,库文件可以包括动态库文件或静态库文件,并且该编译模块22还配置为将待调试的应用程序编译为上位机的可执行程序,并将库文件与可执行程序的各执行代码分别进行初始链接;
调试模块23,其配置为通过模拟的IO操作,在上位机上运行并调试所述可执行程序。
以上实施例仅为本发明的示例性实施例,不用于限制本发明,本发明的保护范围由权利要求书限定。本领域技术人员可以在本发明的实质和保护范围内,对本发明做出各种修改或等同替换,这种修改或等同替换也应视为落在本发明的保护范围内。