在单机开发中经常使用串口调试或者收集实时各种数据类型不同的数据少不了使用printf()函数重定向,但是对于资源紧缺的单片机使用printf(),性能不佳。为了以后工作方便,把几个常用的打印函数记录下来。
非递归实现见另一个博客http://www.cnblogs.com/02xiaoma/archive/2012/06/22/2558618.html
不过该博客里的void printflt(double flt) 不能正确打印 如,1.000123,1.01 1.001,1.0001等小数点后紧跟0的格式
非递归
整数打印
void printHex(int integer)
{
unsigned char isnegative = 0,len = 0, intstr[10]={'\0'};
if(integer < 0)
{
isnegative = 1;
integer = 0 - integer;
}
if (integer == 0)
intstr[len++] = '0';
while (integer)
{
intstr[len++] = (integer % 10) + '0';
integer = integer / 10;
}
if(isnegative)
intstr[len++] = '-';
//注意这个k的数据类型 使用k >= 0;为结束条件,k是有符号类型,若是无符号类型,k值回滚到最大值
for(len = len; len > 0; len--)
{
//printf("%c", intstr[len-1]); UartSend(UART1,&intstr[len-1],1);
}}
浮点数
void printFlt(float flt,int len)
{
int integer;
integer = (int)flt;
printHex(integer);
//printf(".");
UartSend(UART1,".",1);
flt = flt - integer;
//while(flt&&(len--))
while(flt)
{
flt = flt*10;
integer = (int)flt + '0';
flt = flt - integer;
//printf("%c",integer);
UartSend(UART1,&integer,1);
}
}
针对资源有限的单片机,由于printf()函数性能不足,本文记录了几个常用的非递归串口打印函数,包括整数打印,以提高工作效率。文章中提到了其他博客的一个非递归实现,但指出了其在打印特定格式小数时的问题。

被折叠的 条评论
为什么被折叠?



