一种实现单片机运行信息观察的方法

文档序号:6420377阅读:106来源:国知局
专利名称:一种实现单片机运行信息观察的方法
技术领域
本发明涉及一种单片机运行信息观察的方法,尤其涉及80C51单片机领域的运行信息观察方法。
背景技术
80C51及与其兼容的系列单片机作为工业的标准地位,广泛应用于各类电器及通讯产品中。绝大多数情况下,80C51单片机软件程序需要加很多打印信息来观察系统的运行状况,以便在出现BUG或故障时查找和定位。一般的方法是在程序中需要打印的地方直接调用编译器提供的printf函数(一般80C51编译器均提供该函数)向串口打印,打印的内容一般包括说明文字和相应数据,后台PC机上就用超级终端等工具显示。
这种传统方法的主要缺点有第一,没有包含时间信息,不利于故障的定位;第二,打印是一种慢速操作,在短时间内需要大量打印时,串口输出对系统的资源占用太多,对于实时性要求较强的系统有可能造成时序错误;第三,printf函数采用查询的方式输出,主程序必须等待所有数据在串口上全部发送完毕才能接下去执行;第四,由于printf函数是编译器提供的默认函数,不方便重定向为默认串口以外的其他接口发送和接收。

发明内容
本发明的目的是为了克服一般运行信息观察方法调用printf()的弊病,提出了一种单片机的运行信息观察方法,带有时间戳功能,节约了代码空间,加快程序运行和处理速度,方便接口的重定位,方便故障的查找和排除。
本发明采用的方法为在单片机中运行一前台模块,在PC机中运行一后台模块,两者通过串口连接;前台模块运行在单片机上,当用户需要在程序的某个部位打印运行信息时,将一个运行信息号(2个字节)和数据部分作为参数调用该模块的入口函数osOutputRunInfo。在该函数中封装帧头(运行信息号、时间戳、长度),调用前后台通讯函数发送。
发送函数将运行信息帧放入底层驱动的消息发送队列中,然后启动发送中断。发送队列采用单循环队列方式进行管理,发送中断服务程序检测到消息发送队列不空,则采用中断方式从队列中取数据向外发送,直到发完为止。整个发送过程由中断服务程序完成,不影响主程序运行。由于发送函数可以将信息帧放入不同的硬件驱动对应的发送队列,并开启不同硬件驱动的发送中断,所以,通过改变这个发送函数的目的消息发送队列,可以简单的重定向运行信息的收发接口。
后台系统运行在PC机上,在解析到收到的一帧为运行信息观察的消息后,送到相应后台模块处理。后台模块首先解析帧头,取出运行信息号和时间戳。在后台模块,根据前台使用的信息号和对应的意义,用户需要维护一张运行信息号和说明文字、数据解析方法的对照表,后台模块根据这张表解析帧的内容,还原成包含说明文字和数据内容的完整消息,连同时间戳显示给用户。
由于前台每一次时钟中断中时间戳加一,所以根据时钟中断一次的具体时间,用户可以由时间戳计算出各条消息之间的时序关系。


图1是本方法所采用的结构示意图。
图2是前台模块入口函数流程图。
图3是后台解析过程示意图。
具体实施例方式
本发明的要点是1)在时钟中断中维护一个不断计数的全局变量作为时间戳,在每条运行信息输出时打上这个时间戳。用户可以根据这个时间戳方便地计算出时序关系。
2)为了最大限度地减轻前台单片机软件的负荷,减少串口中断次数和串口数据流量,将打印信息中的文字说明部分转移到PC机后台,每次单片机软件只输出数据部分,后台进行解析后还原出整个消息。
3)运行信息帧被放入底层发送队列,发送队列采用单循环队列方式进行管理,串口中断服务程序检测到发送队列不空,则采用中断方式从队列中取数据向外发送,直到发完为止,而不需要主程序在打印信息时等待,使打印对系统的影响变到最小。
运行信息输出时采用填写消息队列的形式,每个消息队列对应一个底层输入输出接口,通过改变输出的消息队列,方便地转换输出接口。
下面结合附图对本发明进行详细描述。
如图1所示系统分为前台模块和后台模块,前台模块运行在单片机上,后台模块运行在PC机上,两者用串口连接。前台模块负责运行信息的组帧、打时间戳、发送,用户程序只需调用相关接口函数即可。后台模块负责解析帧和显示。
如图2所示前台模块的入口函数void osOutputRunInfo(WORD wInfoNo,BYTE byLength,BYTE*pbInfoData)输入参数WORD wInfoNo 运行信息号BYTE byLength 标识pbInfoData的长度BYTE*pbInfoData信息内容函数进行组帧,运行信息的帧结构如下表所示

