Recenzje:
Według autora po lekturze tej pozycji: poznamy budowę oraz podstawy programowania mikrokontrolerów, dowiemy się jak do swoich celów wykorzystać język C, nauczymy się rozwiązywać rzeczywiste problemy oraz tworzyć praktyczne rozwiązania. W podsumowaniu tej krótkiej recenzji postaram się napisać, czy faktycznie tak jest. Niedawno przesiadłem się z Bascom-a na C, dlatego, pamiętając moje problemy, mogłem spojrzeć na tę książkę okiem osoby początkującej.

Środowiska i programatory
Początek książki to dokładny opis środowiska w jakim będziemy pracować – AVR Studio. Wzbogacony jest on licznymi zrzutami ekranu oraz szczegółowymi opisami od samego procesu instalacji, przez opis programów narzędziowych (linker, avr-size, avr-nim, avr-objcopy), aż do tworzenia bibliotek. Warto zwrócić uwagę, że w opisach tych nie pominięto również użytkowników systemów operacyjnych z rodziny Linux. Jak dla mnie zabrakło w tym miejscu chociażby wzmianki na temat innych bardzo popularnych edytorów – przykładowo Eclipse.

Kolejny rozdział omawia proces programowania mikroprocesora programatorami ISP oraz JTAG. W obu przypadkach opisane są zalety rozwiązań oraz krótkie informacje na temat wgrywania programów do wielu procesorów jednocześnie. Co więcej, pojawiły się również informacje na temat programatorów HW, równoległych oraz trybu TPI. Autor podjął się również zasugerowania użytkownikom jakich programów warto używać do przesyłania wsadów do procesorów. Oprócz standardowych narzędzi zaszytych w AVR Studio pojawiają się również opisy AVRDUDE oraz PonyProg-a. Na koniec omówione zostały lock bity, fusebity oraz zagadnienie sygnatury mikroprocesora.

Omówienie język C
Opisane został również podstaw języka C. Należy zaznaczyć, że z książki tej nie można się nauczyć samego C (co nie było raczej zamiarem autora – przynajmniej takie odniosłem wrażenie). Opisane zostały wszystkie najważniejsze części języka C, szczególnie te, które niezbyt często używa się pisząc programy na inne platformy. Wszystko odebrałem jako powtórkę dla osoby programującej już w C lub C++, a nie jako poradnik dla osoby nieznającej tego języka programowania. Omówiono typy danych, arytmetykę stało oraz zmiennopozycyjną, operacje bitowe, zasięg widoczności funkcji i zmiennych, słowa kluczowe oraz dyrektywy preprocesora. Nie zabrakło też informacji na temat plików źródłowych i nagłówkowych. Omówiono jeszcze sekcje programu - .text, .data, .bss, eeprom, sekcje z kodem programu oraz sekcje specjalne tworzone przez programistę. Było to coś z czym nie spotkałem się do tej pory w innych książkach (lub nie utkwiło mi to w pamięci).

Mikrokontrolery AVR
Kolejne rozdziały książki dotyczą programowania procesorów AVR, co ważne w książce tej pojawia się wiele procesorów z różnych rodziny od Tinny, prze Mega, aż do Xmega. Autor na ich przykładzie przedstawia specyficzne problemy i możliwości dotyczące konkretnych podrodzin mikroprocesorów Atmela. Dalsze części książki to wyjaśnienia dotyczące zarządzania energią, różnymi typami pamięci mikroprocesorów oraz dostępem do nich, pojawiły się tutaj również informacje na temat rzadziej spotykanego w książkach interfejsu XMEM. Wszystkie opisy wzbogacone są odwołaniami do konkretnych rejestrów i przykładami kodów.

Następne części książki już standardowo poświęcone zostały poszczególnym peryferiom procesorów. Prócz teorii przedstawiane są również praktyczne rzeczy takie jak obsługa enkoderów czy tworzenie wielopoziomowego menu. Każdemu interfejsowi komunikacji poświęcono osobny rozdział. Znajdziemy tutaj opisy SPI, TWI, USI, USART, 1-wire, a nawet co może zainteresować wiele osób – USB. W książce znaleźć można również informacje na temat łączenia kilku procesorów, tak aby mogły się ze sobą komunikować.

