Bezpłatna biblioteka techniczna ENCYKLOPEDIA RADIOELEKTRONIKI I INŻYNIERII ELEKTRYCZNEJ Debugowanie mikrokontrolerów za pomocą emulatora ROM. Encyklopedia elektroniki radiowej i elektrotechniki Encyklopedia radioelektroniki i elektrotechniki / Mikrokontrolery Złożoność opracowania i debugowania działającego programu urządzenia elektronicznego zawierającego mikroprocesor często determinuje koszt jego rozwoju jako całości. Jest to szczególnie widoczne w mikrokontrolerach (MC), które mają zintegrowaną pamięć i niektóre urządzenia peryferyjne. Jednym z narzędzi znacznie ułatwiających debugowanie jest emulator ROM opisany w [1]. W proponowanym artykule opisano technologię pracy z nim. Możliwości debugowania nie ograniczają się do opisanych metod. Ten proces, jak i projektowanie w ogóle, jest w pewnym stopniu sztuką: na ten sam instrument każdy tworzy „własną muzykę”. Będziemy wdzięczni czytelnikom, którzy podzielą się swoimi autorskimi narzędziami i metodami debugowania programów MK. O złożoności i pracochłonności procesu debugowania oprogramowania MC decydują następujące czynniki [2]:
Tradycyjny sprzęt testowy (taki jak oscyloskop) może być używany tylko w ograniczonym zakresie do debugowania MCU. Najprostszą (a jednocześnie najbardziej nieefektywną) metodą debugowania jest „metoda prób i błędów”: ładowanie programu do reprogramowalnej pamięci tylko do odczytu (EPROM), próba jego wykonania, wykrywanie i poprawianie błędów w programie oraz sprzęt, kasowanie EPROM, ponowne ładowanie programu itp. e. Procesy kasowania i zapisywania danych w chipie EPROM trwają długo i po określonej liczbie cykli przeprogramowania zwykle kończą się niepowodzeniem. Powtarzająca się instalacja i demontaż mikroukładu zmniejsza niezawodność styków elektrycznych w gnieździe EPROM. Możliwość uzyskania informacji o debugowaniu systemu jest praktycznie nieobecna. Obecnie MK jest najczęściej debugowany za pomocą narzędzi krzyżowych opartych na komputerze osobistym. Pozwala to na minimalne rozproszenie zasobów MC. Urządzenie do debugowania, jak pokazano na rysunku, jest podłączone do komputera za pomocą jakiegoś narzędzia, takiego jak emulator ROM. Taki kompleks umożliwia pobranie i edycję programu, wprowadzenie do niego modułów testowych, uzyskanie pewnych informacji o systemie i wiele więcej, co omówimy poniżej. Chociaż emulatory ROM nie są jedynym i nie najpotężniejszym narzędziem do debugowania, nadal są popularne. Ich „długowieczność” tłumaczy się niezależnością od rodzaju MC (wymagana jest jedynie możliwość pracy z zewnętrzną pamięcią programu), działaniem w czasie rzeczywistym, niską ceną i dostępnością dla szerokiej gamy twórców sprzętu i radioamatorów. Rozważymy technologię debugowania programu za pomocą emulatora ROM na przykładzie rodziny MK MCS-51 (8031, 8051, 80C31, 80C51. KR1816BE31, KR1816BE51, KR1830BE31, KR1830BE51 itp.). Rozpoczynając debugowanie, należy sprawdzić działanie sprzętu systemu i samego MC. Można w tym celu skorzystać z testów „bezpłatnego zliczania” [3]. które polegają na wyliczeniu wszystkich możliwych kombinacji kodów na liniach portów MK. Podczas testowania linie portu zostaną ustawione w stan wyjściowy, dlatego przede wszystkim należy upewnić się, że nie są one ładowane na wyjściach innych elementów w zależności od debugowanego urządzenia. Tymczasowo odłącz takie obciążenia, jeśli występują. Załaduj emulator ROM z kodami poleceń No Operation (NOP) w całej przestrzeni adresowej programów MCU. Dla MCS-51 jest to kod 00H. Podczas wykonywania takiego „programu” MK kolejno przegląda wszystkie adresy pamięci programu. Monitoruj sygnały ALE, PME i portów P0, P2 za pomocą oscyloskopu. Przebiegi na liniach portu muszą odpowiadać diagramom czasowym licznika binarnego, biorąc pod uwagę multipleksowanie na P0 młodszego bajtu adresu i danych. Następnie sprawdź porty P1 i P1, ładując program testowy pokazany w tabeli 00 do emulatora ROM. 0. Wysyła sekwencję kodów od XNUMXH do XNUMXFFH na liniach określonych portów, symulując ośmiobitowy licznik binarny. Jeśli oscylogramy odpowiadają wymaganym, przywróć obciążenia odłączone od portów i przystąp do debugowania działającego programu MK. Pamiętaj, że debugujesz jednocześnie oprogramowanie i sprzęt systemu i nie zapomnij okresowo monitorować sygnałów w punktach testowych za pomocą oscyloskopu. Niezgodność rodzaju sygnałów z Twoimi wyobrażeniami na ich temat jest powodem do poważnej refleksji i dodatkowych kontroli. Aby ułatwić rozwój i debugowanie, należy stosować modułową zasadę programowania, tj. dzielić program MK na części według cechy funkcjonalnej. Umożliwi to łatwe przenoszenie poszczególnych modułów, a w razie potrzeby zastosowanie ich w innych projektach. Moduł, do którego sterowanie jest przekazywane po włączeniu zasilania lub zresetowaniu MK, nazywany jest głównym lub głównym. Przekazanie sterowania do punktu wejścia programu powinno być poleceniem skoku, a nie wywołaniem podprogramu, aby nie zaśmiecać stosu adresem zwrotnym. Aby uniknąć nieoczekiwanych wyników programu, pamiętaj o przypisaniu wartości początkowej każdej ze zmiennych przed pierwszym użyciem. W niektórych przypadkach może być konieczne zainicjowanie urządzeń peryferyjnych. Blok inicjujący umieszczony jest na początku głównego modułu programu. Przybliżony widok głównego modułu programu na początku debugowania przedstawiono w tabeli. 2. Zawiera tylko punkt wejścia do programu i procedurę obsługi wyjścia. Mimo że takie wyjście jest rzadko stosowane w układach mikrokontrolerowych, należy je przewidzieć w celu prawidłowego zakończenia sytuacji awaryjnych. W rozważanym przykładzie po zakończeniu pracy program „zapętla się”. Dopiero ponowne uruchomienie systemu za pomocą sygnału resetu sprzętowego wyprowadzi go z tego stanu. Podczas debugowania inne moduły programu są dodawane do modułu głównego, gdy są gotowe. Kolejność ich łączenia i debugowania odgrywa ważną rolę. Należy zacząć od sterowników urządzeń wyjściowych informacji (wyświetlacz, przetwornik cyfrowo-analogowy itp.), umieszczając ich wywołania w module głównym. Następnie debugują sterowniki innych urządzeń peryferyjnych, procedury przetwarzania danych i dopiero potem sprawdzają wspólne działanie wszystkich modułów programu. Jeśli istnieje wyświetlacz alfanumeryczny, jego sterownik jest najpierw debugowany, a później używany do wyświetlania informacji debugowania, na przykład zawartości wewnętrznej pamięci danych MK. Jeżeli zostanie zastosowany taki emulator ROM, aby zawarte w nim informacje mogły zostać zapisane i odczytane zarówno przez komputer sterujący, jak i debugowane urządzenie, MK może umieścić dane debugowania w wolnym obszarze pamięci emulatora ROM, a komputer sterujący odczytuje je i wyświetla na swoim wyświetlaczu. Na przykład, aby wyświetlić zawartość wewnętrznej pamięci RAM danych MCU, podłącz wyjście sygnału zapisu zewnętrznej pamięci danych (WR) do wejścia sygnału zapisu emulatora ROM i użyj podprogramu pokazanego w tabeli 3. 32. Zakłada się, że ilość pamięci programu debugowanego urządzenia nie przekracza 8000 KB, zatem informacja debugująca umieszczana w pamięci emulatora zaczyna się od adresu 0H. Zawartość rejestrów R1 i R8000 przesyłana jest oddzielnie, gdyż później wykorzystuje się je w podprogramie do organizacji pętli. Po wysłaniu informacji debugowania program MK zostaje zawieszony, a zawartość komórek pamięci emulatora ROM 807H-XNUMXFH jest odczytywana przez komputer sterujący, wyświetlana i analizowana. Podobnie można wyświetlić zawartość wszystkich programowo dostępnych rejestrów MK. Rozpoczynając debugowanie sterownika urządzenia peryferyjnego, należy tymczasowo wyłączyć sygnały sterujące generowane z niego przez MK, aby uniknąć możliwej awarii urządzenia z powodu błędów w programie. Jeżeli proces ma charakter jednorazowy należy go "zapętlić" i w razie potrzeby zaprogramować sygnał zegara oscyloskopu.Debuguj sterownik monitorując sygnały generowane przez oscyloskop. Po upewnieniu się, że diagramy czasowe sygnałów sterujących odpowiadają wymaganym, podłącz urządzenie peryferyjne i kontynuuj debugowanie sterownika na prawdziwym sprzęcie. Na koniec usuń elementy debugujące z modułu programu i sprawdź jego działanie w ostatecznej formie. Wykorzystanie współdzielonych zasobów MK przez różne moduły dość często powoduje, że debugowany program przestaje działać po dodaniu kolejnego podprogramu, dlatego po debugowaniu kolejnego modułu należy upewnić się, że wszystkie wcześniej debugowane sterowniki i podprogramy nadal działają poprawnie. Jeśli Twój program używa przerwań, nie wyłączaj ich, chyba że jest to absolutnie konieczne. Nie należy usuwać debugowanego modułu z programu, nawet jeśli nie jest on aktualnie potrzebny. Gdy MK „zawiesza się”, przydaje się następujący sposób lokalizacji błędów: wprowadź do programu punkty kontrolne, które wyświetlają sekwencyjnie rosnące liczby. Po „zawieszeniu” na wyświetlaczu pojawi się numer odpowiadający ostatniemu pomyślnie przebytemu punktowi kontrolnemu. Jeśli kilka takich punktów zostanie złapanych w nieskończoną pętlę, liczby na wyświetlaczu będą się szybko zmieniać. Aby dokładnie określić, które punkty znajdują się w cyklu, trzeba będzie sztucznie spowolnić zmianę liczb, ustawiając opóźnienie programu przy wyprowadzaniu każdego z nich, na przykład w postaci cyklu jałowego. Jeśli debugowany system nie ma wbudowanego wyświetlacza, informacje można wyświetlić na wyświetlaczu komputera hosta poprzez wolny obszar pamięci emulatora ROM. Po debugowaniu wszystkich sterowników urządzeń rozpocznij debugowanie innych podprogramów. Jeżeli którykolwiek z nich implementuje złożony algorytm przetwarzania lub konwersji danych, wyświetlenie jednej lub większej liczby wartości pośrednich zmiennych często nie dostarcza informacji wystarczających do analizy błędów.Pokonywanie trudności i zapisywanie informacji debugujących wymaganej ilości w wolnym obszarze pamięci Emulator ROM pomoże przezwyciężyć trudności. Po osiągnięciu normalnego działania wszystkich modułów programu można je wspólnie debugować. Trudności pojawiające się w tym przypadku można podzielić na dwie grupy. Pierwsza obejmuje problemy współdzielenia wspólnych zasobów MK: jednostki arytmetyczno-logicznej, pamięci danych, portów wejścia-wyjścia. Drugi związany jest z pracą urządzeń mikrokontrolerowych w czasie rzeczywistym. Systemy czasu rzeczywistego są zazwyczaj wielowątkowe. Kilka zadań programu (wątków) jest wykonywanych równolegle, współdziałając ze sobą i korzystając ze wspólnych zasobów. Ale w każdej chwili MC, ze względu na swoją strukturę, rozwiązuje tylko jeden z nich, przechodząc kolejno na inne, biorąc pod uwagę priorytet. Konflikty pomiędzy zadaniami powstają zarówno z powodu braku zasobów, jak i braku czasu na przetwarzanie danych. Dlatego należy zwrócić szczególną uwagę na zasoby MK wykorzystywane w modułach programu, często kontrolując zmianę ich stanu poprzez wyświetlanie informacji debugowania. Spróbuj zmniejszyć liczbę zmiennych globalnych, zastępując je lokalnymi, jeśli to możliwe. Monitoruj stan stosu. Oszacuj czas wykonania krytycznych odcinków programu, sprawdź system przy różnych wartościach sygnałów wejściowych, które są możliwe w praktyce. Za pomocą emulatora ROM możesz także debugować program przeznaczony do pracy w pamięci wewnętrznej MK, jeśli tymczasowo umieścisz go w zewnętrznej pamięci programu. Ponieważ w tym przypadku porty P0 i P2 będą zajęte przez obsługę pamięci zewnętrznej, to jeśli pozostałe wolne linie I/O MK nie wystarczą, P0 i P2 zostaną zastąpione portami I/O adresowanymi jako zewnętrzne komórki pamięci danych. Łączy się je według standardowych schematów, wykorzystując rejestry wyzwalające w celu zwiększenia liczby linii wyjściowych, a liczbę linii wejściowych - elementy o trzech stanach wyjściowych. Po debugowaniu systemu za pomocą emulatora usuń z niego elementy debugujące, zapisz program do ROM (lub do wewnętrznej pamięci programowej MK) i sprawdź działanie urządzenia w ostatecznej formie. literatura
Autorzy: G.Vydolob, V.Samoylov, Moskwa (Zelenograd) Zobacz inne artykuły Sekcja Mikrokontrolery. Czytaj i pisz przydatne komentarze do tego artykułu. Najnowsze wiadomości o nauce i technologii, nowa elektronika: Hałas drogowy opóźnia rozwój piskląt
06.05.2024 Bezprzewodowy głośnik Samsung Music Frame HW-LS60D
06.05.2024 Nowy sposób kontrolowania i manipulowania sygnałami optycznymi
05.05.2024
Inne ciekawe wiadomości: ▪ Plastik, który można bez końca poddawać recyklingowi ▪ Długopis Livescribe 3 do digitalizacji odręcznych notatek Wiadomości o nauce i technologii, nowa elektronika
Ciekawe materiały z bezpłatnej biblioteki technicznej: ▪ sekcja serwisu Technologie radioamatorskie. Wybór artykułów ▪ Artykuł Bena Johnsona. Słynne aforyzmy ▪ artykuł węzeł kuśnierski. Wskazówki turystyczne ▪ artykuł Wezwanie do UMS8. Encyklopedia elektroniki radiowej i elektrotechniki ▪ artykuł Transformator laboratoryjny. Encyklopedia elektroniki radiowej i elektrotechniki
Zostaw swój komentarz do tego artykułu: Wszystkie języki tej strony Strona główna | biblioteka | Artykuły | Mapa stony | Recenzje witryn www.diagram.com.ua |