单片机不支持printf函数,实现几个常用串口打印函数

针对资源有限的单片机,由于printf()函数性能不足,本文记录了几个常用的非递归串口打印函数,包括整数打印,以提高工作效率。文章中提到了其他博客的一个非递归实现,但指出了其在打印特定格式小数时的问题。

在单机开发中经常使用串口调试或者收集实时各种数据类型不同的数据少不了使用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);
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值