Bezpieczeństwo i wydajność
Ostatnie rozdziały książki poświęcone zostały bootladerom oraz zabezpieczaniu własnych programów (CRC, AES Bootloader). Pojawiają się również wzmianki na temat łączenia kodu C wraz z tym pisanym w asemblerze. Koniec książki poświęcony jest optymalizacji tworzonych programów oraz debugowaniu ich za pomocą interfejsu JTAG - co często pomijane jest w innych książkach. Po więcej informacji o zawartości tej pozycji odsyłam do opisu książki na stronie wydawnictwa oraz do dostępnego fragmentu tej pozycji.

Dla kogo?
Warto wspomnieć, że książka ta nie opiera się na żadnym konkretnym zestawie uruchomieniowym. Autor na samym początku wymienił elementy, na których będzie można przeprowadzić wszystkie lekcje. Dla jednych jest to wada dla innych zaleta – ocena należy już do czytelnika. Czytając tę pozycję zwróciłem uwagę na kilka rzeczy jakie nie utkwiły mi w pamięci po lekturze innych książek (atomowość dostępu, atrybuty weak oraz wiele innych). Patrząc okiem początkującego w C spodobało mi się to, że nie pominięto prostych spraw, które na początku mogą sprawiać problemy. Może to błahy przykład, ale pozytywnie zaskoczył mnie mały rozdział traktujący wyłącznie o dostępie do danych 16-bitowych (łączenie i dzielenie rejestrów). Niby proste i oczywiste, ale miałem z tym problemy przy pierwszych projektach pisanych w C.

Książka moim zdaniem jest idealnym uzupełnieniem wiedzy dla osób, które miały już styczność z językiem C oraz mają jakieś pojęcia o mikroprocesorach lub chcą odświeżyć tę wiedzę. Każdy znajdzie coś ciekawego, z czym nie zetknął się w innych książkach tego typu. Autor dzieli się własnym doświadczeniem i rozwiązaniem ciekawych problemów. Wadą jest dla mnie wydanie książki na „ekologicznym” papierze – może to osobista uwaga, ale po prostu nie lubię takich książek. Cena również nie należy do najniższych, jednak zawsze można skorzystać z zakupu e-booka (tańszego od wersji papierowej).

forbot.pl 2012-05-05


Książka wydawnictwa www.helion.pl podzielona jest, aż na 29 rozdziałów. Biorąc pod uwagę ogrom informacji jakie autor chciał przekazać czytelnikowi nie jest to nic dziwnego, a pozwala łatwo znaleźć w niej wszystkie niezbędne informacje. Książka na swoich 658 stronach porusza wszystkie najważniejsze aspekty programowania mikrokontrolerów AVR firmy Atmel w języku wysokiego poziomu jakim jest język C.

Pierwszy z rozdziałów omawia kwestię często pomijaną w innych kursach czy książkach tego typu, a mianowicie środowisko programistyczne oraz właściwe jego przystosowanie do własnych potrzeb. Na każdym kroku można powiedzieć, że książka jest uniwersalna, ponieważ opisany został program WinAVR oraz AVR Studio dla Windows'a i Linux'a. Daje to czytelnikowi możliwość wyboru i nie ogranicza go do pojedynczych rozwiązań. Dość dokładnie opisane są programy narzędziowe jak „linkier” czy program „make”. Wiedza ta nie jest potrzebna dla początkującego programisty, ale przydaje się już dla osób średnio zaawansowanych by zrozumieć jakie operacje są wykonywane przed i podczas kompilowania programów.