在组帧结束后,调用前台的发送函数发送。这个发送函数向输入输出接口驱动对应的发送队列发送消息。因为不同的消息队列对应不同物理链路和协议的接口,通过改变这个接口函数的目的消息队列,可以简单的重定向运行信息的收发接口。
如图3所示后台模块在开始运行时,从文件中读入对照表(对照表根据运行信号从小到大排序)。在收到消息体后,首先根据运行信息号在对照表中采用折半查找(提高查找效率)找到对应的解析条目。对照表中的每一个条目由文字说明部分和数据部分混合构成(也可只有文字或数据),解析的目的就是将条目中的数据部分用消息体中的真实数据来取代。
条目中的数据部分采用C语言标准的输出表示形式,例如“%4d”,4表示需要解析的字节数,d表示用整形数来解析,合起来的含义就是取4个字节的数据并用整形数来解释。后台模块从前向后读条目,当遇到%号时,表示后面紧接着的是表示长度的数字,从消息体中的数据部分读出相应长度的字节数,然后根据条目中数字后面的标识符,用对应的规则转换这些数据。依次进行,直到读完条目,完整的消息就被还原了出来,最后打上时间戳,显示给用户。
用到的数据标识种类


用户可以根据不同系统的需要,编辑不同的解析表文件,并从后台模块载入解析表文件,从而可以达到通用的目的。
下面举一个具体实例在前台模块的单片机部分用户在需要打印的地方调用osOutputRunInfo,将需要打印的2个数据56和78作为参数传入,将使用的运行信息号1008作为参数传入。在函数中,将当前的时间戳5000加入,组合成帧,如下

然后发送到后台。
在后台模块的解析表文件中有以下一条1008 PCF8591 Result%1d,%1d后台模块在收到1008号运行信息后,第一步从解析表文件中查找到相关条目,第二步进行解析,第三步增加时间戳,将最终结果显示在屏幕上,如下表

从上表中对比可以看出,运行信息号为1008的打印信息,发送了7个字节(包括运行信息号,时间戳、长度、内容等),后台显示为22个字节(不算时间戳),发送效率提高了22/7-1=2倍。如果说明文字更多,提高效率更高。
假如另一条信息号为1009的消息显示的时间戳为5002,则两条消息显示的时间戳相差2,如果前台每次时钟中断间隔10ms,则前台发送这2条消息时相隔了20个毫秒。
权利要求
1.一种对单片机运行信息进行观察的方法,在单片机中运行一前台模块,在PC机中运行一后台模块,两者通过串口连接,其特征在于,在所述前台模块中,对需要在程序的某个部位打印运行信息时,将运行信息号和数据部分作为参数调用前台模块的入口函数,并在该函数中封装帧头信息后,调用前后台通讯函数将其发送到后台模块;发送函数将运行信息帧放入底层驱动的消息发送队列中,启动发送中断;在所述后台模块中,解析帧头信息,并根据预先设置的对照表和规则还原成包含说明文字和数据内容的完整的消息显示出来。
2.权利要求1所述的对单片机运行信息进行观察的方法,其特征在于,所述帧头信息包括信息号、时间戳和信息长度。
3.权利要求1所述的对单片机运行信息进行观察的方法,其特征在于,所述前后台发送函数的发送方法为发送函数将运行信息帧放入底层驱动的消息发送队列中,然后启动发送中断;发送队列采用单循环队列方式进行管理,发送中断服务程序检测到消息发送队列不空,则采用中断方式从队列中取数据向外发送,直到发完为止。
4.权利要求1所述的对单片机运行信息进行观察的方法,其特征在于,后台模块的工作过程为在开始运行时,从文件中读入对照表,在收到消息后,根据运行信息在对照表中查找对应的解析条目,用对应的规则进行解析,最后打上时间戳,显示给用户。
全文摘要
一种实现单片机运行信息观察的方法在单片机中运行一前台模块,在PC机中运行一后台模块,两者通过串口连接;当用户需要在程序的某个部位打印运行信息时,将运行信息号和数据部分作为参数调用该模块的入口函数。在该函数中封装帧头(运行信息号、时间戳、长度),调用前后台通讯函数发送。后台系统在解析到收到的一帧为运行信息观察的消息后,送到相应后台模块处理。后台模块首先解析帧头,取出运行信息号和时间戳。根据解析方法的对照表,还原成包含说明文字和数据内容的完整消息,连同时间戳显示给用户。由于前台每一次时钟中断中时间戳加一,所以根据时钟中断一次的具体时间,用户可以由时间戳计算出各条消息之间的时序关系。
文档编号G06F11/00GK1545029SQ20031011219
公开日2004年11月10日 申请日期2003年11月14日 优先权日2003年11月14日
发明者周志雄, 张彦春, 谢志雄, 崔卓 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1