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 !!!
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
Moderatorzy:Jacek Bogusz, Moderatorzy
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
http://www.precma.it/download/intelhex.pdf
bis
Musisz zrobic sume wszystkich bajtow od lewej strony do prawej oprocz sumy kontrolnej. Oprocz tego suma wszystkich bajtow i sumy kontrolnej rowna sie zero czyli... 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]
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)
mam nadzieje ze to Ci troche rozjasnilo
Ostatnio zmieniony 17 wrz 2006, o 13:21 przez ACeK, łącznie zmieniany 2 razy.
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]
bis[/center]
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości