2011-09-27 8 views
5

Kiedy kompiluję mój kod, uzyskuję Motorola S records (a.mot) z przerwami (cały zakres adresów nie obejmuje kodu i danych).Jak mogę wypełnić rekord S dwoma wartościami bajtowymi zaczynającymi się od granic adresu?

Chcę wypełnić te luki wzorem 0x01 0x80. Ważne jest jednak, aby wszystkie pary dwubajtowe musiały rozpoczynać się od równych adresów. 0x0180 to kod operacji z mojego micro, który chcę wykonać, jeśli komputer osiągnie adres nieużywanego obszaru flash.

Przed rozpoczęciem odpowiadając Chciałbym powiedzieć, że -repeat-data w srec_cat ma problem:

  • otrzymuje dwie sekcje np C i D umieścić jeden po drugim (D po C) w przestrzeni adresowej.
  • Biorąc pod uwagę, że ostatni bajt sekcji C kończy na adres 0x76 i pierwszego bajtu sekcji D jest na adres 0x78. Innymi słowy, występuje między nimi luka o długości 1 bajta pod adresem 0x77.

W takiej sytuacji, w przypadku korzystania z -repeat-data 0x01 0x80 opcyjne Szal kot wypełnić tę jeden bajt o 0x01 i rozpocząć napełnianie następujące szczelinę od 0x80.

Nie znam rozmiarów tych sekcji, ponieważ linker je obsługuje.

+2

Osobiście rozwiązałbym to z szybkim skryptem w języku Python, nazywanym krokiem po łączu. – Vicky

Odpowiedz

3

Użyj pliku srec_cat, aby utworzyć plik obejmujący żądany zakres adresów wypełniony w całości sekwencją 0x01 0x80 wyrównywaną zgodnie z wymaganiami.

Następnie użyj srec_cat z opcjami -multiple i −disable-sequence-warning, aby "scalić" plik "wypełniacz" z plikiem obrazu aplikacji. Powinieneś określić plik wypełnienia jako pierwszy plik, aby został nadpisany przez dane aplikacji określone jako drugie.

Będzie wydawać wiele ostrzeżeń, ale powinno działać.

+0

Pomyślałem o tym, ale jeszcze go nie wypróbowałem. Daję temu rozwiązaniu zastrzyk. – devemouse

3

chciałbym napisać prosty parser w Windows pracuje tak:

  • Program tworzy nowy plik S-rekord w oparciu o ten, który dostał od kompilatora.
  • Przeprowadź pętlę przez wygenerowany plik i odczytaj dwie linie rekordu s na raz.
  • Jeśli linia jest linią informacyjną, S0, S9, S5 itd., Po prostu zapisz ją w nowym pliku.
  • Jeśli linia 1 ma adres + rozmiar mniejszy niż adres w linii 2, znalazłeś lukę. (address1 + size1) < address2.
  • Napisz wiersz 1 do nowego pliku.
  • Jeśli znalazłeś przerwę, napisz linię ze swoimi stałymi przerwania S1xx01800180 i tak dalej. Oblicz sumę kontrolną podczas podróży.
  • Napisz wiersz 2 do nowego pliku.
+0

Czy format s19 wymaga, aby linie były w kolejności adresowej? –

+1

@Sam Skuce Nie jestem pewien, czy jest to rzeczywiście wymagane, ale każde narzędzie, które widziałem, umieszcza je w porządku adresu, w szczególności linkerów. Jeśli chcesz mieć 100% pewności, że zawsze możesz najpierw posortować wiersze, zastosuj powyższy algorytm. – Lundin

Powiązane problemy