一种基于串口中断的调试方法

xiaoxiao2020-10-23  16

一种基于串口中断的调试方法
【技术领域】
[0001] 本发明涉及带有串口的嵌入式设备技术领域,具体涉及一种基于串口中断的调试 方法。
【背景技术】
[0002] 串行接口(SerialInterface)是指数据一位一位地顺序传送,其特点是串行接 口是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输 线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。一条信息的各位数据 被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位的传送,按位顺序 进行,最少只需一根传输线即可完成;成本低但传送速度慢。串行通讯的距离可以从几米到 几千米;根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。
[0003]硬件实现简单,不需要操作系统的支持,可以直接由硬件电路实现,硬件成本很 低,因此很容易实现。监控系统与被监控设备的连接采用"端对端"方式,设备连接单一,不 存在相互之间的干扰,出现问题时便于排查。串口的RS-232C/422/485虽然在硬件连线上 各不相同,但从通信协议上又完全相同,这就有了制作通用程序的意义(后面的编程实例 中就有大量通用程序),这种通用程序,配以高层设备协议,就可以先通过一些命令进行测 试,这可以极大地加快程序的编写速度和准确性。串口连接简易,拔插相对方便。
[0004] 串口通信程序编写简单,硬件接口简单,而且直接用电脑显示相关的调试信息,不 需要借助其他外部硬件,可以很方便地进行程序调试,故大量嵌入式设备都选择串口作为 基础的对外调试和配置接口。
[0005] 当前嵌入式设备调试手段基本上都是在设备命令行基础上创建一个调试模式,然 后在该调试模式下进行调试需求。很明显,由于设备命令行需要完成的功能很多,故其代码 设计都较复杂,涉及大量的队列,消息,信号量等资源的处理,这样代码不可避免的会出现 问题。而一旦出现问题,命令行无法与用户交互,用户也就没有途径获取调试信息了。
[0006]有些设备配备了独立的带外通道,在命令行挂死后,可通过带外通道进行调试,但 这种方法成本高(一是硬件成本高,二是需要独立的一套带外系统,软件难度大,只有一些 较大较核心的设备才会考虑带外通道),一般嵌入式设备不会考虑的。

【发明内容】

