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ę

plik heksadecymalny

LAGGERA
-
-
Posty:3
Rejestracja:16 wrz 2006, o 22:39
Lokalizacja:...
plik heksadecymalny

Postautor: LAGGERA » 16 wrz 2006, o 22:55

Witam serdecznie.
Piszę program którego zadaniem głównym jest generacja pliku heksadecymalnego zrozumiałego dla programatora. W pliku będą wpisywane wartości poszczególnych próbek.
Sprawa dotyczy formatu tego pliku.Wykorzystujac program SEPROG wygenerowałem plik dla pamięci AMD AM2716 w postaci:
:10000000000102030405060708091A1B1C1D1E1F18
:10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10003000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10005000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10007000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10009000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:1000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1000B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:1000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10
:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF
:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
:10013000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF
:10014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF
:10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF
:10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F

to oczywiscie fragment...;)
właściwie wiem jak wygenerowac wpis ale zastanawiają mnie dwa ostatnie znaki w kazdej linii - chodzi tu chyba o jakiś bajt kontrolny cos w tym rodzaju???
Chciałbym zapytac czy ktoś zna algorytm jego wyliczania?
Pozornie to kolejne liczby 16-kowe ale tylko pozornie bo np dla takiej sytuacji:

:1007C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39
:1007D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29
:1007E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19
:1007F000000102030405060708091A1B1C1D1E1F21

w ostatniej linii nagle pojawia sie nieoczekiwana zmiana.
Bede wdzieczny za pomoc.
pozdrawiam !!!

Awatar użytkownika
bis
-
-
Posty:134
Rejestracja:12 maja 2005, o 08:11
Lokalizacja:Warszawa

Postautor: bis » 17 wrz 2006, o 01:12

ostatni bajt rekordu w tym formacie to suma kontrolna. Jest to prosta, jednobajtowa suma wszystkich bajtów z wszystkich pól rekordu. Dokładniej opisane tutaj:

http://www.precma.it/download/intelhex.pdf


bis

LAGGERA
-
-
Posty:3
Rejestracja:16 wrz 2006, o 22:39
Lokalizacja:...

Postautor: LAGGERA » 17 wrz 2006, o 11:48

hm w sumie wielkie dzieki za tego pdf-a czytqam to jednka i czytam i jakos nie ma tam podanego algorytmu. To dfaktycznie suma kontrolna tylko jak ona jest wyliczana?
Sumuje wszystkie wartosci pól i nie wychodzi prawidłowy wynik.
Byłbym wdzieczny za jakiś przykład lub dwa;)
Pozdrawiam !!!

Awatar użytkownika
ACeK
-
-
Posty:1522
Rejestracja:30 mar 2003, o 19:35
Lokalizacja:Kielce

Postautor: ACeK » 17 wrz 2006, o 13:18

... Each record ends with a CHKSUM field that contains the ASCII hexadecimal representation of the two’s complement of the 8-bit bytes that result from converting each pair of ASCII hexadecimal digits to one byte of binary, from and including the RECLEN field to and including the last byte of the INFO/DATA field. Therefore, the sum of all the ASCII pairs in a record after converting to binary, form the RECLEN field to and including the CHKSUM field, is [fade]zero...[/fade]
Obrazek Musisz zrobic sume wszystkich bajtow od lewej strony do prawej oprocz sumy kontrolnej. Oprocz tego suma wszystkich bajtow i sumy kontrolnej rowna sie zero :idea: czyli

Kod: Zaznacz cały

10 + 00 = 10 10 + 00 = 10 10 + 00 = 10 10 + 00 = 10 10 + 01 = 11 11 + 02 = 13 13 + 03 = 16 ... 8E + 1D = AB AB + 1E = C9 C9 + 1F = E8 suma bajtow od lewej strony do prawej bez sumy kontrolnej 0 = E8 + CHKSUM 0 - E8 = 18 dokladnie (-18) 10 + 00 = 10 10 + 10 = 20 20 + 00 = 20 ... 13 + FF = 12 12 + FF = 11 11 +FF = 10 0 - 10 = F0 (-F0)

:P mam nadzieje ze to Ci troche rozjasnilo Obrazek
Ostatnio zmieniony 17 wrz 2006, o 13:21 przez ACeK, łącznie zmieniany 2 razy.

Awatar użytkownika
bis
-
-
Posty:134
Rejestracja:12 maja 2005, o 08:11
Lokalizacja:Warszawa

Postautor: bis » 17 wrz 2006, o 13:19

Bardzo przepraszam za mój błąd. To nie jest prosta suma ale jej uzupełnienie dwójkowe. W tym pdf'ie na piatej stronie ostatni akapit dokładnie opisuje co to jest suma kontrolna i co przyświecało Intelowi w jej zastosowaniu. Zwracam uwagę że rekord jest rozumiany jako "bajtowy" ale każdy bajt (poza markerem ":") zapisany jest tekstowo w hex.

bis[/center]

Wróć do „PLD/FPGA i inne zagadnienia techniki cyfrowej”

Kto jest online

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