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

    xiaoxiao2021-12-14  20

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

    转载请注明原文地址: https://ju.6miu.com/read-971651.html

    最新回复(0)