Jak zrozumieć i wykorzystać dyrektywy page i bank w programowaniu na PIC16F877?

PIC16f877 i przekorczenie strony





Poprzedni Następny
Wiadomość
Spis treści
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




Poprzedni Następny
Wiadomość
Spis treści
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)




Poprzedni Następny
Wiadomość
Spis treści
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.



Poprzedni Następny
Wiadomość
Spis treści
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.



Poprzedni Następny
Wiadomość
Spis treści
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) ??





Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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:

bank ma 2kB

bank ma 64B (od tych 64B trzeba odliczyć SFR-y i inne PIC-owe cuda)

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