Wszystkie najważniejsze informacje dotyczące programatorów i programowania mikrokontrolerów AVR znalazł się w rozdziale 2. W tym przypadku autor również podszedł do sprawy profesjonalnie i opisał właściwie wszystkie interfejsy programowania począwszy od ISP przez JTAG, aż po TPI i programatory wysokonapięciowe. W każdym z przypadków opisany został sposób programowania i budowa elektroniczna programatora. Liczne rysunki i schematy uzupełniają ten rozdział. Szczegółowo zostały opisane również Fusebity i Lockbity spędzające sen z powiek początkującym programistom.

Następny z kolei rozdział 3 zajmuje w książce najwięcej miejsca i nie ma się czemu dziwić, ponieważ można powiedzieć, że streszczono w nim podstawy programowania w język C. Niestety rozdział ten nie tłumaczy od podstaw sposobów programowania i kierowany jest do osób, które miały już styczność z językiem C, na przykład w komputerach PC. Zaprezentowano tutaj głównie różnice między językiem C dla mikrokontrolerów i dla komputerów PC. Dla osób, które nie miały styczności wcześniej z językiem C polecana jest lektura innych pozycji dotyczących stricte języka C dostępne na stronie www.helion.pl.

W rozdziale 4 wytłumaczono sposoby dzielenia pisanego programu na sekcje takie jak .text, .data czy .eeprom. Rozdział ten może wydawać się trudny i niepotrzebny dla początkującego użytkownika, ale nie ulega wątpliwości, że warto było wspomnieć o sekcjach programu.

Często poruszany na wszelakich forach problem kontroli rdzenia został wyjaśniony w rozdziale 5. Zaprezentowano w nim różne sposoby na ograniczenie poboru energii elektrycznej przez mikrokontroler oraz na zabezpieczenie go przed zawieszeniem się podczas pracy i podczas chwilowego obniżenia napięcia zasilania.

Dynamiczna alokacja pamięci jest tematem rozdziału 6. Informacje w niej zawarte są ciekawe i potrzebne, ale z punktu widzenia bardziej zaawansowanych programistów, pisząc pierwsze proste programy nie ma potrzeby jej wykorzystywania.

Rozdziały 7 i 8 opisujące pamięci EEPROM oraz FLASH wbudowane w mikrokontrolery AVR. Zaprezentowano sposoby dostęp do tych pamięci zapisu i odczytu danych.

Rozdział 9 w całości poświęcony został interfejsowi XMEM, który umożliwia podłączenie dotykowej pamięci SRAM do mikrokontrolera. Z racji tego, że interfejs XMEM znaleźć można tylko w bardziej rozbudowanych mikrokontrolerach AVR, wiedza o nim nie jest niezbędna dla początkującego programisty.

Interesujący dla początkujących sposób odczytu wartości 16-biotwych przedstawiono w rozdziale 10. Mikrokontrolery AVR opisywane w książce są 8-bitowe, odczyt i zapis wartości 16-biotwych należy przeprowadzić w kilku etapach. Jest to częsty błąd początkujących użytkowników.

Sposoby wprowadzania opóźnień programowych poprzez pętle i funkcje „delay” prezentuje krótki rozdział 11. Warto było umieścić te informacje w odzielnym rozdziale, ponieważ są one wykorzystywane najwet w najprostrzych programach.

Można powiedzieć, że od rozdziału 12 książka opisuje operacje na peryferiach mikrokontrolerów AVR. Począwszy od rozdziału 12, aż do 17 opisano często spotykane w innych publikacjach sposoby kontrolowania portów I/O, przerwań, przetworników A/C, komparatora analogowego i liczników. Każdy z rozdziałów zawiera kompletne informacje o sposobie uruchomienia i wykorzystania każdego z wymienionych peryferii. Dodatkowo warto zwrócić uwagę na przykłady praktyczne pokazujące jak wykonać i oprogramować klawiatury matrycowe, enkodery, termometry analogowe, mierniki częstotliwości czy wyświetlanie multipleksowane.

