2011-01-11 12 views
8

Widzę instrukcję "printf" w przykładowych kodach języka dla mikrokontrolera, szczególnie w 8051. Ponieważ mikrokontrolery nie mają stałego wyświetlania danych wyjściowych, jaki jest pożytek z instrukcji "printf"?"printf" w mikrokontrolerze, po co to jest?

+0

może po prostu trochę stub dla stymulatora/debuggera? nie można powiedzieć, nie widząc kodu źródłowego biblioteki. –

Odpowiedz

16

Najprawdopodobniej można dołączyć konsolę debugowania, albo przez port RS232, albo jako wyjście wirtualne z emulatora obwodu.

7

Można interfejs mikrokontrolera do portu szeregowego komputera i monitorować dane

printf

użyciu HyperTerminal. Można go również użyć do celów diagnostycznych.

11

printf jest zdefiniowany tak, aby wyprowadzał na stdout nie "wyświetlacz wyjściowy", stdout może być dowolnym urządzeniem strumieniowym. Zwykle w systemie bez wyświetlacza będzie on wysyłany do interfejsu szeregowego (UART), tak aby terminal lub emulator terminala (np. HyperTerminal lub TeraTerm) mógł być używany jako urządzenie wyświetlające.

Niektóre środowiska programistyczne implementują "semi-hosting", gdzie stdio, stdin i stderr, a nawet w niektórych przypadkach system plików jest dostarczany przez hosta rozwoju za pośrednictwem interfejsu debuggera (JTAG, ICE, SWD itp.).

Generalnie biblioteka twojego kompilatora dostarczy ci haki lub kody pośredniczące, abyś mógł zaimplementować sterowniki dla alternatywnych urządzeń I/O strumienia, więc na przykład możesz zaimplementować je tak, aby printf wyświetlał się na wyświetlaczu LCD, jeśli twoje urządzenie je posiada . Nazywa się to "retargettingiem".

4

Niektóre narzędzia programistyczne pozwala na użycie printf dana implementacja putchar lub Putch. W takich narzędziach, ponieważ masz tę funkcję wysyłając znaki do jakiegoś urządzenia, printf wyświetli wiadomości na tym urządzeniu.

Trzeba tylko wykonać poprawną inicjalizację urządzenia, zaimplementować putchar, putch lub inne (sprawdź dokumentację kompilatora/lib) i voilá! Twój printf będzie zachowywał się tak, jak oczekujesz.

PS: Niektóre kompilatory/biblioteki nie implementują wszystkich specyfikatorów formatu printf. Ponownie sprawdź swoje dokumenty.