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?
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?
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.
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
)
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.