Pytanie:
Czy mój plik HEX zmieści się w moim mikrokontrolerze?
Sakti
2011-03-26 18:48:34 UTC
view on stackexchange narkive permalink

Mam plik szesnastkowy o rozmiarze 42 kB. Czy rozmiar ma znaczenie podczas ładowania go do mikrokontrolera? Czy mogę załadować plik szesnastkowy o rozmiarze 42 kB do układu ATMEGA32, który ma pamięć 32 kB?

Zwykle plik szesnastkowy jest kompilowany dla określonego procesora i powinien być używany tylko w tym procesorze. Przynajmniej dla uc, którego użyłem.
Trzy odpowiedzi:
Nick T
2011-03-26 19:54:41 UTC
view on stackexchange narkive permalink

Wygenerowany plik szesnastkowy jest często w pewnym sensie czytelny dla człowieka i zawiera dane sum kontrolnych, z których oba zwiększają rozmiar kilka razy. Uważam, że AVR używają formatu Intel HEX, podczas gdy inne mikro łańcuchy narzędzi używają innych formatów; na przykład Codewarrior for Freescale HCS08 dostarcza Motorola S-records, który jest bardzo podobny.

Jeśli otworzysz plik .hex w edytorze tekstu (Notatniku), powinien on wyglądać podobnie do tego , choć znacznie dłużej:

 : 10010000214601360121470136007EFE09D2190140: 100110002146017EB7C20001FF5F16002148011988  

gdzie różne pola są opisane w przykładzie w Wikipedii. W każdej z tych linii jest tylko 16 bajtów, które oznaczają dane, które będą przechowywane w mikro, reszta to suma kontrolna i dane kontrolne, które są właśnie używane przez program flasher.

Pliki szesnastkowe uwzględniają również luki w danych (pierwsze pole to adres ładowania). Tak więc, potencjalnie mały, nieciągłe plik szesnastkowy może mieć duży ślad w pamięci RAM / pamięci flash
jpc
2011-03-27 19:31:19 UTC
view on stackexchange narkive permalink

Możesz użyć avr-size , aby sprawdzić rzeczywisty rozmiar swojego programu:

  [jpc @ jpc sepack] avr-size sepack.elf text data bss dec hex nazwa pliku 4396 6 277 4679 1247 sepack.elf [jpc @ jpc sepack] avr-size sepack.hex dane tekstowe bss dec hex nazwa pliku 0 4402 0 4402 1132 sepack.hex  

Jak ty widać, że działa lepiej z plikami .elf , ponieważ może również pokazać, ile pamięci RAM potrzebujesz ( data + bss ) i ile zostanie użyty flash ( text + data ). Z plikiem .hex wyświetla tylko drugą liczbę (oznaczając ją jako data )

Więc jaki jest rozmiar mojego pliku hex? Podczas sprawdzania pliku dostaję następujące szczegóły. Tekst - 13858, dane - 926, bss - 1043 dec - 15927, hex - 3dd3
Będziesz potrzebował 13858 + 926 = 14784 bajtów Flash i 1969 bajtów pamięci RAM (+ trochę miejsca na stos). Myślę, że oznacza to część z co najmniej 16kB i 4kB RAM (wystarczyłoby 3, ale może to być trudne do znalezienia).
Możesz mieć problemy z dopasowaniem do pamięci RAM ATmega32. Powinieneś albo zmniejszyć użycie pamięci RAM, dokładnie sprawdzić użycie miejsca w stosie lub przełączyć się na część z 4k RAM.
Leon Heller
2011-03-26 19:35:40 UTC
view on stackexchange narkive permalink

Każdy bajt w pliku szesnastkowym zajmuje dwie cyfry szesnastkowe plus kilka znaków na rekord. Twój plik hex powinien zmieścić się w pamięci flash urządzenia.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 2.0, w ramach której jest rozpowszechniana.
Loading...