如图,为什么printf函数无法正常打印

写程序的时候发现程序会停在一個位置但在代码中插入一条输出任意字符串的printf语句后,程序就可以正常运行了后来发现是问题出在之前数组发生了越界访…

  最近用了C51的单片机具体的型号是SST89E58RD,因为没有仿真器所以需要用串口打印运行中的变量的信息,因为有许多变量什么的如果自己写打印函数,含多不同类型的变量不是很好处理所以考虑用printf()函数进行串口打印。

  首先肯定要添加头文件#include <stdio.h>然后在程序中的适当地方通过调用printf()函数来打印出信息,这裏很奇怪C51内核单片机刻意直接调用printf()打印信息,其用法和标准C语言差不多但是如果是其他内核的单片机,比如说cortex m3内核的如果调用要用printf()咑印,那么必须要重写fputc()函数

  这里串口相关的寄存器要进行初始化,无非就是SCON,PCON(最高位),TMOD,TH1,TL1,TR1.在SCON中的TI一般默认配置的时候是TI = 0,因为这一位是Φ断标志位如果采用查询的方式,就是检测这一位是1还是0而且这一位必须软件清零。

  如果我们配置的时候将TI = 0,那么我们就会发现調用printf()的时候根本打印不出信息,这里的原因我也不知道而且要调用printf()进行打印信息,就不可以开启串口中断否则也无法打印出信息。

  这里总结两点(仅限C51内核):

  1.如果用printf()做串口打印就必须在配置串口相关寄存器的时候吧TI位置1,而且不能开启串口中断

  2.如果需要開启串口中断,那么自己写打印函数否则等着系统不正常吧。

我要回帖

 

随机推荐