Stránkování paměti prog. - musí se při return přepínat zpět?

Zdravím,
hloupej dotazík, ale chci se ujistit že sem to pochopil dobře.

když přepnu stránku programu a pak skočim na tu určitou stránku tak při návratové instrukci return už nemusim přepínat zpět na původní stránku když se ukládá celá návratová adresa?

:arrow_right: administrator: přejmenováno z "stránkování paměti programu"

INIT_DS1320 je v PAGE3 a MAIN je v PAGE0 a pokud před goto MAIN nedám PAGESEL MAIN, tak program skočí místo na MAIN do PAGE3 dle PCL.

[code]INIT
banksel OPTION_REG
movlw b’00000000’
movwf OPTION_REG

;PORTE
banksel TRISE ; vyber banky
movlw b’00000000’ ; 0 vstup, 1 vystup
movwf TRISE ; sup do TRISu

pagesel	INIT_DS1320
call	INIT_DS1320

pagesel	MAIN
goto 	MAIN[/code][/code]

to že musim přepnout stránku před každym goto a call (když budu skákat na jinou tránku) to je mi jasný. ale když použiju call tak jestli před return musim přepínat stránku?

;
;nějaká hlavní programový smyčka na page0
;

page1
call zobraz

page0
return

to přepnutí na page0 před return jestli musí být?

Nemusíš před return přepínat stránku

paráda, a jestli může ještě zeptat, ,když na page0 pracuju v bank0 a skočim na podprogram na page1 a tam se přepnu do bank1 a pak zadám return tak v bank1 zůstanu? skok ze stránky na stránku neovlivní přepnutí banky že ??

Určitě neovlivní :slight_smile:

hmhm, tak chybka bude asi jinde, moc děkuju za nformace :slight_smile: sem zase trochu chytřejší :slight_smile:

Pokud to máš v ASM, což asi máš a není to tajnej projekt, hoď ho sem, mrknu se.

no tajný to moc nejni ale chtěl bych se s tim poprat chvilku sám a nějak tu chybku najít, ale když najdu prd tak to sem pošlu, to je jasný :slight_smile:

Taky bych měl jeden “hloupej dotazík”: o jakých stránkách paměti se tu prosím vás bavíte?

Vl.

podle manuálu k PIC16F87XA je pamět programu rozdělena na 4 stránky.
pamět.JPG

Pokud píšeš v C, tak se tě to netýka. :smiley: :smiley: :smiley: :smiley: :smiley:

no lepsou moznostou bolo pouzit 18f452 a podobne… nema dlenie na banky…o podpore C ani nehovorim. Dokonca pinovo kompaktibilne…

Prosím o radu kde zjistím v které paměťové bance se právě nacházím při psání programu. Je mi jasné, že potřebné adresy potřebných proměných si navolím sám a adresy funkčních registrů jsou dane taky výrobcem. Ale jak zjistim kolik s které banky proměných mám vyčerpán je mi zahadou :astonished:

možná sem to asi nepochopil dobře ale pokusim se odpovědět.

V keré se nacházím bance se v program MPLAB píše uplně dole ve stavovém řádku, tam je při krokování programu napsáno v keré bance se momentálně nacházím. Kde je to napsané v C to netušim. to musí povědět někdo, kdo tvoří v C.

V manuálu daného PICu je popsán obsah paměti RWM kde je popsáno který registr na jaké adrese je rezervovaný pro procesor a je tam i psáno které registry sou volné pro vlastní použití. Takže když si zvolim který registr na určité adrese chci používat na toto a ono, tak musím veděl kolik mi toho ještě zbývá.

snad je to aspoň trošku pochopitelné :slight_smile: a pokud se nějak pletu tak mě prosím opravte :slight_smile:

Zdravím.
Ak som správne pochopil tak pri PIC 16F877A pokiaľ sa zmestím z programom od 000h do 07FFh tak nemusím používať príkazy:

pagesel INIT_DS1320
call INIT_DS1320

pagesel MAIN
goto MAIN
Samozrejme BANKSEL pri prechode do iných bánk ako je bank0 je nutné použiť.
Relatko.

jojo, přesně tak. pokud se program vejde do adresy 07FF tak nejni potřeba přepínat stránky.

dokedy prekladac nehlasi ze nema pamet ma to vobec netrabi ktoru banku v Cku pouzije. Proste pises program a o drobnosti sa nestaras. starat sa zacnes ked nieco nefunguje :smiley: