微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 系统调试信息的显示方法

系统调试信息的显示方法

时间:03-07 来源:互联网 点击:

实现

现在,可以编写自己的printf()函数了。以下给出TC20编译环境下的具体实现代码,在其他环境下,可以根据该原理进行移植。也可以按位显示二进制数。对于其他类型,读者可以根据需要增删。

在实际应用中,可以修改其中的putchar()函数,将字符发到串口,就可以达到上述目的了。这里我们编写的函数还增加了数字的二进制显示,这对于很多位域应用是很有用处的。

  /*printf()函数的实现代码,为和库函数区别,特在各函数前增加前缀“my”*/

  void myprintf(char *fmt,…)

  {

  void *p;

  char ch;

  p=fmt;p=(char**)p+1;/*指向堆栈中的下一个参数*/

  while(1){

  while((ch=*fmt++)!='%'{/*读入格式字符串*/

  if(ch= ='0')return;

  putchar(ch);

  };

  ch=*fmt++;

  switch(ch){ /*格式字符分析*/

  /*因为字符参数传递时也转换成整形参数传递,故同样处理*/

  case 'c':

  case'd':

  case'x':

  case'0':

  case'b':

  if(ch= ='c')myputchar(*(int *)p));

  if(ch= ='d')myprintn(*((int *)p),10);

  if(ch= ='x')myprintn(*((int *)p),16);

  if(ch= ='o')myprintn(*((int *)p),8);

  if(ch= ='b')myprintn(*((int *)p),2);

  p=(int)p+1; /*指针移动*/

  break;

  case's':

  myputs(*((char **)p));

  p=(char **)p+1; /*指针移动*/

  break;

  default;

  };

  }

  }

  void myputs(char str) /*显示一个字符*/

  {

  while((*str)!='0')myputchar('str++);

  }

  /*显示任意进制的数值,b为二、八、十、十六等进制数*/

  void myprintn(int,n,int b)

  {

  if(b= =16){ myprintx(n); return; }

  if(n0){ myputchar('-'); n=-n; };

  if(n/b)

  myprintn(n/b,b);

  myputchar(n%b+'0');

  }

  void myprintx(int n) /*以十六进制显示1个数字*/

  {

  signed char i;

  for(i=3;i>=0;i--)

  if(((n》i*4)0x0f)>=10)

  /*当10,11…时,显示'a','b',…'f',*/

  myputchar(((n》i*4)0x0f)-10+'a');

  else myputchar(((n》i*4)0x0f)+'0');

  }

  /*

  *在很多嵌入式系统中,并不存在PC一样的标准显示设备,

  *通过修改该函数,可以将字符“ch”发送到串口,或者目

  *标系统中的LED、LCD等显示器件。这样,就可以在脱

  *离开发系统情况下显示调试信息,从而调试目标系统的软

  *件或硬件。

  */

  void myputchar(int ch)

  {

  ……;/*此函数可供修改,将字符“ch”送到SBUF或其他显示器件就可以了*/

  }

4 超级终端软件的使用

超级终端,即计算机显示终端,是计算机系统的输入、输出设备。计算机显示终端伴随主机时代的集中处理模式而产生,并随着计算技术的发展而不断发展。迄今为止,计算技术经历了主机时代、PC时代和网络计算时代这三个发展时期,终端与计算技术发展的三个阶段相适应,应用也经历了字符哑终端、图形终端和网络终端这三个形态。超级终端是一个通用的串行交互软件,很多嵌入式应用的系统有与之交换的相应程序,通过这些程序,可以通过超级终端与嵌入式系统交互,使超级终端成为嵌入式系统的“显示器”。

打开Windows的“超级终端”软件,再打开“hypertrm”,新建一个终端会话。在该会话的“属性u35774设置u32456终端仿真”菜单下,将终端仿真类型设置为VT100[5];在“属性u35774设置u32456终端设置u23383字符集”菜单下设置字符集为“ASCII”;在“属性u36830连接到u37197配置u24120常规u26368最快速度”下设置通信波特率和目录系统一致,并将该对话框下“仅以该速度连接打开”设置选中;在“属性u36830连接到u37197配置u36830连接u36830连接首选项”下设置传送数据位数、校验方式。

超级终端的原理是将用户输入随时发向串口(采用TCP协议时是发往网口,这里只说串口的情况),但并不显示输入。它显示的是从串口接收到的字符。所以,嵌入式系统的相应程序应该完成的任务便是:

1、将自己的启动信息、过程信息主动发到运行有超级终端的主机;

2、将接收到的字符返回到主机,同时发送需要显示的字符(如命令的响应等)到主机。

在用超级终端显示时,唯一要求发送的数据必须以ASCII码形式发送(上述printf()函数就是如此)。如果要求交互式双向数据传送,请参考VT100文档[5]。对于字符和控制的说明,这里不再描述。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top