void myprintf(const char *format, ...) { if(format == NULL){ return; } va_start(args, format); while(*format != '\0'){ while(*format != '%' && *format != '\0'){ UsartPut(*format); format++; } if(*format != '\0'){ format++; if(*format != '\0'){ check_type(*format); format++; }else{ UsartPut(*(format-1)); } } } va_end(args); }
void print_int(int num, int mode, int flag) { if(num == 0){ if(flag == 0){ UsartPut('0'); return; }else{ return; } } print_int(num/mode, mode, 1); UsartPut(sign[ num%mode ]); }
void check_type(char type) { switch(type) { case 'd': { int num = va_arg(args, int); if(num < 0){ UsartPut('-'); num = num * (-1); } print_int(num, 10, 0); break; } case 'c': { char ch = (char)va_arg(args, int); UsartPut(ch); break; } case 's': { char *str = va_arg(args, char *); print_str(str); break; } case 'f': { float num = (float)va_arg(args, double); if(num < 0) { UsartPut('-'); num = num * (-1); } print_float(num); break; } case 'p': { int num = va_arg(args, int); UsartPut('0'); UsartPut('x'); print_int(num, 16, 0); break; } default: { UsartPut('%'); UsartPut(type); } } }
void print_float(float num) { int part = (int)num/1; print_int(part, 10, 0); UsartPut('.'); part=num*1000000-part*1000000; print_int(part, 10, 0); }
void print_str(char const *str) { if(str == NULL) { return; } while(*str != '\0') { UsartPut(*str); str++; } }
//f-////////////////////////////////////////////////////////////////////////// int fputc(USART_TypeDef* USARTx,int ch, FILE * f) { UsartPut(USARTx, ch); return ch; }