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

Mitos82
-
-
Posty: 3
Rejestracja: 28 sty 2005, o 20:17
Lokalizacja: warszawa

program dla 8051 w C

Postautor: Mitos82 » 28 sty 2005, o 20:28

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! :569:

[ 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

LucASWw
-
-
Posty: 248
Rejestracja: 23 sie 2003, o 18:26
Lokalizacja: UK

Postautor: LucASWw » 30 sty 2005, o 18:02

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.
Załączniki
Opis programowania.rar
Zał±cznik
(1.73 MiB) Pobrany 460 razy

Mitos82
-
-
Posty: 3
Rejestracja: 28 sty 2005, o 20:17
Lokalizacja: warszawa

Postautor: Mitos82 » 31 sty 2005, o 13:13

Wielkie dzieki
Mam jeszcze jedno pytanie

1. Jezeli dobrze zrozumialem plik binarny zawiera informacje z pola dane z rekordu typu 01 z pliku hex. zapisane jako wartosci (0-255). Co mam zrobic z rekordem typu 02,03,04,05? Czy moge je pominąc?

LucASWw
-
-
Posty: 248
Rejestracja: 23 sie 2003, o 18:26
Lokalizacja: UK

Postautor: LucASWw » 31 sty 2005, o 14:56

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.

Mitos82
-
-
Posty: 3
Rejestracja: 28 sty 2005, o 20:17
Lokalizacja: warszawa

Postautor: Mitos82 » 2 lut 2005, o 20:46

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.

Wróć do „8051”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 85 gości