[0007]本发明克服了现有技术的不足,提供一种基于串口中断的调试方法,用于解决当 设备出现异常,且导致命令行等交互手段无法使用时,此时无法进行调试的技术问题。
[0008]考虑到现有技术的上述问题,根据本发明的一个方面,为解决上述的技术问题,本 发明采用以下技术方案:
[0009] 一种基于串口中断的调试方法,它包括:
[0010] 设备在系统启动时生成一个非激活的调试进程,该进程在非激活态时在后台运 行;
[0011] 在串口中断服务程序中嵌入一个调试状态机,当串口出现中断时,根据中断接收 的字符值进行调试状态机的状态迀移;
[0012] 当调试状态机的状态切换到active时,在后台休眠的调试进程被激活,该进程开 始接收用户调试请求并响应;
[0013] 当用户想要停止调试,发送退出指令给调试进程,调试进程接收后,休眠自己并把 调试状态切换到inactive。
[0014] 为了更好地实现本发明,进一步的技术方案是:
[0015] 根据本发明的一个实施方案,所述调试进程为系统启动时就生成的一个简易进 程,激活后可与用户进行简单的交互,完成用户的一些调试需求。
[0016] 根据本发明的另一个实施方案,所述调试状态机在非激活态的情况下:
[0017] 当出现中断且中断字符等于登录字符1时,状态切换到Active_pending_step_l;
[0018] 当出现中断且中断字符不等于登录字符1时,状态保持不变。
[0019] 根据本发明的另一个实施方案,所述调试状态机在等待激活态的情况下:
[0020] 当出现中断且中断字符等于登录字符x+1时,状态切换到Active_pending_step_ x+1;
[0021] 当出现中断且中断字符不等于登录字符x+1时,状态切换到inactive;
[0022] 当状态进入到Active_pending_step_n时,激活调试进程并把调试状态切换到 active。
[0023] 本发明还可以是:
[0024] 根据本发明的另一个实施方案,所述调试状态机在激活态的情况下,收到中断不 用关注,继续保持active态。
[0025] 与现有技术相比,本发明的有益效果之一是:
[0026] 本发明的一种基于串口中断的调试方法,解决了当设备出现异常,且导致命令行 等交互手段无法使用时,此时无法进行调试的情况下,使用串口中断来激活后台调试进程, 以便及时调试的问题;以及可解决当前主流嵌入式调试方法对系统依赖性强的缺陷;使用 本发明,当系统出现什么异常,只需硬件中断还是正常的,就可完成用户的调试需求。可极 大提高分析问题的效率,对于产品研发和现场调试设备有很大帮助。
【附图说明】
[0027] 为了更清楚的说明本申请文件实施例或现有技术中的技术方案,下面将对实施例 或现有技术的描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅 是对本申请文件中一些实施例的参考,对于本领域技术人员来讲,在不付出创造性劳动的 情况下,还可以根据这些附图得到其它的附图。
[0028] 图1为根据本发明一个实施例的基于串口中断的调试方法流程的示意框图。
【具体实施方式】
[0029] 下面结合实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。
[0030] 如图1所示,一种基于串口中断的调试方法,该方法由2个模块组成,包括调试进 程和调试状态机,具体地:
[0031] 1)设备在系统启动时就生成一个非激活的调试进程,该进程在非激活态时在后台 无任何操作,对系统运行无任何影响,激活后可满足用户预设的一些调试需求。
[0032] 2)在串口中断服务程序中嵌入一个调试状态机,当串口出现中断时,根据中断接 收的字符值来进行调试状态机的状态迀移。
[0033] 3)当调试状态机的状态切换到active时,在后台休眠的调试进程被激活,该进程 开始接收用户调试请求并响应。
[0034] 4)当用户想要停止调试,可发送退出指令给调试进程,调试进程接收后,休眠自己 并把调试状态切换到inactive。
[0035] 调试进程描述:
[0036] 调试进程为系统启动时就生成的一个简易进程,激活后可与用户进行简单的交 互,完成用户的一些调试需求。
[0037] 一直在后台休眠,当中断里面的调试状态机切换到active时,进程被激活。调试 进程具体实现方法可根据用户的实际需求来设计。
[0038] 调试状态机的描述:
[0039] inactive:
[0040] 非激活态。设备启动后默认进入非激活态。此状态下:
[0041] 出现中断且中断字符等于登录字符1时,状态切换到Active_pending_step_l ;
[0042] 出现中断且中断字符不等于登录字符1时,状态保持不变;
[0043] active_pending_step_x:
[0044] 等待激活态。中间态,此状态的个数为登录字符串的字符个数。此状态下:
[0045] 出现中断且中断字符等于登录字符x+1时,状态切换到Active_pending_step_ x+1;
[0046] 出现中断且中断字符不等于登录字符x+1时,状态切换到inactive ;
[0047] 当状态进入到Active_pending_step_n,即进入到最后一个pending态时,激活调 试进程并把调试状态切换到active;
[0048]Active
[0049] 激活态。此状态下,收到中断不用关注,继续保持active态。只有在调试进程收 到用户的退出指令后,才会把状态切换到inactive。
[0050] 具体的状态如图1所示,Pending态(即active_pending_step)的状态数有多个, 都是接收字符等于匹配字符时就切换到下一个pending态,不等于就切换到incative态, 此图中用……来表示此类状态的迀移。
[0051]举例:
[0052] 假设登录字符串为*#**#,共5个字符,那么调试状态机的全部状态如下:
[0053] inactive
[0054] active_pending_stepl
[0055] active-pending-step2
[0056] active-pending-step3
[0057] active-pending-step4
[0058] active-pending-step5
[0059]active
[0060]初始为inactive,
[0061] 当中断收到字符且等于*就切换为active_pending_stepl
[0062] 当中断收到字符且等于#就切换为active_pending_step2
[0063] 当中断收到字符且等于*就切换为active_pending_step3
[0064] 当中断收到字符且等于*就切换为active_pending_step4
[0065] 当中断收到字符且等于#就切换为active_pending_step5
[0066] 以上如果中间有其他字符收到,都统一切换到inactive态
[0067] 进入active_pending_step5后,激活调试进程,如果成功,切换状态到active,失 败切回inactive。到这里,设备的调试进程已经被激活,可以接收处理用户调试信息了。
[0068] 另一实施例,首先是主流调试方法:在当前命令行上输入秘钥进入一个调试模式
[0069]GPON>en
[0070] GPON#
[0071] 氺氺氺氺氺氺氺氺
[0072]GPON(diag) %%
[0073]GPON(diag) %%
[0074] 然后在该模式下进行相关调试,但是由于一些原因,导致任务挂死了
[0076] 此时已经无法进行调试操作了。敲键盘也已经无任何反应的。
[0077] 此时连续输入*#**#5个字符,就会跳出
[0078]
[0079]至此后台的调试进程开始响应用户的请求。
[0080]综上所述,当设备交互进程出现异常,或者有其他异常出现,导致用户telnet,ssh等交互方式都无法使用时,使用串口中断启动一个后台的调试进程,这样可以实时方便的 收集设备异常信息,分析设备问题。该方法当设备在现场出现问题时非常实用,因为现场一 般调试设备很简单(一般就一台电脑),而且一般为非研发人员,这种情况下,一旦出现进 程挂死无法交互的情况,就很难收集调试信息了。而本发明只要串口中断正常,且只需操作 人了解简单的几个调试命令,就可收集调试信息。这对于产品在研发和现场应用都是很有 作用的。
[0081]通过以上实施例描述的基于串口中断的调试方法,具有:
[0082] 1.本发明的实现简单,可以很方便嵌入到设备中,且设备增加本发明后,对设备当 前运行不产生任何影响(正常运行时调试进程为休眠的),即实现成本非常低;
[0083] 2.采用中断+状态机作为登录机制,即可保证登录安全,不知道登录字符串是无 法调用调试工具的,又可保证健壮性,只需要串口硬件正常,基本上可登录,对系统依赖性 小;
[0084] 3.简易的调试进程,完全自定义调试需求。即可以直接跳转到已有调试手段上,有 可以按需求自定义。
[0085]本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它 实施例的不同之处,各个实施例之间相同相似部分相互参见即可。
[0086]尽管这里参照本发明的多个解释性实施例对本发明进行了描述,但是,应该理解, 本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申 请公开的原则范围和精神之内。
【主权项】
1. 一种基于串口中断的调试方法,其特征在于它包括: 设备在系统启动时生成一个非激活的调试进程,该进程在非激活态时在后台运行; 在串口中断服务程序中嵌入一个调试状态机,当串口出现中断时,根据中断接收的字 符值进行调试状态机的状态迀移; 当调试状态机的状态切换到active时,在后台休眠的调试进程被激活,该进程开始接 收用户调试请求并响应; 当用户想要停止调试,发送退出指令给调试进程,调试进程接收后,休眠自己并把调试 状态切换到inactive。2. 根据权利要求1所述的基于串口中断的调试方法,其特征在于所述调试进程为系统 启动时就生成的一个简易进程,激活后可与用户进行简单的交互,完成用户的一些调试需 求。3. 根据权利要求1所述的基于串口中断的调试方法,其特征在于所述调试状态机在非 激活态的情况下: 当出现中断且中断字符等于登录字符1时,状态切换到Active_pending_step_l; 当出现中断且中断字符不等于登录字符1时,状态保持不变。4. 根据权利要求1所述的基于串口中断的调试方法,其特征在于所述调试状态机在等 待激活态的情况下: 当出现中断且中断字符等于登录字符x+1时,状态切换到Active_pending_step_x+1; 当出现中断且中断字符不等于登录字符x+1时,状态切换到inactive; 当状态进入到Active_pending_step_n时,激活调试进程并把调试状态切换到active。5. 根据权利要求1所述的基于串口中断的调试方法,其特征在于所述调试状态机在激 活态的情况下,收到中断不用关注,继续保持active态。
【专利摘要】本发明公开了一种基于串口中断的调试方法,设备在系统启动时生成一个非激活的调试进程,该进程在非激活态时在后台运行;在串口中断服务程序中嵌入一个调试状态机,当串口出现中断时,根据中断接收的字符值调试状态机的迁移;当调试状态机的状态切换到active时,在后台休眠的调试进程被激活,该进程开始接收用户调试请求并响应;当用户想要停止调试,发送退出指令给调试进程,调试进程接收后,休眠自己并把调试状态切换到inactive。使用本发明,当系统出现什么异常,只需硬件中断还是正常的,就可完成用户的调试需求,提高了分析问题的效率。
【IPC分类】G06F11/36
【公开号】CN104899144
【申请号】CN201510341260
【发明人】肖建锋, 罗勇, 胡俊峰, 黄继锋, 康华
【申请人】深圳市新格林耐特通信技术有限公司
【公开日】2015年9月9日
【申请日】2015年6月18日

最新回复(0)