Mam napisac program dal 8051 konwertujacy pliki .hex na pliki binarne w C. Uzywam kompilatora sdcc a do komunikacji z plytka TERATERMPRO. Mniej wiecej znam budowe pliku hex.(tzn znam dwa typy rekordow: 00-rekord danych i 01-rekord konca danych).
1. Jezeli ktos moze mi powiedziec jak sa zbudowane pozostale typy rekordow(tzn. 02-rozszerzony segment danych, 03-rekord startu rozszerzonego segmentu danych, 04-rozszerzaony z liniowym adresowaniem danych, 05-rekord startu liniowego segmentu danych). Mile widziane linki najlepiej do polskich opracowan.
2. Jak zbudowane sa pliki binarne ladowane do pamieci 8051? Mile widziane linki najlepiej do polskich opracowan.
3 Jak konwertowac pliki .hex do biarnych? Jezeli to mozliwe prosze o dokladny opis.
Bardzo prosze o pomoc. i tlumaczenie miare dokladne bo jestem zupelnie zielony w temacie!
[ Dodano: 29-01-2005, 11:55 ]
Mozze powinienem dodac ze plik .hex jest otrzymywany z kompilacji SDCC kodu w C.
Jego struktura to.
Znacznik poczatku rekordu: 1znak
Dlugosc rekordu: 2 znaki
adres rekordu: 4 znaki
typ rekordu: 2 znaki
dane: 2*N znakow
suma kontrolna: 2 znaki
Przykladowy rekord typu 01:
:10008000AF5F67F0602703W0322CFA92007780C361
czyli
: - Znacznik poczatku rekordu
10 - Dlugosc rekordu
0080 - adres rekordu
00 - typ rekordu
AF5F67F0602703W0322CFA92007780C3 - dane
61 - suma kontrolna
Przykladowy rekord typu 00:
:00000001FF
1. Jezeli ktos moze mi wytlumaczyc jak wygladaja pozostale typy rekordow?
2. Jak wygladaja pliki binarne(i jak dokonac konwersji z pliku .hex na .bin) ktore mozna wklejac od razu do pamieci 8051?
[ Dodano: 29-01-2005, 12:31 ]
oczywiscie SDCC uzywa tylko tych 2 typow rekordoe tj 00, 01.
Chodzi mi o format plikow hex INTELA
[ Dodano: 29-01-2005, 13:25 ]
ewentualnie jezeli ktos juz napisal konwerter hex -> bin to tez prosilbym o kodu w C
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięprogram dla 8051 w C
Moderatorzy: Jacek Bogusz, procesorowiec, robertw, tomasz_jablonski, r-mik, Moderatorzy
ad1. W załączniku masz opis formatu IntelHEX i nie tylko.
ad2. Blik binarny to po prostu kawałek zapisanej do pliku zawartości jakiejś pamięci.
ad3. Napierw, obszar pamięci do której ma być "rozkompresowany" IHEX musi być zapełniony samymi FFh. W pamięci RAM tworzysz sobie na przykład 32 bajtowy (zależy ile bajtów danych jest w ramce, ale myślę, że 32 wystarczy do większości zastosowań) bufor. Wczytujesz pierwszą ramkę. Sprawdzasz, czy ramka ma prawidłową CHSUM, sprawdzasz ile bajtów danych jest w ramce, sprawdzasz typ ramki, sprawdzasz pod jaki offset ma być porcja danych zapisana. I tak dalej, aż dojdziesz do końcowej ramki o formacie :00000001FF . Algorytm konwersji IHEX->BIN tak wygląda. Dla mutacji IHEX algorytm będzie się trochę różnił, ale różnice nie będą zbyt wielkie.
ad2. Blik binarny to po prostu kawałek zapisanej do pliku zawartości jakiejś pamięci.
ad3. Napierw, obszar pamięci do której ma być "rozkompresowany" IHEX musi być zapełniony samymi FFh. W pamięci RAM tworzysz sobie na przykład 32 bajtowy (zależy ile bajtów danych jest w ramce, ale myślę, że 32 wystarczy do większości zastosowań) bufor. Wczytujesz pierwszą ramkę. Sprawdzasz, czy ramka ma prawidłową CHSUM, sprawdzasz ile bajtów danych jest w ramce, sprawdzasz typ ramki, sprawdzasz pod jaki offset ma być porcja danych zapisana. I tak dalej, aż dojdziesz do końcowej ramki o formacie :00000001FF . Algorytm konwersji IHEX->BIN tak wygląda. Dla mutacji IHEX algorytm będzie się trochę różnił, ale różnice nie będą zbyt wielkie.
- Załączniki
-
- Opis programowania.rar
- ZaĹÂącznik
- (1.73 MiB) Pobrany 463 razy
Ad.1 Zgadza się. Jeżeli funkcja ma tylko konwertować standardowy IHEX na BIN, to rekordy typu 02..05 musi potraktować jako np. uszkodzony plik i zwrócić do programu wywołującego błąd. Chyba, że zaimplementujesz do funkcji procedury dekodujące mutacje IHEX to wtedy funkcja również musi przekonwertować te typy rekordów na BIN.
Jednak, jak tworzysz program pod '51, to będziesz się zajmował tylko IHEX i ewentualnie BIN. Rekordy, o których wspomniałeś, mają zastosowanie począwszy od kontrolerów 16 bitowych, ponieważ standartowy IHEX, jak wiesz, potrafi zaadresować tylko 64KB pamięci. Ta wartość jest zdecydowanie za mała, dla tej rodziny kontrolerów, gdzie potrzeba zaadresować przynajmniej kilkanaście MB pamięci.
Jednak, jak tworzysz program pod '51, to będziesz się zajmował tylko IHEX i ewentualnie BIN. Rekordy, o których wspomniałeś, mają zastosowanie począwszy od kontrolerów 16 bitowych, ponieważ standartowy IHEX, jak wiesz, potrafi zaadresować tylko 64KB pamięci. Ta wartość jest zdecydowanie za mała, dla tej rodziny kontrolerów, gdzie potrzeba zaadresować przynajmniej kilkanaście MB pamięci.
Teraz musze napisac konwersje plikow Hex->bin w C uwzgledniajac pozostale typy rekordow 02..05. Program ma byc pod windows wiec ograniczenia pamieci 8051 nie sa istotne(bo to ma byc program ogolnego uzytku - taki jakich jest pelno w sieci tzn biora pliki hex i tworza na wyjsciu bin; ale nigdzie nie ma do nich kodu w C).
1. Jak przekonwertowac rekordu 02..05 na binarne??? Zupelnie nie wiem jak to zrobic.
1. Jak przekonwertowac rekordu 02..05 na binarne??? Zupelnie nie wiem jak to zrobic.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości