Disassembler
Pisząc oprogramowanie w językach wysokopoziomowych (Bascom, C, Pascal) warto rzucić okiem na kod generowany przez kompilator. Jeśli środowisko kompilatora nie generuje pliku z kodem assemblera lub autor projektu udostępnia tylko pliki hex-a możemy zrobić to sami zewnętrznym disassemblerem. Wadą tej metody jest brak powiązania z instrukcjami wysokopoziomowymi, brak komentarzy, brak nazw zmiennych, instrukcji, funkcji, procedur tablic itd. , jednym słowem sam na sam z "gołym kodem".
Proste disassemblery nie radzą sobie z danymi umieszczanymi w kodzie programu (stałe, tablice, łańcuchy), zamieniając je bez sensu na stosowny kod programu dlatego musimy robić to rozważnie. Jeśli znamy dobrze procesor, posiadamy schemat urządzenia oraz pewne doświadczenie w assemblerze rozpracowanie takiego kodu to tylko kwestia czasu. Jako przykład kilka prostych instrukcji Bascoma oraz odpowiedni kod assemblera.
Kod:
;If Pind.2 = 0 Then
sbic PIND, 2 ; 008C 9982
rjmp avr00AF ; 008D C021
;Waitms 25
ldi r24, 0x19 ; 008E E189
ldi r25, 0x00 ; 008F E090
rcall avr0153 ; 0090 D0C2
;If Pind.2 = 0 Then
sbic PIND, 2 ; 0091 9982
rjmp avr00AF ; 0092 C01C
;Portd.3 = 0
cbi PORTD, 3 ; 0093 9893
;Wait 3
ldi ZL, 0x03 ; 0094 E0E3
ldi ZH, 0x00 ; 0095 E0F0
rcall avr011B ; 0096 D084
Wirtualny kanał szeregowy
Rafał, jeśli strumień danych do odbioru jest mały a stopień obciążenie procesora niewielki to może pracować to poprawnie nawet bez przerwań. W prostych aplikacjach możemy często sprawdzać czy jest nowy znak w buforze aby go odczytać. Pamiętajmy jednak, że dane docierają do procesora asynchronicznie w stosunku do jego algorytmu pracy. Jeśli trafimy na moment w którym procesor jest zajęty dłużej obsługą innego zadania to tylko przerwanie daje mam gwarancję pełnej obsługi odbioru. System przerwań w mikroprocesorach to jedno z najmocniejszych narzędzi budowania aplikacji dlatego warto go lepiej poznać.