8051 - program wi?kszy ni? 64kb

Feb 11, 2004 4 Replies

Widziałem coś takiego - program był większy niż 64kb, a przecież licznik PC jest 16bitowy - jak to jest zrobione? Obejrzałem zdebugowany program, ale nic nie wymyśliłem.



Pozdr. Maciek


Użytkownik "Maciek" snipped-for-privacy@chabrowa.net napisał w wiadomości news: snipped-for-privacy@risp.pl...

bankowanie

czesc kodu wspolna a czesc w przestrzeni 64 KB podstawiana np 8 KB wspolne i dwa banki po 56 KB

Użytkownik "Maciek" snipped-for-privacy@chabrowa.net napisał w wiadomości news: snipped-for-privacy@risp.pl

Przez bankowanie pamięci. Obrazowy przykład: W obszarze (1): 0000h...7FFFh - siedzi 32KiB pamięci programu - dostępne zawsze W obszarze (2): 8000h...FFFFh - siedzi N nałożonych na siebie banków po

32KiB pamięci. To do którego banku nastąpi faktyczne odwołanie zależy od zawartości dodatkowego rejestru bankującego wybierającego jeden z banków. Czyli generującego właściwy sygnał CS\ jeżeli banki siedzą w kilku kościach, lub dostarczającego brakujące bity adresowe (>=A16) - jeżeli mamy jeden duży EPROM . Procesor widzi do rejestr bankujący w przestrzeni I/O. W szczególnym przypadku tą role może pełnić choćby np. kilka linii portu P1. Przed wywołaniem procedury z obszaru (2) należy do rejestru bankującego wpisać numer banku zawierającego tą procedurę.

W disasemblowanym programie miałeś szanse zobaczyć odwołania do rejestru bankującego. Aczkolwiek w dobrze napisanym kodzie, przełączenia banków mogą być nieliczne, a do tego wykonywane w sposób zakamuflowany. Np. w minimodułach WG (

formatting link
) do wyboru jednego z dwóch banków wykorzystano jednobitowy przerzutnik RS zaimplementowany w GAL-u pełniącym rolę dekodera adresowego. Ustawienie/zerowanie przerzutnika następuje w wyniku odwołania (odczytu) pod konkretne adresy w pamięci (gdzieś pod koniec fizycznej przestrzeni adresowej). Chcąc wybrać bank należy wykonać "ślepy" MOVC odwołujący się do jednego z tych dwóch adresów. Zaletą takiego sposobu przełączania jest to że nie zajmuje żadnych zasobów I/O kontrolera.

Wprawdzie nigdy z tego nie korzystałem, ale AFAIR kompilator+linker Keil-a oferują możliwość bankowania.

"...Widziałem coś takiego - program był większy niż 64kb, a przecież licznik PC jest 16bitowy..."

Zazwyczaj tak, ale nie zawsze. Niektóre

51-ki (np.DS80C400) mają możliwość przestawienia w tryb adresowania ciągłego z 24-bitowym PC.

Cierpliwości w walce z bitami życzy dziadek Ben

Dziękuje za wskazówki - przejrzę ten kod dokładniej.

Pozdr. Maciek

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required