Jak zrozumieć i wykorzystać dyrektywy page i bank w programowaniu na PIC16F877?
PIC16f877 i przekorczenie strony
From: "~Filut~" <pawel_at_nospam_filuts.waw.pl>
Subject: PIC16f877 i przekorczenie strony
Date: Mon, 1 Jul 2002 18:29:28 +0200
   
Witam !   
Do tej pory pisałem programy na PIC`a, które mieściły się w 2Ksłowach. Ze   
stosowanie instrukcji call, goto nie było żadnych problemów.   
Ostatnio program się rozrósł i po kompilacji otrzymuję szereg komunikatów:   
"Crossing page boundary -- ensure page bits are set".   
W Helpie asemblera znalazłem instrukcję pagesel, banksel  itd. Niestety, ale   
nie bardzo zrozumiałem jak z nich korzystać.   
Czy ktoś może mi wytłumaczyć jak korzystać z tych dyrektyw   
Doczytałem też o tworzeniu plików typu object (dyrektywa CODE).   
Pozdrawiam   
From: "Maciej Zaręba" <zarebama_at_nospam_zt.lomza.tpsa.pl>
Subject: Re: PIC16f877 i przekorczenie strony
Date: Mon, 1 Jul 2002 21:45:22 +0200
   
Aby przy skakaniu po stronach pamieci miec spokoj uzywaj lcall i lgoto wtedy   
asambler sam poustawia Ci odpowiednio bity wyboru strony. A tym komunikatem   
przypomina Ci tylko ze skok wykonuje sie do programu na innej stronie i   
zebys uwazal na ustawienia bitow wyboru strony nic poza tym.(Ja sobie   
wylaczylem ten "warnings" i mam spokoj)   
From: "A.Grodecki" <ag_at_nospam_modeltronik.com.pl>
Subject: Re: PIC16f877 i przekorczenie strony
Date: Mon, 1 Jul 2002 22:59:42 +0200
   
--   
Pozdrawiam,  
Andrzej Grodecki  
Maciej Zaręba wrote in message ...  
|Aby przy skakaniu po stronach pamieci miec spokoj uzywaj lcall i lgoto  
wtedy  
|asambler sam poustawia Ci odpowiednio bity wyboru strony.  
Takie postępowanie, bardzo wygodne, nie sprawdza się, kiedy kod ma być  
krótki. Call i goto zajmują normajnie 1 słowo pamięci podczas gdy lcall i  
lgoto 3 słowa! Kompilator każdorazowo dopisuje ustawienia 2 bitów strony bez  
względu na to, jakie ich wartości były wcześniej.  
From: "Maciej Zaręba" <zarebama_at_nospam_zt.lomza.tpsa.pl>
Subject: Re: PIC16f877 i przekorczenie strony
Date: Mon, 1 Jul 2002 23:16:42 +0200
   
oczywiscie ze nie ma sensu uzywac tych rozkazow do skokow w oberbie tego   
samego banku. chodzilo mi o to ze wygodniej ich uzywac jesli skoki wykonuje   
sie do innego banku, a nie zawsze.   
From: "~Filut~" <pawel_at_nospam_filuts.waw.pl>
Subject: Re: PIC16f877 i przekorczenie strony
Date: Mon, 1 Jul 2002 23:26:38 +0200
   
Użytkownik "Maciej Zaręba" <zarebama_at_nospam_zt.lomza.tpsa.pl> napisał w wiadomości   
news:afqbfp$b0f$1_at_nospam_news.tpi.pl...   
Aby przy skakaniu po stronach pamieci miec spokoj uzywaj lcall i lgoto   
wtedy   
asambler sam poustawia Ci odpowiednio bity wyboru strony. A tym   
komunikatem   
przypomina Ci tylko ze skok wykonuje sie do programu na innej stronie i   
zebys uwazal na ustawienia bitow wyboru strony nic poza tym.(Ja sobie   
wylaczylem ten "warnings" i mam spokoj)   
   
Witaj !   
A jeśli ze strony0 wywołam procedurę ze strony1 za pomocą lcall`a, to czy w   
tej wywoływanej procedurze wystarczy zwykły powrót (return) ??   
From: Andrzej Ekiert <treike_at_nospam_zeus.polsl.gliwice.pl>
Subject: Re: PIC16f877 i przekorczenie strony
Date: Tue, 02 Jul 2002 00:09:48 +0200
   
~Filut~ wrote:   
A jeśli ze strony0 wywołam procedurę ze strony1 za pomocą lcall`a, to czy   
w tej wywoływanej procedurze wystarczy zwykły powrót (return) ??   
   
Tak. Na stosie zachowywana jest cała zawartość PC.    
--    
Polskie Forum Microchipa   
http://www.ekiert.com/microchip/  
:wq  
From: "jmdsh" <jmdsh_at_nospam_wp.pl>
Subject: Re: PIC16f877 i przekorczenie strony
Date: Mon, 1 Jul 2002 21:57:59 +0200
   
Użytkownik "~Filut~" <pawel_at_nospam_filuts.waw.pl> napisał w wiadomości news:afq01v$rp4$1_at_nospam_news.tpi.pl...   
Witam !   
Do tej pory pisałem programy na PIC`a, które mieściły się w 2Ksłowach.   
[...] i po kompilacji otrzymuję szereg komunikatów:   
"Crossing page boundary -- ensure page bits are set".   
W Helpie asemblera znalazłem instrukcję pagesel, banksel  itd. Niestety, ale   
nie bardzo zrozumiałem jak z nich korzystać.   
   
Cześć!   
Właśnie trafiłeś na cały "smaczek" PIC-ów 16X.   
Wszystko co niżej napisane dotyczy serii 16X:   
- dyrektywa PAGESEL - służy do przełączania banków pamięci programu (kod)  
  
  bank ma 2kB   
- dyrektywa BANKSEL - służy do przełączania banków pamięci danych  
  
  bank ma 64B (od tych 64B trzeba odliczyć SFR-y i inne PIC-owe cuda)   
- dyrektywa BANKISEL - służy do sterowania bitem wybierającym zestaw  
  
  banków (0,1) lub (2,3) przy adresowaniu pośrednim (FSR/INDF)   
  czyli można adresować max 256B RAM-u   
Cały kłopot polega na umiejętnym stosowaniu tych instrukcji gdyż nie   
wszędzie są potrzebne (tylko na początku nie wiadomo gdzie ;-) ale to wychodzi   
w praniu na symulatorze. Stosowanie dyrektyw "na zapas" co prawda   
da poprawny ale dłuższy kod. Wszystko jest kwestią wprawy,   
którą nabiera sie w trakcie programowania.   
A wszystkim którzy nie są "smakoszami" polecam AVR-y   
z ich odrębnymi "atrakcjami"   
Pozdrawiam   
jmdsh