Rozdział 18 bardzo zainteresuje wielu użytkowników, ponieważ opisuje sposoby podłączenia i sterowania wyświetlaczem LCD alfanumerycznych i graficznych. Dzięki przedstawieniu różnych sposobów przesyłania danych do wyświeltaczy (4-bitowe i 8-bitowe) po raz kolejny można powiedzieć, że książka jest uniwersalna i opisuje wiele możliwych rozwiązań wskazując na ich zalety i wady.

Interfejsy komunikacyjne stanowią można by powiedzieć odrębny rozdział w dziedzinie mikrokontrolerów, ponieważ często są ustandaryzowane dla wielu urządzeń to ich obsługa jest zupełnie inna w każdym przypadku. Bardzo dobrze, że w książce poświęcono, aż 98 podzielonych na 6 rozdziałów dla opisania interfejsów takich jak: USART, SPI, TWI (I2C), USI, USB i 1-wire. Warto wspomnieć o opisie interfejsu USB, który jest bardzo szczegółowy i pokazuje możliwości podłączenia układu mikroprocesorowego do komputera PC przez konwertery FTDI lub bezpośrednio przy wykorzystaniu programowego interfejsu. Można powiedzieć, że rozdział ten będzie zapewne chętnie przeglądany ze względu na popularność komunikacji USB.

To czego brakuje w wielu opisach i książkach to coraz częściej wykorzystywane, szczególnie w zestawach ewaluacyjnych bootloadery opisane w rozdziale 25. Stanowią one wygodną alternatywę dla programowania poprzez interfejs ISP czy JTAG. Dzięki bootloaderom można programować mikrokontroler i uaktualniać oprogramowania za pomocą wgranego wcześniej prostego programu nazywanego właśnie bootloaderem. Daje to przede wszystkim dużą wygodę użytkowania co w obecnych czasach jest wyznacznikiem dobrze zaprojektowanego urządzenia.

Kolejne 3 rozdziały po raz kolejny mogą nie być przydatne początkującym użytkownikom chcącym napisać prosty program i uzyskać prawie natychmiastowe efekty. Rozdziały 26, 27 i 28 opisują odpowiednio kontrolę integralności programu, bezpieczeństwo kodu oraz łączenie języka C i asemblera w jednym programie. Dla bardziej wprawionych programistów przyda się zapewne rozdział o tym jak używać „wstawek” asemblerowych w język C dla uzyskania lepszych efektów działania programu.

Ostatni rozdział książki o numerze 29 opisuje sposoby optymalizacji i debugowania napisanego programu. Informacje w nim zawarte mogą być pomocne w przypadku gdy skompilowany program jest niewiele większy od dostępnej pamięci mikrokontrolera lub gdy musimy mieć większą kontrolę nad tym co dzieje się podczas kompilacji, ponieważ C jest językiem wysokiego poziomu.

Podsumowując recenzowaną książkę, należy z pewnością stwierdzić, że wyczerpuje ona wiele kwestii dotyczących programowania mikrokontrolerów AVR w język C. Niestety książka w całości nie jest przewidziana dla zupełnego laika w tej dziedzinie. Część rozdziałów przyda się osobom, które dopiero co zaczęły zabawę w świecie języka C i mikrokontrolerów AVR, ale niektóre przeznaczone są dla bardziej zaawansowanych programistów znających już podstawy programowania w języku C, czego zabrakło w książce. W tym przypadku jednak brak absolutnych podstaw, w którymś z rozdziałów książki nie jest jej wadą, ponieważ na rynku dostępnych jest wiele tytułów opisujących od podstaw język C.

Dzięki zachowaniu inżynierskiego porządku w książce oraz poprzez podzielenie jej na wiele rozdziałów można ją traktować jak poradnik podczas pisania własnego kodu. Wystarczy znaleźć interesujący nas rozdział i od razu korzystać z gotowych rozwiązań programowych i sprzętowych lub zrozumieć zasadę działania i tworzyć własne biblioteki i rozwiązania.

Ocena według www.mikrokontrolery.org 5/5

Mikrokontrolery 2011-12-19