uC, PC i UART

Prolog:
Fakt 1. Elektronicy mają wyrobiony nawyk używania LCD alfanumerycznego (typowo 16x2) do wyświetlania krótkich informacji z zestawu uC. Koszt wynosi 15-25 zł + 8-12 użytych GPIO. Zaleta: nie potrzeba podłączać zestawu uC do komputera - wystarczy zasilanie, aby dało się odczytać te informacje.

Fakt 2. Informatycy od kilkudziesięciu lat znają terminal znakowy do komunikacji między człowiekiem a maszyną.

Inne fakty:
  • programowanie uC odbywa się z poziomu PC, zasilanie najczęściej też (USB!),
  • uC nie ma wygodnej klawiatury (a trochę dziwne byłoby podłączanie ogromnej klawiatury PS2 do maleńkiego mikrokontrolera)
  • na LCD 16x2 trudno czytać Pana Tadeusza,
  • 2 guziki + nawet 12 kolorowych LEDów to nie jest najbardziej ergonomiczny interfejs użytkownika.
Wnioski:
Idąc tym oczywistym tropem zaprojektowaliśmy i wykonaliśmy płytkę uruchomieniową, która w cenie programatora zawiera konwerter USB-UART. Żadnych dodatkowych kabli USB, RS232 i żadnych wydatków na konwertery FT232RL!
Tak naprawdę mamy w zestawie 'wirtualny' port szeregowy ZA DARMO.
Trudno byłoby uzasadnić w tych warunkach dodatkowy wydatek na LCD.
Wszystko elegancko działa pod WinXP, Win7 i Androidem.
Jest to powód, dla którego zaczniemy od praktycznego wykonania oprogramowania terminala znakowego.
Po co ciągle kompilować i wgrywać nowy program, aby zmienić sposób świecenia lub częstość migania LEDów? wygodniej po prostu wpisać odpowiedni rozkaz w terminalu znakowym na PC lub wręcz kliknąć odpowiedni guzik we własnej aplikacji.
Przykładowe (hipotetyczne) rozkazy: 
leds 0011 0101 1101
timer 123ms
leds off

W ten sposób można też łatwo wyświetlać komunikaty, które wysyła uC (np. wartości napięć na wszystkich wejściach analogowych co sekundę).
Przykład:
# adc@10:02:04 [0]=2.34 [1]=0.0 [2]=3.3 [3]=2.334
# adc@10:02:05 [0]=2.37 [1]=0.2 [2]=3.3 [3]=2.677

Wymagana wiedza:
- tablice znakowe w C (np. char buf[100];)
- wskaźniki znakowe w C (np. char *wsk;)
- arytmetyka wskaźników: (co robi wsk++; a co *wsk++)
- podstawowe operacje na tablicach znakowych w C: strcmp(...), stricmp(...), strstr(...), strlen(...), ...
- pętle for oraz while

Cele:
- wysyłanie sformatowanych wierszy z uC na terminal znakowy (jak w przykładzie)
- gromadzenie odebranych znaków w wiersze (bufor, tablicę znaków) aż do napotkania znaku 13 (CR)
- dekodowanie rozkazów oraz ich argumentów
- wykonanie zdekodowanych rozkazów