Bezpłatna biblioteka techniczna ENCYKLOPEDIA RADIOELEKTRONIKI I INŻYNIERII ELEKTRYCZNEJ Inicjalizacja dodatkowych segmentów pamięci w programach dla mikrokontrolerów rodziny MCS-51. Encyklopedia elektroniki radiowej i elektrotechniki Encyklopedia radioelektroniki i elektrotechniki / Mikrokontrolery Nowoczesne mikrokontrolery mają wbudowaną nieulotną pamięć danych (EEPROM), w której czasami trzeba wprowadzić informacje, zanim urządzenie zacznie działać. Obraz (oprogramowanie sprzętowe) tej pamięci musi zostać utworzony podczas opracowywania programu. Można to zrobić na przykład asemblerami mikrokontrolerów z rodziny PICmicro i AVR. Dają programiście możliwość zorganizowania dodatkowego segmentu pamięci i ustawienia w nim danych początkowych do zapisu w pamięci EEPROM. Asemblery dla mikrokontrolerów z rdzeniem MSC-51 pozwalają również na podzielenie pamięci na kilka części, ale tylko w jednej z nich - segmencie kodu wykonywalnego - możliwa jest inicjalizacja. We wszystkich pozostałych dozwolone jest jedynie rezerwowanie komórek pamięci i zapisywanie w nich danych tylko podczas wykonywania programu. Wyjściem z sytuacji może być przyjęcie, które opisano poniżej. Jego istotą jest zastosowanie asemblacji warunkowej, w wyniku której inicjalizacja segmentu kodu następuje w różny sposób, w zależności od warunków translacji. Powstałe pliki HEX można wykorzystać do programowania nie tylko wewnętrznej pamięci EEPROM mikrokontrolera, ale także zewnętrznych układów pamięci. Sztucznie utworzone dodatkowe segmenty (dopuszczalna jest dowolna ich liczba) umieszczane są w tekście programu przed rzeczywistym segmentem kodu. Etykiety zdefiniowane w jednym z nich będą znane we wszystkich poniższych przypadkach, łącznie z rzeczywistym segmentem kodu. Linki w przeciwnym kierunku są jednak niedozwolone. Nie ma ograniczeń co do rodzaju i fizycznej lokalizacji dodatkowej pamięci. Przykład programu z dwoma dodatkowymi zainicjowanymi segmentami, konwencjonalnie nazywanymi EEPROM i FLASH, pokazano w tabeli. 1. Po zapisaniu go w pliku example.asm skorzystamy z asemblera ASEM-51, który można „pobrać” za darmo pod adresem . Przede wszystkim uruchom asembler w wierszu poleceń asem przykład.asm eeprom.hex/define:EEPROM Przetwarzając pierwsze wiersze tekstu programu, umieści w swojej tablicy symboli etykiety idEeprom, ptrWord i prtBufE, a dane określone dyrektywami DB i DW w pliku wyjściowym eeprom.hex (tabela 2). Następnie zostanie sprawdzona długość segmentu. Jeżeli wartość licznika programu przekroczy fizycznie istniejącą wielkość EEPROM (w tym przypadku - 640 komórek), zostanie wyświetlony komunikat o błędzie. Jeżeli objętość segmentu jest wyraźnie niewielka, kontrolę można wykluczyć. Podobne kontrole można przewidzieć w innych segmentach. Następnie asembler napotka dyrektywę IFNDEF EEPROM. Ponieważ symbol o tej nazwie jest zdefiniowany w linii poleceń (parametr /definie:EEPROM), wszystkie kolejne linie programu, aż do dyrektywy ENDIF, zostaną zignorowane i na tym zakończy się tłumaczenie. Uruchom retransmisję tego samego programu z wiersza poleceń asem przykład.asm flash.hex/define:FLASH Różni się od poprzedniego jedynie definicją symbolu FLASH zamiast EEPROM. Pierwszy etap translacji przebiega dokładnie tak, jak opisano powyżej, a dane segmentu EEPROM zostaną zapisane do pliku wyjściowego. Jednakże dyrektywa IFNDEF EEPROM tym razem nie przerwie procesu, a następna dyrektywa ORG 0 zresetuje licznik programu. Asembler rozpocznie zapisywanie danych przeznaczonych dla segmentu FLASH do pliku wyjściowego od adresu zerowego. Transmisja zostanie przerwana przez dyrektywę IFNDEF FLASH. Ostateczną postać pliku flash.hex przedstawiono w tabeli. 3. Ustawiamy tłumaczenie prawdziwego segmentu kodu wykonywalnego poleceniem asem przykład.asm W pierwszej kolejności zostaną przekompilowane dodatkowe segmenty, a wszystkie zdefiniowane w nich etykiety zostaną wprowadzone do tablicy symboli asemblera, co umożliwi odwoływanie się do nich z segmentu kodu. Dyrektywa ORG 0 na samym początku ponownie zresetuje licznik programu. Transmisja będzie kontynuowana jak zwykle. W powstałym pliku example.hex (tabela 4) kod wykonywalny programu zaczyna się od czwartej linii, znajdującej się po liniach identycznych z tymi zawartymi w poprzednich plikach HEX. Obecność nadmiarowych informacji zwykle nie zakłóca prawidłowego załadowania kodu do odpowiednich obszarów pamięci mikrokontrolera. W buforze programu sterującego programowaniem, prawidłowe dane, gdy adresy się zgadzają, „wypierają” wcześniej wprowadzone. I tylko jeśli nowy segment będzie krótszy od poprzedniego, jego „ogon” zostanie zapisany w buforze. Z tego powodu pożądane jest opisywanie segmentów w programie w kolejności rosnącej według ich długości. Niektórzy programiści nie posiadają bufora pośredniego lub ściśle kontrolują dane wejściowe, nie dopuszczając do nakładania się adresów. W pierwszym przypadku programowanie będzie błędne, w drugim przypadku w ogóle się nie uruchomi, dopóki nie zostaną wyeliminowane „błędy”. Możesz ręcznie usunąć dodatkowe linie z pliku HEX za pomocą dowolnego edytora tekstu. Możesz to także zrobić automatycznie, uruchamiając dwa polecenia z rzędu: hex2bin przykład.hex bin2hex przykład.bin Pierwsza utworzy binarny obraz danych zawartych w pliku example.hex i umieści go w pliku example.bin. Drugi wykona odwrotną transformację i utworzy nowy plik example.hex bez zbędnych dodatków. Niezbędne programy można „pobrać” pod wskazanymi adresami I . Autor: S. Czekunow, Iżewsk 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: ▪ Rejestrator wideo do telefonów komórkowych ▪ Ekscytony mogą zwiększyć efektywność energetyczną elektronów ▪ Makijaż i popkultura sprawiły, że ludzie bali się klaunów Wiadomości o nauce i technologii, nowa elektronika
Ciekawe materiały z bezpłatnej biblioteki technicznej: ▪ sekcja witryny Podstawy pierwszej pomocy (OPMP). Wybór artykułu ▪ Artykuł Prawo mieszkaniowe. Notatki do wykładów ▪ artykuł O co Churchill jest zły na swoim najsłynniejszym zdjęciu? Szczegółowa odpowiedź ▪ artykuł Anty-AON. 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 |