int UART_printf(const char *fmt, ...) { char c; unsigned int *adx = (unsigned int*)(void*)&fmt + 1; _loop: while((c = *fmt++) != '%') { if (c == '\0') return 0; UART_WriteByte(UART_DebugInstance, c); } c = *fmt++; if (c == 'd' || c == 'l') { printn(*adx, 10); } if (c == 'o' || c == 'x') { printn(*adx, c=='o'? 8:16 ); } if (c == 's') { UART_putstr(UART_DebugInstance, (char*)*adx); } adx++; goto _loop; return 0; }
int main(void) { char c; // bufor na znak char s[UART_MAX_GETSTR+1]; // bufor na ³añcuch znaków s16 liczba=0x5555; // liczba do testowania UART_init(); // inicjalizacja portu szeregowego PRINT("Test biblioteki UART .....\n\r"); while(1) { CLEAR(); PRINT("Testowanie funkcji UART_putstr_P() i UART_putstr_E()"); NEWLINE(); UART_putstr_P(text_P); NEWLINE(); UART_putstr_E(text_E); NEWLINE(); NEWLINE(); PRINT("Testowanie funkcji UART_putint()"); NEWLINE(); PRINT("Dwójkowo: "); UART_putint(liczba,2); NEWLINE(); PRINT("Ósemkowo: "); UART_putint(liczba,8); NEWLINE(); PRINT("Dziesiêtnie: "); UART_putint(liczba,10); NEWLINE(); PRINT("Szesnaskowo: "); UART_putint(liczba,16); NEWLINE(); /* NEWLINE(); PRINT("Testowanie funkcji UART_getchar() i UART_putchar()"); NEWLINE(); PRINT("Wyœlij cokolwiek z terminala, znak \"t\" koñczy..."); NEWLINE(); do { c=UART_getchar(); // pobierz znak z wejscia UART_putchar(c); // zrób echo } while (c != 't'); // a¿ nie napotkasz znaku "t" NEWLINE(); */ PRINT("Testowanie funkcji UART_getstr() i UART_putstr()"); NEWLINE(); PRINT("Wyœlij cokolwiek z terminala i naciœnij ENTER"); NEWLINE(); PRINT("...napis \"koniec\" koñczy..."); NEWLINE(); do { UART_getstr(s); // pobierz tekst z wejscia UART_putstr(s); // zrób echo NEWLINE(); } while (strncmp_P(s,PSTR("koniec"),6)!=0); // a¿ nie napotkasz "koniec" } }