嵌入式调试的方法
- 格式:doc
- 大小:11.27 KB
- 文档页数:2
嵌入式系统的调试与测试技术研究嵌入式系统是一种高度集成的各种硬件和软件系统,其应用范围广泛,包括汽车、医疗设备、航空航天、工业自动化等领域。
嵌入式系统的调试和测试是确保系统可靠性和稳定性的重要步骤。
本文将从嵌入式系统的调试和测试技术入手,深入探讨如何提高嵌入式系统的可靠性和稳定性。
一、嵌入式系统的调试和测试方法嵌入式系统的调试和测试在整个系统开发过程中起着至关重要的作用。
常见的嵌入式系统调试和测试方法包括:仿真测试、单元测试、集成测试、验收测试等。
其中,仿真测试是利用仿真器或者模拟器对嵌入式系统进行各种测试,可以帮助开发人员在没有实际硬件的情况下快速进行开发和调试;单元测试是对嵌入式系统中的各个模块进行测试,确保每个模块的功能正确性;集成测试是对整个系统进行测试,确保各个模块之间的协同工作正常;验收测试是为了验证开发的系统是否符合客户的需求和要求。
二、硬件调试测试技术硬件调试测试技术是指对嵌入式系统硬件进行测试和调试,主要包括CPU分析器、电路分析仪、万用表、示波器等设备。
在进行硬件调试时,一般首先要进行硬件电路图的设计和分析,确保电路图的正确性和稳定性。
其次,要对板子进行功率测试、时钟测试、引脚测试等测试,保证板子的正常工作。
最后,要进行连通性测试,确保各个模块之间的连接正常。
三、软件调试测试技术软件调试测试技术是指对嵌入式系统软件进行测试和调试,主要包括GDB调试、Trace调试、代码覆盖率测试、文本比对测试等技术。
在进行软件调试时,一般首先要对软件进行静态分析和代码审查,发现潜在的错误和问题。
其次,要利用GDB调试器进行调试,对函数的输入、输出进行跟踪和观察。
最后,要进行文本比对测试,确保程序输出结果的正确性和稳定性。
四、嵌入式系统测试工具嵌入式系统测试工具是指针对嵌入式系统进行测试和调试的软件工具,包括MBIST、JTAG debugger、FileScope、Coverity等工具。
MBIST是一种存储器内置自检工具,可以帮助开发人员快速发现存储器中的问题。
嵌入式系统调试方法
嵌入式系统调试方法可以根据不同的调试目标和调试需求采用不同的方法。
以下列举了一些常见的嵌入式系统调试方法:
1. 基于软件的调试方法:
- 使用断点:在代码中插入断点,停止程序运行并观察变量值,跟踪程序执行流程。
- 打印调试信息:通过在代码中插入打印语句,将程序的状态信息打印输出到终端或日志文件中。
- 使用调试工具:使用专业的调试工具,如GDB、JTAG等,通过连接到嵌入式系统的调试接口,对系统进行调试和观察。
2. 基于硬件的调试方法:
- 使用示波器:通过连接示波器到嵌入式系统的输入输出接口,观察信号波形,以了解系统在运行时的状态和行为。
- 使用逻辑分析仪:通过连接逻辑分析仪到嵌入式系统的总线上,可以观察和分析总线通信、时序等情况。
- 使用仿真器/调试器:通过连接仿真器/调试器到嵌入式系统的调试接口,可以对系统进行单步调试、观察内存和寄存器状态等。
3. 试错法和排除法:
- 通过对系统的部分功能进行临时修改或替换,以确认问题所在。
- 逐步排除可能的原因,通过修改代码或配置参数,逐步缩小问题范围。
4. 远程调试方法:
- 使用远程调试工具:通过网络连接,将调试信息传输到远程电脑进行调试。
- 使用远程监控系统:通过网络连接,远程监控嵌入式系统的运行状态,收集和分析系统的日志和运行数据。
综合使用上述方法,可以帮助开发人员在嵌入式系统开发过程中有效地定位和解决问题。
qtcreator单步调试嵌入式arm程序的方法前言该方法配置步骤为:(1)安装gdb-multiarch。
(2)在qtcreator中配置gdb-multiarch。
(3)启动板子上的gdbserver。
(4)将qtcreator连接到板子上的gdbserver,启动单步调试。
1.安装gdb-multiarch使用“sudo apt-get install gdb-multiarch”命令安装gdb-multiarch。
安装完如图1所示。
图12.在qtcreator中配置gdb-multiarch在qtcreator中添加gdb-multiarch步骤如下。
在[工具]-[选项]中,在[Debuggers]页面中,添加gdb-multiarch,如图2和图3所示。
图2图3在[构建套件(kit)]页面中,添加gdb-multiarch对应的调试器,如图4所示。
图43.在板子上启动gdbserver将要调试的程序拷贝到板子上,如图5所示。
图5用如下指令,启动gdbserver。
gdbserver 172.24.119.123:8888 /tmp/only_only_test172.24.119.123是虚拟机的IP地址。
8888是选取的一个通信端口。
/tmp/only_only_test是板子上要调试的程序。
如图6所示。
图64.qtcreator连接gdbserver单步调试首先,确保虚拟机与板子能互相ping通,如图7所示。
图7然后,在虚拟机的qtcreator中,用Debug模式编译程序,如图8所示。
图8在虚拟机中的qtcreator中,点击[调试]-[开始调试]-[Attach to Running Debug Server...]。
参考图9进行设置。
图9设置中:✧本地执行档:虚拟机中待调试程序的存在位置。
✧Override server channel: IP地址为板子IP地址,端口号为gdbserver启动时指定的端口号。
嵌入式系统的调试与测试技巧嵌入式系统是一种具有特定功能和任务的计算机系统,通常被嵌入到其他设备中,如手机、家电、汽车等。
由于其特殊的工作环境和资源限制,嵌入式系统的调试与测试工作十分重要。
本文将介绍一些嵌入式系统调试与测试的技巧,帮助开发人员有效解决问题并提高系统的稳定性和性能。
调试是嵌入式系统开发过程中至关重要的一步。
在软硬件集成后,通常会出现一些问题,如系统崩溃、死循环、性能瓶颈等。
下面是一些常用的嵌入式系统调试技巧。
首先,使用调试工具。
嵌入式系统通常会使用调试接口,如JTAG或SWD接口,开发人员可以通过这些接口连接嵌入式系统和调试工具,实时监测系统状态、查看变量值、设置断点等。
常见的调试工具有GDB、OpenOCD等,熟练掌握和合理利用这些工具可以帮助开发人员快速定位和解决问题。
其次,输出调试信息。
在嵌入式系统调试过程中,开发人员可以在代码中插入打印语句,输出运行时的变量值、函数调用信息、错误消息等。
这些信息可以通过串口、LCD显示屏或日志文件输出,帮助开发人员了解系统的运行状态和错误发生位置。
另外,利用仿真器进行调试。
对于某些需要与外设或传感器交互的嵌入式系统,开发人员可以使用仿真器模拟外设的输出信号,并在调试过程中逐步检查系统的反应和执行路径。
这种方法可以极大地减少与外设的依赖,并提高调试效率。
在进行嵌入式系统的测试时,需要针对系统的功能、性能和稳定性进行全面的验证。
下面是一些常用的嵌入式系统测试技巧。
首先,功能测试。
功能测试是验证嵌入式系统是否按照预期的方式工作的过程。
开发人员需要设计合适的测试用例,覆盖系统的各个功能模块,并通过输入各种不同的数据和条件来验证系统的输出是否符合预期。
在测试过程中,应该注意边界条件、异常情况以及不同使用场景的考虑。
其次,性能测试。
性能测试是评估嵌入式系统在各种负载条件下的运行性能的过程。
通过对系统进行压力测试、并行测试、响应时间测试等,开发人员可以了解系统在不同负载情况下的稳定性和性能瓶颈,并进行优化。
嵌入式系统调试方法在嵌入式系统开发过程中,调试是一个至关重要的环节,它可以帮助开发人员发现和修复系统中的问题,确保系统的可靠运行。
嵌入式系统调试方法有多种,本文将介绍几种常见的调试方法及其应用。
1.仿真调试方法仿真调试方法是通过软件工具模拟出目标系统的运行环境,并执行实际的应用程序进行调试。
主要有两种仿真调试方法:软件仿真和硬件仿真。
软件仿真是在宿主机上运行嵌入式系统的代码,通过模拟目标系统的硬件和外设,实现对代码的调试。
软件仿真的优点是不需要实际的硬件环境,可以在开发过程中随时进行调试,并且具有一定的调试功能,如断点调试、变量跟踪等。
但由于宿主机和目标系统的硬件差异,软件仿真无法完全模拟出实际系统的运行情况,因此在一些对实时性要求较高的系统调试中,软件仿真的效果可能不太理想。
硬件仿真是通过使用专用的硬件仿真器或开发板,将目标系统的代码加载到仿真器或开发板上运行,并通过仿真器或开发板提供的调试接口进行调试。
硬件仿真可以更加真实地模拟出系统的运行环境,能够检测到一些与硬件相关的问题,并且对实时性要求较高的系统也有较好的支持。
但硬件仿真的成本较高,需要专门的硬件设备,并且在调试过程中可能会受到硬件本身的限制。
2.远程调试方法远程调试方法是通过网络连接将开发环境和目标系统进行远程通信,实现对目标系统的调试。
远程调试方法可以分为两种:远程串口调试和远程调试工具调试。
远程串口调试是通过连接目标系统的串口与开发环境的串口进行通信,实现对目标系统的调试。
远程串口调试的优点是简单易用,在调试过程中可以使用类似于本地调试的方式进行操作。
但远程串口调试的缺点是需要连接物理串口,局限于物理距离。
远程调试工具调试是通过使用专门的远程调试工具,如JTAG或SWD调试器,通过连接开发环境和目标系统的调试接口进行调试。
远程调试工具调试可以实现远程调试,无需物理接触目标系统,灵活性较高。
但远程调试工具调试的缺点是需要专用的调试工具和接口支持。
嵌入式系统的开发与调试步骤解析嵌入式系统是指集成了计算机硬件和软件的特定功能的系统。
它广泛应用于各个领域,如汽车、家电、通信设备等。
嵌入式系统的开发与调试是确保系统能够正常运行的关键步骤。
本文将详细解析嵌入式系统开发与调试的步骤。
一、需求分析在进行嵌入式系统的开发与调试之前,首先需要进行需求分析。
这一步是确定系统的功能和性能参数。
开发人员需要与客户或项目组进行充分的沟通,了解系统的需求和约束。
需求分析的结果将成为后续开发和调试的指导基础。
二、硬件设计硬件设计是嵌入式系统开发的关键环节之一。
在进行硬件设计时,需要根据需求分析的结果选择适合的硬件平台,并设计相应的硬件电路。
硬件设计包括选择适配的处理器、存储器、外设等,并绘制相应的电路图和布局图。
三、软件开发在硬件设计完成后,便需要进行软件开发。
软件开发是嵌入式系统开发过程中最复杂的环节之一。
通常情况下,嵌入式系统的软件开发需要首先进行底层驱动开发,包括操作系统的移植、芯片外设的驱动开发等。
然后进行应用开发,根据需求分析的结果,设计开发系统所需的各种功能。
四、系统集成软件开发完成后,需要进行系统的集成。
系统集成包含硬件和软件两个方面。
首先,将硬件和软件进行连接和组装,确保硬件和软件的兼容性。
其次,通过逐步调试和测试,保证软硬件之间的协同工作。
这个过程中可能需要进行不止一次的调试和修改,以保证整个系统能够正常运行。
五、功能测试在系统集成完成后,需要进行功能测试。
对系统进行全面的功能测试,验证系统是否满足需求分析中确定的功能和性能参数。
测试包括输入输出的正确性、响应时间、系统的稳定性等多个方面。
根据测试结果进行相应的修正和优化。
六、性能测试性能测试是对系统的性能进行评估和验证的过程。
通过模拟实际使用场景,测试系统在不同负载下的性能指标,包括响应时间、吞吐量、资源利用率等。
性能测试的结果将为系统的优化和调整提供参考。
七、系统优化根据功能测试和性能测试的结果,对系统进行优化。
keil和iar调试方法Keil和IAR是两种常用的嵌入式开发工具,可以用于编写和调试嵌入式系统的程序。
本文将介绍如何使用Keil和IAR进行调试,并比较两者的优劣。
我们来介绍Keil调试方法。
Keil是一款功能强大的集成开发环境(IDE),广泛用于ARM处理器的嵌入式系统开发。
在Keil中,调试功能十分丰富,可以帮助开发者快速定位和解决程序中的错误。
在Keil中进行调试的第一步是创建一个工程,并将程序源代码添加到工程中。
之后,我们需要对程序进行编译,生成可执行文件。
在编译过程中,Keil会对代码进行语法检查,并生成编译器的警告或错误信息,方便开发者进行修正。
接下来,我们可以通过在程序中插入断点的方式来进行调试。
断点是一种调试工具,可以让程序在运行到指定位置时停止执行,从而可以查看此时的程序状态。
在Keil中,我们可以通过单击源代码左侧的行号来设置断点。
当程序运行到断点位置时,Keil会自动切换到调试模式,并在代码窗口中高亮显示当前执行的代码行。
此时,我们可以使用Keil提供的调试工具来查看变量的值、寄存器的状态等信息。
同时,Keil还提供了逐条执行、单步调试等功能,可以帮助开发者逐步查看程序的执行过程,从而找出错误所在。
除了断点调试外,Keil还支持远程调试功能。
通过使用Keil提供的调试器和调试适配器,我们可以将目标设备与开发电脑连接起来,并在开发电脑上进行远程调试。
这种方式适用于无法直接在开发电脑上运行程序的嵌入式系统,可以极大地提高调试效率。
而IAR也是一款常用的嵌入式开发工具,与Keil相比,IAR具有更加友好的界面和更强大的调试功能。
在IAR中,调试的操作方式与Keil类似,同样需要创建工程、编译程序,并设置断点来进行调试。
与Keil相比,IAR的一个优势是其更强大的性能分析功能。
IAR提供了丰富的性能分析工具,可以帮助开发者分析程序的执行时间、函数调用关系等信息。
这对于优化程序性能、提高系统响应速度非常有帮助。
嵌入式系统的界面调试H 模型方法*戴莉萍,黄龙军(江西师范大学软件学院,南昌330022)*基金项目:江西省教育厅教学改革基金项目 软件测试课程实践教学案例体系及构建(J X J G 18227)㊂摘要:嵌入式软件实现过程中的设备㊁开发工具㊁操作系统等因素的多样化,使得系统调试工作较为复杂困难㊂针对嵌入式软件开发过程中的屏幕自适应问题,提出了H 界面调试模型㊂该模型首先将界面构建分成了基于控件和基于绘图两种方式,而后基于不同的界面构建方式提出了对应的调试策略㊁过程以及技术等㊂通过两个基于Q t 和A n d r o i d 开发环境下的系统界面开发示例,具体描述了H 界面调试模型的应用过程,同时证明了该界面调试模型的灵活性和有效性㊂关键词:H 模型;Q t f o r A n d r o i d ;界面调试;控件与绘图中图分类号:T P 311 文献标识码:AH M o d e l o f I n t e r f a c e D e b u g g i n g T e c h n o l o g y B a s e d o n E m b e d d e d S ys t e m D a i L i p i n g ,H u a n g L o n g ju n (S o f t w a r e S c h o o l ,J i a n g x i N o r m a l U n i v e r s i t y ,N a n c h a n g 330022,C h i n a )A b s t r a c t :E m b e d d e d S o f t w a r e d e b u g g i n g i s v e r y d i f f i c u l t b e c a u s e o f t h e v a r i e t y o f d e v e l o p m e n t e n v i r o n m e n t s i n c l u d i n g th e d i f f e r e n t d e -v i c e s ,p r o g r a mm i n g t o o l s a n d o p e r a t i n g s y s t e m s .T o s o l v e t h e s c r e e n -m a t c h p r o b l e m ,t h e H m o d e l o f i n t e r f a c e d e b u g g i n gi s p u t f o r w a r d h e r e .T h i s m o d e l c l a s s i f i e s t h e i n t e r f a c e c o n s t r u c t i o n i n t o t w o f o r m s o f c o n t r o l s -b a s e d a n d d r a w i n g-b a s e d ,a n d t h e n g e n e r a t e s t h e c o r r e -s p o n d i n g d e b u g g i n g s t r a t e g i e s ,a n d a d o p t s t h e d i f f e r e n t p r o c e s s e s a n d t e c h n o l o g i e s .T a k e t w o e m b e d d e d i n t e r f a c e p r o g r a m s b a s e d o n Q t a n d A n d r o i d f o r e x a m p l e t o d e s c r i b e t h e c o n c r e t e p r o c e s s e s a n d p r o v e t h e f l e x i b i l i t y an d e f f e c t i v e n e s s o f t h i s H m o d e l .K e yw o r d s :H m o d e l ;Q t -f o r -A n d r o i d ;i n t e r f a c e d e b u g g i n g ;c o n t r o l s a n d d r a w i n g 0 引 言在软件开发中,业务需求和技术需求确定了其设计与开发方向,为确保最终软件产品能够满足需求并良好运行,需要对其进行验证和确认过程,这个过程就称为软件测试㊂软件调试是软件测试的组成部分,关注于软件系统中的故障定位及故障修复[1-2],可以将故障分为以下几类:用户界面不一致㊁不能满足期望㊁性能差㊁程序崩溃或数据讹误[3]㊂通用计算机用于管理大范围的任务处理,而嵌入式系统则是为特定功能而设计的一个专用计算机系统㊂与通用计算机系统开发相比,嵌入式系统开发有着独特之处,例如嵌入式系统通常是面向特定应用的,具有专门的开发工具支持,具有较长的生命周期,开发环境一般由目标板和宿主机共同构成等㊂强大的开发工具支持使得桌面系统的调试技术能方便地直接应用在嵌入式系统,往往也取得较好的效果,但必须注意跨平台开发会出现各种各样的问题[4]㊂嵌入式系统的调试工作量不仅仅体现在功能调试上,界面调试也占据了一定的比例㊂本文从程序界面不一致这一问题出发,基于嵌入式开发技术提出了一种H模型来进行有效的界面调试,并结合实例描述了相应的调试技术㊂1 界面调试的H 模型嵌入式系统调试贯穿在其整个生命周期之中,在有限的硬件资源基础上进行正确性㊁实时性㊁可靠性等内容的调试㊂由于设备终端在运算能力㊁存储能力㊁显示能力等的不足,嵌入式计算机调试的基本结构为主机目标机结构,主机端一般是P C 平台[5-6]㊂依赖已有的强大跨平台集成开发环境,嵌入式系统的开发和过程可以从现有的桌面应用开发上获得很多借鉴,例如嵌入式系统开发调试往往采用交叉调试方法,充分利用了上位机的丰富调试资源㊂与桌面系统应用的界面调试相比,嵌入式系统的界面调试有着较为特殊的体现:①所见不一定所得:现在的开发环境都提供大量的界面元素,通过拖放进行界面设计可以实现可视化编程,节省大量开发时间,即设计时的所见就是编译之后的效果㊂但移植至嵌入式平台上,则会出现例如控件间距㊁大小等不一致的现象,往往需要在界面元素的拖放基础上增加布局控件或者代码,有时甚至完全依赖代码布局,界面复杂程度更高[7]㊂②嵌入式系统的多样化:多种操作系统版本㊁多种尺寸㊁多种分辨率㊁多种机型等这一多样化现象使得应用系统会在不可预期的嵌入式平台上报错㊂单从屏幕自适应这一角度出发,在界面设计㊁实现及调试时就必须多加考虑,而这就大大增加了程序复杂性,对程序的灵活性提出了更高的要求[8]㊂③可利用的开发资源缺乏:以Q t 开发环境为例说明,桌面版应用的Q t 技术开发不论是书本还是网络资源,数量都是比较丰富的;而Q t 支持嵌入式平台(例如A n -d r o i d )的开发时间不长,因此各种资源并不太多,这使得调试工作更加困难一些㊂基于成熟的桌面系统调试技术㊁强大的嵌入式平台开发工具及交叉调试方法,本文提出了一种应用于嵌入式软件开发的界面调试模型,如图1所示㊂图1 嵌入式系统界面调试H 模型从图1中可以看出,嵌入式系统界面调试按照界面元素类型的不同而采用不同的调试思路㊂整个调试过程都充分利用了上位机丰富的调试资源,都需要考虑终端设备自适应性问题㊂为达到最终执行界面的整洁性,必要时采用一定的辅助代码来支持[9-10]㊂两分支各有特点:①界面组成不同,一个以集成开发环境中的控件为主,另一个以图形绘制为主;②界面辅助代码作用不同,一个以布局控件代码为主,另一个以图形缩放代码为主;③执行顺序不同,以控件为主的实现中界面调试和功能调试可单独分离,而绘图为主的实现中,界面调试往往在功能代码完成之后㊂本文通过具体实例来说明界面调试H 模型的有效应用,程序开发和调试的环境为Q t㊂2 基于控件的界面调试基于控件开发系统的益处是显而易见的,例如控件在窗体上的拖拽大大减少了程序员的代码书写量;所见即所得的效果大大减少了界面调试工作量;相对于编写控件代码,直接使用控件拖拽更易学习与使用等㊂这些开发技术同样适用于嵌入式软件开发,包括界面调试技术,但是,丰富多样的嵌入式设备终端使得界面的调试往往更加费时费力㊂本文以一个实验错误查询界面为例说明基于控件元素的界面调试的一般过程与方法[11]㊂该系统应用在专业实验教学环节中,可在P C 端以及手机端运行㊂首先在P C 端的Q t 开发环境中将所需控件拖动至界面上,设置好相应的属性,并统一好长度㊁间距㊁字体等,在P C 端运行效果如图2(a )所示㊂然后将其下载至手机端,运行效果图如图2(b)所示㊂图2 不同设备上的运行效果图从图2中可以发现,图2(a)的运行图与设计图是保持一致的,界面调试可以在设计时就完成,但是下载至手机终端却发现控件字体㊁大小㊁布局等全部乱了,此时界面的调试已不仅仅是修改已有控件就能解决,需要增加布局控件和布局代码[12]㊂Q t 提供了布局管理类来负责排列窗体上的控件,在本程序中,增加了一个网格布局G r i d -L a yo u t 控件,对应的布局代码部分如下所示:u i >m a i n l a y o u t >a d d W i d g e t (u i >n a m e l a b e l ,0,0,1,1,Q t ::A l i gn C e n t e r );u i >m a i n l a y o u t >a d d W i d g e t (u i >n a m e l i n e t ,0,1,1,3);u i >m a i n l a y o u t >a d d W i d g e t (u i >s e a r c h b t n ,1,0,1,4);u i >m a i n l a y o u t >a d d W i d ge t (u i >r e s u l t l s t w ,2,0,5,4);此外,调用该窗体时不需要计算屏幕的分辨率,直接显示为全屏即可,运行呈现效果如图3所示㊂使用布局控件的好处在于当程序在不同平台上运行图3 增加布局代码后的手机端运行图时,能够自动管理窗体里所有控件的大小和尺寸㊂因此在A n d r o i d 环境下,可以不用修改布局源码,直接适用[13]㊂此时的界面调试重点在于布局控件对于其他控件间的各种参数设置(例如行宽或者列宽等),并且不涉及到该界面的功能代码测试与调试工作,两者可以独立进行㊂因此,调试的代码并不复杂,工作量也不大,使用到的调试方法也比较普通[14-15],如图4所示㊂图4 基本控件的界面调试常用方法由于程序可运行在P C 端和嵌入式设备终端,且在P C 端的开发调试环境中界面是所见即所得,因此这个阶段主要采取观察法进行调试,例如控件是否摆放对齐㊁间隔是否一致㊁控件是否显示不完整或重叠㊁是否有错别字㊁控件的字体和大小是否保持一致等㊂嵌入式软件系统的调试面对的不仅仅是代码,还有硬件部分;利用上位机开发出来的软件还需要下载至终端设备中,以查看实际运行效果㊂在这一步骤中,无论是上位机还是目标机,对于错误的提示都是极其有限甚至缺乏的,此时对于错误的定位较为常用和有效的方法是使用替换法㊂例如,如果无法下载,可以考虑替换连接方式,如由U S B 连接替换为网线连接;如果出现下载后无法运行,可以考虑内核问题,用另一台终端设备替换当前的终端设备,或者直接重新定制一次内核;如果运行时无法得到正确的结果,可以用简单的程序替换复杂的程序,以得到阶段性的正确结果㊂对于使用到的布局代码则可以使用多种调试方法,例如采用静态测试法,通过阅读代码大致描绘出运行时各个控件所在的位置㊁大小等基本布局,还可以对布局控件方法的各个参数值使用试探法进行取值,下载后看看实际运行效果㊂如果界面涉及较多控件㊁布局较为复杂,可以将布局代码简单化,按照分区或分段进行调试㊂依赖于高效的布局控件,基于控件的界面调试过程和方法较为简单㊁易于理解和应用,但在实际应用中也体现出了一定的局限性,例如界面设计要在运行之前就固定好,不适用于运行期间界面有变动的情况,缺乏一定的灵活性㊂3 基于绘图的界面调试在实际应用中,某些界面效果是可视化设计无法完成的,此时可以采用纯代码的方式来实现界面,例如本文中的H a n o i 动态演示的程序㊂该程序界面组成元素较为简单,由矩形和直线构成,界面初始化后,当出现点击事件时,盘子移动一个,程序中需要计算各个绘图元素相关顶点的所在位置坐标(X ,Y )㊂图5 P C 端H a n o i 动态演示运行效果图除了主界面类之外,还另外设计了棋盘C B o a r d 类和柱子C P e g 类,其中数据成员基本上是各个绘图元素的参数值,例如背景框的坐标㊁底座坐标㊁盘子的最大长度以及间距值等等,方法成员较为简单,例如m o v e ㊁r e m o v e d i s k㊁a d d d i s k 等[15]㊂由于界面的实现完全依靠代码来实现,因此首先利用上位机丰富的调试资源确保设计思路的正确性㊁代码实现的无误性㊁运行效果的良好性㊂在P C 端运行效果如图5所示㊂将此应用程序下载至手机端时,发现程序界面是空白一片,这是因为P C 端程序中所有坐标数据并不适用于手机终端,因此需要增加比例代码,并对此进行相应的调试[16]㊂部分代码如下:v o i d C B o a r d ::i n i t i a l i z e (i n t w ,i n t h){ i n t i ,o l d w ,o l d h; o l d w=b o a r d x 2-b o a r d x 1; o l d h =b o a r d y 2-b o a r d y 1; b o a r d x 1=0; b o a r d x 2=0; b o a r d x 1=w ;b o a r d y1=h ; b a s e i n t e r v a l =q C e i l (w*b a s e i n t e r v a l /o l d w ); b a s e l e n g t h =q C e i l (w*b a s e l e n g t h /o l d w ); m a x d i s k l e n g t h =q C e i l (w*m a x d i s k l e n g t h /o l d w ); d i s k d e s c =q C e i l (w*d i s k d e s c /o l d w ); f o r (i =0;i <=2;i ++) {//底盘坐标 b a s e x [i ]=i *(b a s e i n t e r v a l +b a s e l e n g t h )+b o a r d x 1; b a s e y [i ]=b o a r d y 2-2*b o a r d y1; P g [i ].d i s k h e i g h t =q C e i l (h *P g [i ].d i s k h e i gh t /o l d h ); P g [i ].d i s k i n t e r v a l =q C e i l (h *P g [i ].d i s k i n t e r v a l /o l d h ); P g [i ].p e g h e i g h t =q C e i l (h *P g [i ].p e g h e i gh t /o l d h ); } //依次确定柱子坐标,以及初始化时盘子所在位置}图6 手机端H a n o i 动态演示运行效果图从代码中可以看出,输入参数w 和h 分别表示嵌入式终端设备屏幕的宽度和高度,P C 端程序运行所设置的各种参数仍旧有用,在此通过基本的数学运算转换成终端设备上所需要的顶点值㊁长度值以及坐标值㊂比例代码经过调试之后,可在手机终端正确执行,运行效果如图6所示㊂比例代码可以根据实际设备动态地获取其高度值和宽度值,以P C 端的图形参数的各种值为基本模型,灵活调整运行效果的大小㊂图6是手机竖屏且全屏时的运行界面,横屏的运行界面与图5类似㊂基于绘图的界面调试使用比例代码也是较为灵活的处理方式,首先可以较好地实现界面自适应,适用于不同的嵌入式终端设备;其次充分利用了上位机强大的代码编辑和调试功能,可以在确保程序逻辑正确性的基础上,着重关注终端设备的界面调试效果;最后两段不同环境下代码的相似性,使得程序易于理解和维护㊂相对于基于控件的界面调试,基于绘图的界面调试的难度更高㊁工作量更大㊁过程更复杂㊂图7描述了期间主要用到的各种调试技术,用以查找程序的编译错误㊁运行时错误及逻辑错误㊂图7 基于绘图的界面调试常用方法手绘测试法属于静态测试,通过阅读代码勾画出程序运行时的界面,标注出各个坐标值的初始值㊁增量值以及目标值,有利于查找出坐标值的计算公式错误㊂断点调试则是利用了开发语言工具的调试工具,可以判断数组的下标是否越界㊁循环次数是否正确㊁初始值是否赋值正确等,这样可以观察到运行期间各变量的数值㊂排除法和二分法是将代码按照逻辑的完整性分段,将其逐一注释,确定出错误的大致范围,例如程序使用非递归方法得到盘子移动的先后次序,因此可以先执行盘子执行的顺序结果,查看该字符串是否正确;接着运行初始化部分,动态显示代码将其注释,暂不执行,查看盘子的大小㊁彼此的间隔位置等数值设置是否正确等㊂将代码下载至嵌入式终端设备,出现错误时可以更换设备终端㊁更换连接方式㊁更换测试代码等方式,进行错误快速定位与排错㊂程序在嵌入式终端设备运行时,可以使用弹窗式调试法,将测试的图形元素当前在屏幕上的位置及时显示出来,从而了解当前事物坐标值正确与否㊂使用试探法观察1个盘子的运行效果,而后逐渐增加盘子个数来观察程序的正确性,并且对于其各个坐标值的设置作进一步的调整㊂在测试程序时,还可以根据经验或直觉推测错误出现的原因及解决方法,例如终端设备的内核定制中,稍有不足就会使得整个定制过程重新开始㊂基于绘图的界面设计依赖于布局的总体设计与规划,动态获取终端设备的屏幕大小,灵活调整最终运行界面效果,界面适应性较好,但程序代码量比较大,涉及到的坐标值比较多,调试过程中的细节处理开销较大㊂4 结 语嵌入式系统开发具有多样性的特点,如设备多样㊁O S多样㊁工具多样等,因此在实际应用中,界面调试的过程和方法也有所不同㊂例如本文中所举的两个实例,如果运行在已经定制好内核的O K 2410终端板,是不需要进行界面再调试的,P C 端的程序直接下载即可㊂此时,H 模型只需要完成上半部分㊂在嵌入式开发中,还可以采取介于基于控件和基于绘图之间的做法,即把控件随意拖拽至窗体上,而后通过代码调整彼此之间的相对位置,完成界面的初步实现,其后的调试仍旧可按照H 模型的方法来完成㊂经过实践,说明H 模型方法具有较好的实用性和可操作性㊂但是,随着界面复杂性的提高,对于H 模型的适应要求则更高,需要对其进行更深入的研究与探索㊂参考文献[1]张银奎.软件调试[M ].北京:电子工业出版社,2008.[2]S P S r e e j a ,N a v e e n K u m a r S ,M a n o h a r R .A R e v i e w o n S o f t w a r e T e s i n g M e t h o d o l o gi e s [J ].I n t e r n a t i o n a l J o u r n a l o f R e c e n t T r e n d s i n E n g i n e e r i n g &R e s e a r c h ,2018,4(3):229234.[3]J o h n R o b b i n s .应用程序调试技术[M ].潘文林,等译.北京:清华大学出版社,2001.[4]V a h i d G a r o u s i ,M i c h a e l F e l d e r e r .W h a t w e k n o w a b o u t t e s -t i n g e m b e d d e d s o f t w a r e [J ].I E E E S o f t w a r e ,2018,35(4):6269.[5]蔡建平.嵌入式软件测试实用技术[M ].北京:清华大学出版社,2010.[6]J K R S a s t r y ,M L a k s h m i P r a s a d .T e s t i n g e m b e d d e d s ys t e m t h r o u g h o p t i m a l m i n i n g t e c h n i qu e (OMT )b a s e d o n m u l t i i n pu t d o m a i n [J ].I n t e r n a t i o n a l J o u r a n a l o f E l e c t r i c a l a n d C o m p u t e r E n g i i n e e r i n g,2019,9(3):21412151.[7]张光兰,万莹.移动应用G U I 测试技术综述[J ].现代计算机,2019(10):4448.[8]I s a b e l l a ,E m i R e t n a .S t u d y P a pe r o n T e s t C a s e g e n e r a t i o nf o r G U I B a s e d T e s t i ng [J ].I n t e r n a t i o n a l J o u r n a l o f S o f t w a r e E n g i n e e r i n g &A p pl i c a t i o n s ,2012,3(1):139147.[9]吴建湘.基于嵌入式L i n u x 系统下的Q t 测试软件开发[J ].电脑迷,2018(11):59.[10]沈炜,王晓聪.基于Q t 的嵌入式图形界面的研究与应用[J ].工业控制计算机,2016,29(1):101102,104.[11]戴莉萍.基于Q t 与A n d r o i d 的实验查错系统设计与实现[J ].实验室研究与探索,2017(1):132135.[12]龚丽.浅谈Q t 中的布局管理[J ].电脑知识与技术(学术交流),2014(9):58835886.[13]R i m a n t a s S e i n a u s k a s ,V yt e n i s S e i n a u s k a s .E x a m i n a t i o n o f t h e p o s s i b i l i t i e s f o r i n t e g r a t e d t e s t i n g o f e m b e d d e d s ys t e m s [J ].A m e r i c a n J o u r n a l o f E m b e d d e d S y s t e m s a n d A p pl i c a -t i o n s ,2013,1(1):112.[14]M a t t T e l l e r s ,Y u a n H s i e h .程序调试思想与实践[M ].邓劲生,等译.北京:中国水利水电出版社,2002.[15]G l e n f o r d J M ye r s .软件测试的艺术[M ].王峰,等译.北京:机械工业出版社,2006.[16]安晓辉.Q t o n A n d r o i d 核心编程[M ].北京:电子工业出版社,2014.戴莉萍(讲师),主要研究方向为软件工程㊂(责任编辑:薛士然 收稿日期:2020-10-10)S i l i c o n L a b s 携手E d g e I m pu l s e 加速实现机器学习应用S i l i c o n L a b s (亦称 芯科科技 )宣布与领先的边缘设备机器学习(M L )开发平台E d g e I m pu l s e 携手合作,实现在S i l i c o n L a b s E F R 32无线片上系统(S o C )和E F M 32微控制器(M C U )上快速开发和部署机器学习应用㊂E d g e I m pu l s e 工具可在低功耗且内存受限的远程边缘设备上实现复杂的运动检测(m o t i o n d e t e c t i o n)㊁声音识别和图像分类㊂研究表明,往往由于人工智能(A I )/机器学习方面的挑战,87%的数据科学项目从未实现量产㊂通过S i l i c o n L a b s 与E d ge I m -p u l s e 之间的这种新合作,设备开发人员只需轻点按钮,即可直接生成机器学习模型并将其导出至设备或S i m p l i c i t y St u d i o (S i l i c o n L a b s 的集成开发环境),在数分钟内便可实现机器学习功能㊂S i l i c o n L a b s 物联网副总裁M a t t S a u n d e r s 表示: S i l i c o n L a b s 相信,我们努力将机器学习融入到边缘设备中,将会使物联网更加智能㊂E d g e I m p u l s e 提供安全㊁私密且容易使用的工具,在实现机器学习时为开发人员节省了时间和资金,并为从预测性维护㊁资产跟踪到监控和人员检测等实际商业应用带来了令人惊叹的新用户体验㊂通过在S i m p l i c i t y S t u d i o 中集成部署,E d g e I m pu l s e 可使开发人员免费在各种S i l i c o n L a b s 产品上快速创建神经网络㊂通过在E F R 32和E F M 32器件(例如MG 12㊁MG 21和G G 11)中嵌入最先进的T i n yM L 模型,该解决方案能够实现以下功能:真实的传感器数据收集和存储㊁高级信号处理和数据特征提取㊁机器学习㊁深度神经网络(D N N )模型训练㊁优化嵌入式代码部署㊂E d ge I m -p u l s e 工具还可以利用E d g e I m p u l s e 的E d g e O pt i m i z e d N e u r a l (E O N )技术来优化内存使用和推理时间㊂E d g e I m p u l s e 联合创始人兼首席执行官Z a c h S h e l b y 表示:嵌入式机器学习在工业㊁企业和消费领域的应用是无止境的㊂将机器学习与S i l i c o n L a b s 的先进开发工具和多协议解决方案整合在一起,将为客户带来绝佳的无线开发机遇㊂。
嵌入式调试的方法
嵌入式调试是指在嵌入式系统开发过程中,通过调试工具和方法对嵌入式系统进行故障定位和问题解决的过程。
嵌入式系统通常具有实时性、硬件资源受限、系统闭合性等特点,因此嵌入式调试需要特殊的方法和工具来进行。
下面将介绍几种常见的嵌入式调试方法。
1. 仿真调试法
仿真调试是指在嵌入式系统开发过程中,利用仿真工具对系统进行软件调试和验证。
仿真工具可以模拟目标硬件的运行环境,使开发人员可以在计算机上进行调试。
通过仿真调试,开发人员可以在不依赖目标硬件的情况下进行软件调试,提高调试效率和便捷性。
2. 调试工具法
调试工具是嵌入式系统调试的关键。
常见的调试工具包括调试器、示波器、逻辑分析仪等。
调试器可以连接到目标硬件上,通过调试接口与目标系统通信,实现对目标系统的软件调试。
示波器和逻辑分析仪可以用来观测目标系统的电信号和逻辑信号,帮助开发人员分析系统运行状态和故障原因。
3. 调试信息输出法
在嵌入式系统开发过程中,开发人员可以在代码中插入调试信息输出语句,将系统运行时的状态信息输出到调试端口或者日志文件中。
通过观察调试信息,开发人员可以了解系统的运行状态和问题所在。
4. 调试工具辅助法
调试工具辅助法是指利用辅助工具来辅助嵌入式系统的调试。
常见的辅助工具包括追踪分析工具、覆盖率工具、性能分析工具等。
这些辅助工具可以帮助开发人员分析系统的执行路径、代码覆盖情况、系统性能等,从而帮助开发人员定位和解决系统故障。
5. 调试打印法
调试打印法是指在程序中插入打印语句,输出程序执行过程中的状态信息。
通过观察打印输出,开发人员可以了解程序的执行路径、变量取值等信息,帮助定位和解决问题。
除了上述几种常见的嵌入式调试方法外,还有一些特定的调试技术和方法,比如JTAG调试、RTOS调试、硬件调试等。
总的来说,嵌入式调试是一个复杂而有挑战性的工作,需要开发人员熟练掌握各种调试工具和方法,同时具备较强的分析和解决问题的能力。
随着嵌入式系统的复杂性不断增加,嵌入式调试也将面临更多的挑战和机遇。
希望通过不断的学习和积累,开发人员能够更好地应对嵌入式系统调试工作,为嵌入式系统的开发和应用做出更大的贡献。