Moi koledzy otrzymali skompilowany program z ECU samochodowego w formacie HEX, a także odpowiedni plik A2L. W moim projekcie muszę odczytać zastosowane parametry z tego pliku HEX. Chcę to zrobić automatycznie, za pomocą funkcji MATLAB, ponieważ parametry są używane jako dane wejściowe w modelu Simulink.
Teraz jako przykład plik HEX wygląda tak:
[…]
:2001C00000000000000000000000000000000000000000000000000000000000000000001F
:2001E0000000000000000000000000000000000000000000000000000000000000000000FF
:2002000054710780809A0780809A0780809A07808C530680000011A0140011A000000000D4
:200220000000000000000000000000000000000000000000000000000000000000000000BE
:2002400000000000000000000000000000000000000000000000000000000000000000009E
:2002600000000000000000000000000000000000000000000000000000000000000000007E
[…]
(proszę zauważyć, że jest to tylko przykładowy fragment)
Adres określonego parametru można odczytać z A2L, na przykład jako ‘0xA0143B0B’
.
Ze specyfikacji protokołu XCP wiem, że adres w A2L jest 40-bitowy (32-bitowy adres i 8-bitowe rozszerzenie).
Jak widać adres, który czytam, jest 64-bitowy.
Teraz, jeśli dobrze to zrozumiałem w moim przykładowym adresie ‘A01’
jest zarezerwowany, ‘4’
to rozszerzenie adresu i ‘3B0B’
jest rzeczywistym 32-bitowym adresem.
Czy ktoś może to potwierdzić lub poprawić, jeśli się mylę?
Czytanie danych z pliku HEX na miejscu ‘3B0B’
jest nieprawidłowe. Moi koledzy wyeksportowali dla mnie dane w pliku tekstowym, aby zweryfikować moje wyniki i wyraźnie się różnią.
Czy „:” liczy się, kiedy adresowane jest stanowisko?
Edytuj: Właśnie się dowiedziałem 'A01'
definiuje segment RAM, w którym zapisywane są dane. Ale jak znaleźć ten segment w pliku HEX?