Obserwując tak ożywioną dyskusję, wtrącę swoje kilka zdań. Tylko nie krytykujcie zaraz każdego mojego słowa i nie wyzywajcie od żółtodziobów (bo faktycznie na polu programowania mikrokontrolerów jestem jeszcze żółtodzibem

).
Jednakże w kwestii używania asm i C w programowaniu mikrokontrolerów mam pewne poglądy. Jesli chodzi o przedmówców, to popieram wiele argumantów
Andrzeja_17, a najbardziej zgadzam się ze stanowiskiem
Dextera77.
Aby sprawnie programować (w obecnych czasach) mikrokontrolery, najlepiej jest łączyć zalety języka bezpośredniego - asm i języka wyższego poziomu - np. C. Ewolucja działa jednak na korzyść języków wyższego poziomu.
Można to porównać z ewolucją programowania komputerów. W prehistorii używano do tego prawie wyłącznie kodu maszynowego. Potem powstały rozliczne języki wyższego poziomu. "Poziom" języków coraz bardziej wzrastał - np. programowanie obiektowe. Obecnie w
większości typowych aplikacji zaleca się i stosuje języki wysokiego poziomu, a zabawę kodem niższego poziomu (nawet już nie asemblerowym),
tam gdzie nie ma takiej potrzeby, uważa się za naganne i nieefektywne (w sensie inżynierii oprogramowania). Oczywiście istnieją takie dziedziny (zwłaszcza związane z odwołaniami do sprzętu), gdzie użycie asm jest nadal wskazane lub może nawet konieczne.
Taka ewolucja w dziedzinie komputerów możliwa była głównie dzięki rozwojowi sprzętu. Podobną ewolucję przechodzi teraz arena mikrokontrolerów, pamięć tanieje, niektóre urządzenia są wprost optymalizowane pod kątem użycia języka wysokiego poziomu (np. wspominane AVR). Wydaje mi się, że
już teraz w nowoczesnych mikrokontrolerach szala przechylona jest na stronę języków wyższego poziomu. Gdybym miał wymienić zalety obu sposobów programowania, zrobiłbym to tak:
1. Język wyższego poziomu (np. C):
a) duża wygoda i przejrzystość programowania, mniejsze prawdopodobieństwo błędu, duża czytelność i modyfikowalność (dobrze napisanego) kodu ... i inne zalety, znane np. z użycia takich języków w programowaniu komputerów.
/Tu niektórzy twierdzą, że mają prawie to samo w makroasemblerach. Moim zdaniem jest to wtedy użycie asmeblera stylizowane na wzór języka wyższego poziomu i jawne użycie takiego języka zwiększy w takim przypadku tylko wygodę programowania, niewiele ujmując jego skuteczności - chociaż różne są przyzwyczajenia i nie potępiam tych, którzy lubią widzieć cały czas jak na dłoni operacje na każdym rejestrze układu; nie zgodzę się jednak z tym, że tylko takie podejście zasługuje najbardziej na miano "profesjonalizmu"./
b) dobry dostęp do pokładów sprzętowych - w dobrych kompilatorach języków wyższego poziomu, dedykowanych dla mikrokontrolerów, dostęp do sprzętu jest tak zorganizowany, że nie potrzeba (nie ma konieczności) odwoływania się do asm (pomijam tu procedury czasu krytycznego).
2. Asembler:
a) większa zwartość kodu wynikowego:
Jest to niepodważalna zaleta asm, ale coraz mniej istotna obecnie, tak jak przed kilku(nastu) laty straciła krytyczne znaczenie w programowaniu komputerów. Pisałem kiedyś podobny program najpierw w asm, potem w C. W asm zaoszczędziłem ok. 25% pamięci. Uważam się za kiepskiego programistę asm, ale myślę, że nawet ekspert nie ścisnąłby programu na więcej jak 50%. A różnice cen dla podwójnej ilości pamięci to dziś wiadomo ... Czasem nawet nowsze mikrokontrolery z większą pamięcią i lepszym wyposarzeniem są promowane po niższych cenach, niż starsze odmiany. Już zupełnie nie ma to większego znaczenia, gdy mikrokontroler jest częścią dużego urządzenia i stanowi ułamek procenta jego ceny.
Jest to jednak zaleta asm, i czasem /zgadzam się/ należy ją wykorzystać - np. gdy cena mikrokontrolera jest podstawą ceny urządzenia i
rzeczywiście - z ilością wykorzystanej pamięci cena ta rośnie - na pewno opłaca się przysiąść trochę nad programem, żeby zarobić potem na setkach/tysiącach/milionach sprzedawanych urządzeń.
b) procedury czasu krytycznego:
Zawsze będą fragmenty programu, które należy zrealizować najszybciej jak sie da, niezależnie od prędkości działania układu. Dowodem może być fakt, że procedury takie występują nadal we współczesnych szybkich komputerach.
Tutaj bezpośrednie użycie asm w postaci wstawek lub procedur będzie chyba zawsze niezastąpione!
Mama nadzieję, że nikogo nie uraziłem:).
Pozdrawiam wszystkich.