改写串口库,自带的库内存太大

来源:互联网 发布:界面编程 编辑:程序博客网 时间:2024/05/16 12:22
void print_ch(char s){    SendData(s);//        buf[pp] = s;//        pp++;}void print_chs(char*s){        while(*s)        {                print_ch(*s++);        }}//字符串void print_str(char* str){    print_chs(str);}//打印2进制数,打印2进制数,除0和负数void print_bin_0(int bin){                if(bin == 0)        {                print_chs("0b");                return;        }        print_bin_0(bin/2);        print_ch( (char)(bin%2 + '0'));}//打印2进制数void print_bin(int bin){                if(bin == 0)        {                print_chs("0b0");                return;        }    if(bin<0)    {        print_ch('-');        bin = 0-bin;    }        print_bin_0(bin);}//打印10进制数,除0和负数void print_dec_0(long dec){        if(dec==0)        {        return;        }        print_dec_0(dec/10);        print_ch( (char)(dec%10 + '0'));}//打印10进制数void print_dec(long dec){        if(dec==0)        {        print_ch('0');        return;        }    if(dec<0)    {        print_ch('-');        dec = 0-dec;    }        print_dec_0(dec);}//打印float小数void print_flt(double flt){        //int icnt = 0;        long tmpint = 0;    unsigned char i = 0;    if(flt<0)    {        print_ch('-');        flt = 0-flt;    }    else if(flt==0)    {        print_ch('0');        return;    }        tmpint = (int)flt;    if(tmpint>=1)    print_dec(tmpint);    else if(flt>0)   print_ch('0');        flt = flt - tmpint;    if((flt!=0)&&(flt<1))    {        print_ch('.');        tmpint = (long)(flt * 1000000);        for(i=6;i>0;i--)        {            flt *= 10;            if((char)(flt)%10 == 0) print_ch('0');            else break ;        }        for(i=6;i>0;i--)        {            if(tmpint%10 == 0) tmpint /= 10;            else break ;        }        print_dec(tmpint);    }}//以16进制打印,除0和负数void print_hex_0(long hex){        if(hex==0)        {                print_chs("0x");                return;        }        print_hex_0(hex/16);    hex %= 16;        if(hex < 10)        {                print_ch((char)((hex%16) + '0'));        }        else        {                print_ch((char)((hex%16) - 10 + 'A' ));        }}//以16进制打印void print_hex(long hex){        if(hex==0)        {                print_chs("0x0");                return;        }    if(hex<0)    {        print_ch('-');        hex = 0-hex;    }        print_hex_0(hex);}void print(char* fmt, ...){    double vargflt = 0;    int  vargint = 0;    char* vargpch = NULL;    char vargch = 0;    char* pfmt = NULL;    va_list vp;    va_start(vp, fmt);    pfmt = fmt;    while(*pfmt)    {        if(*pfmt == '%')        {            switch(*(++pfmt))            {                case 'c':                    vargch = va_arg(vp, int);                     /*    va_arg(ap, type), if type is narrow type (char, short, float) an error is given in strict ANSI                        mode, or a warning otherwise.In non-strict ANSI mode, 'type' is allowed to be any expression. */                    print_ch(vargch);                    break;                case 'd':                case 'i':                    vargint = va_arg(vp, int);                    print_dec(vargint);                    break;                case 'f':                    vargflt = va_arg(vp, double);                    /*    va_arg(ap, type), if type is narrow type (char, short, float) an error is given in strict ANSI                        mode, or a warning otherwise.In non-strict ANSI mode, 'type' is allowed to be any expression. */                    print_flt(vargflt);                    break;                case 's':                    vargpch = va_arg(vp, char*);                    print_str(vargpch);                    break;                case 'b':                case 'B':                    vargint = va_arg(vp, int);                    print_bin(vargint);                    break;                case 'x':                case 'X':                    vargint = va_arg(vp, int);                    print_hex(vargint);                    break;                case '%':                    print_ch('%');                    break;                default:                    break;            }            pfmt++;        }        else        {            print_ch(*pfmt++);        }    }    va_end(vp);}
原创粉丝点击