Nie jestem nowy dla bootloadera i systemu SW, ale nie znam źródła powodu, dla którego program ogólny zaczyna się od 0x8000
. Wiem już, że adres 0x8000
został użyty jako adres początkowy w normalnym programie C/C++.Dlaczego ogólny program zazwyczaj zaczyna się od 0x8000?
Czy minimalny rozmiar bootloadera dla programu ogólnego wynosi do 0x8000
? Czy jest to minimalny rozmiar bloku ROM, który należy przydzielić do bootloadera 32KB? Czy jest jeszcze inny powód?
Chciałbym o tym wiedzieć, historycznie lub logicznie, oraz z punktu widzenia wirtualnego adresu.
Doceniam wszystkich, twój czas i pomoc w tym. Aby wyjaśnić pytanie, pytanie dotyczy adresu wirtualnego, a nie fizycznego.
Zasadniczo zgadzam się z opinią R z punktu widzenia pamięci fizycznej.
Bez mówienia konkretnego systemu, który jest różnorodny, na przykład linux (nawet w Androidzie), ogólny RTOS (jądro i inne, szczególnie sekcja łącznika ARM), wszystkie używają adresu 0x8000 jako ogólnego programu adresu startowego. takie o nazwie crt_begin.o, crt.o, itp. Znajdujące się w 0x0 z programem ładującym istnieją w tym obszarze.
Dlatego domyślny minimalny rozmiar bootloadera dla programu ogólnego to 32KB, biorąc pod uwagę rozmiar bloku, jeśli byłby on umieszczony w BootROM podczas startu systemu (cold boot).
Hmmm, ale nie jestem pewien ...
O jakim systemie tu mówisz? –
Nie mam żadnego wiarygodnego źródła tego, ale mogę zgadnąć. Historycznie wiele procesorów, w szczególności 8-bitowych, miało funkcję o nazwie [strona zerowa] (http://en.wikipedia.org/wiki/Zero_page), co oznacza, że komórki pamięci pod adresami 0x00 - 0xFF miały obsługę instrukcji do wykonać szybciej. Wierzę, że zostało to wprowadzone przez firmę Motorola w tamtych czasach, ponieważ posiadały one odwzorowane w pamięci rejestry I/O na starych MCU, takich jak 6800. -> – Lundin
Dlatego chcesz, aby ten pierwszy obszar pamięci był zajęty przez komórki pamięci RAM lub specjalne rejestry . Następnie ma sens, że część przestrzeni adresowej, która pochodzi po stronie zerowej, ma taki sam charakter: pamięć RAM i/lub rejestry. Zajmie to dużo kb, może nawet do 0x6000 lub trochę takich. Następnie zakładam, że wygodnie było umieścić ROM (pamięć programu) na parzystym adresie, a 0x8000 było wygodne. Jestem prawie pewien, że odpowiedź na to pytanie można znaleźć we wczesnych projektach procesorów Motorola. – Lundin