Odpowiedzi

2010-02-04T17:32:58+01:00
Akiś czas temu zafascynowała mnie tematyka mikrokontrolerów, a skoro z zawodu jestem programistą, przykładam do tematu szczególną wagę właśnie do strony oprogramowania. Niestety, dostępne w sieci biblioteki obsługujące peryferia są napisane (zazwyczaj) dość brzydko, są słabo udokumentowane oraz często mało uniwersalne. W związku z tym, postanowiłem zacząć pisać własny zbiór procedur, obsługujących wybrane peryferia (jak mi to wyszło - oceńcie sami). Aktualnie biblioteka tAvrLib pozwala na obsługę ekspandera portów PCF8574 oraz wyświetlacza alfanumerycznego HD44780 - w implementację obsługi tego drugiego włożyłem najwięcej pracy, więc w tym temacie zajmę się właśnie nim.

Na początku zastanawiałem się nad wykorzystaniem C++, ale elegancki, obiektowy kod powodował intensywne zużywanie pamięci flash. Wykorzystałem więc czysty język C, stosując się jednak (w pewnym sensie) do standardów języka obiektowego - funkcje "prywatne" (czyli do użytku wewnętrznego biblioteki) posiadają nazwy zaczynające się od podkreślenia. Dzięki temu użytkownik (czytaj: programista używający biblioteki) wie, których funkcji nie powinien używać.

W sieci jest na pęczki procedur do obsługi tego wyświetlacza, niestety część zawiera błędy (w szczególności nieprawidłowe zawijanie wierszy), większość jest napisana pod konkretny (albo prawie konkretny) rozmiar wyświetlacza. Popularne w Polsce procedury ze strony radzio.dxp.pl są w aż pięciu wersjach (przez co nie są do końca spójne, szczególnie wersja 4x40). Starałem się więc, aby mój kod się wyróżniał - procedury dla wszystkich typów wyświetlaczy są w jednym pliku (konfigurowanym makrodefinicjami), wszystko jest odpowiednio udokumentowane (z użyciem doxygena). Poza tym, zazwyczaj kody źródłowe z internetu nie mają jasno ustalonych zasad użytkowania - w tAvrLib użyłem licencji GNU LGPL v3 - bardzo liberalna i nie sprawiająca problemów przy wykorzystaniu w projektach komercyjnych.