<div dir="ltr"><div><div><div><div><div><div>Ahoj Riso,<br><br></div>architektura PIC16 nema zasobnik ako taky, cize parametre nejdu predavat cez stack, tak ako je to pri inych jadrach. Tu je len call a return a mozes mat vnorenych max. 8x call. Potom nastane pretecenie zasobnika.<br>
<br></div>Parametre sa tu predavaju tak, ze sa urobi program flow a zisti sa kolko bytov ram treba na predanie parametrov jednotlivym funkciam a ci sa nahodou z nich nevolaju aj ine rutiny. Podla toho sa vyhradi v bankach ram pocet bytov a tam sa normalne parametre ukladaju cez movfw instrukciu. Takze mozes mat napr. dve rutiny<br>
<br></div>void fn1(unsigned int Cycles)<br></div>void fn2(unsigned char Steps)<br><br></div>a na zasobniku bude vyhradene miesto takto:<br><br></div><div>premenna adresa<br></div><div>fn1@Cycles .... 1<br>
</div><div>fn1@Cycles +1 .... 2<br><br></div><div>fn2@Steps .... 1, kde sa rutiny navzajom nevolaju,<br></div><div>fn2@Steps .... 3, pokial sa rutiny volaju navzajom<br><br></div><div>a potom uz rutina pracuje s fixnymi adresami premennych.<br>
<br></div><div>Kompilator ma este jeden typ premnnej a to btemp, co nie je nic ine ako vyhradenych 4,8,12... bytov v pamatovom bloku, ktory je pristupny vo vsetkych pamatovych bankach RAM a moze sa na tento blok pozerat ako na "16x 8bitovych registrov". Vacsinou sa to pouziva na ukladanie premennych pri preruseni, aritmetickych operaciach a pod. Takto to funguje na architekture PIC16.<br>
<br>PIC18 a PIC16F1xxx su uz takym mixom s roznymi vylepseniami a v podstate sa da povedat, ze PIC18 je uz parodia na AVR, ktora sa objavila zhruba rok potom, co prisli norski studenti s AVR...<br><br></div><div>A. <br></div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">Dòa 1. novembra 2013 14:26, Richard Kaliciak <span dir="ltr"><<a href="mailto:hw.kaliciak@stonline.sk" target="_blank">hw.kaliciak@stonline.sk</a>></span> napísal(-a):<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ahoj Andy,<br>
<br>
este sa vratim k tomu tvojmu prikladu:<br>
<div class="im"><br>
void Delay(unsigned long int Cycles)<br>
while(Cycles--)<br>
;<br>
<br>
</div>nebude to tym, ze ta premenna Cycles je ulozena v zasobniku? Skus ju<br>
definovat lokalne, napr.<br>
<div class="im"><br>
void Delay(unsigned long int Cycles)<br>
</div>{ unsigned long int lCycles;<br>
lCycles = Cycles;<br>
while(lCycles--)<br>
;<br>
<br>
}<br>
<br>
Riso.<br>
<br>
Am 31.10.2013 11:28, schrieb Andrej Jancura:<br>
<div class="im">> Dobry den,<br>
><br>
> starsie verzie prekladaju i++ tak, ze tam je skutocne incfsz a cela<br>
> konstrukcia ma 8 instrukcii a to na 35 rocnej architekture PIC16. Cize<br>
> tak ako ste to odhadol, ten princip. Preco novsie verzie pouzivaju tu<br>
> sialenu konstrukciu neviem, ale da sa vytusit, ze za tym mozu byt<br>
> rozne dovody. Ono je aj tak celkom zaujimave filozofovanie, preco ten<br>
> kompilator negeneruje najoptimalnejsi kod, a to aj v platenej verzii.<br>
> Rozoberat to zbytocne nechcem, lebo problem pristupu k typu int cez<br>
> byty sa tu rozoberal uz aspon tri krat a vzdy sme skoncili pri<br>
> kompilatore C... A poznamkami preco je PIC16 na nic. Tym nechcem<br>
> povedat, ze novsie cipy nie su dobre, ale mozu byt aj ine prakticke<br>
> dovody, preco robit so zabehnutymi typmi.<br>
><br>
> Tymto by som rad tuto diskusiu z mojej strany uzavrel.<br>
><br>
> A.<br>
><br>
><br>
> Dòa 31. októbra 2013 0:19, Radek Benedikt <<a href="mailto:benedikt@lphard.cz">benedikt@lphard.cz</a><br>
</div>> <mailto:<a href="mailto:benedikt@lphard.cz">benedikt@lphard.cz</a>>> napísal(-a):<br>
<div><div class="h5">><br>
> > unsigned long i;<br>
> > ...<br>
> > i++;<br>
> ><br>
> > 0xFFEA: MOVLW 0x1<br>
> > 0xFFEC: ADDWF i, F, ACCESS<br>
> > 0xFFEE: MOVLW 0x0<br>
> > 0xFFF0: ADDWFC 0x8, F, ACCESS<br>
> > 0xFFF2: MOVLW 0x0<br>
> > 0xFFF4: ADDWFC 0x9, F, ACCESS<br>
> > 0xFFF6: MOVLW 0x0<br>
> > 0xFFF8: ADDWFC 0xA, F, ACCESS<br>
> ><br>
> > Cize celkom pochopitelny kus "assembleru". Nulovanie W po kazdej<br>
> > inkrementacii je predpokladam dan za free verziu kompilatora -<br>
> pouziva<br>
> > sa vseobecne pripocitanie 32-bitovej konstanty k premennej, bez<br>
> ohladu<br>
> > na to, ze jedno z nich je skratka jednotka.<br>
><br>
> Drobne upresneni naokraj:<br>
> Ta jednotka je taky 32bitova, ono to neni zas tak nebezne,<br>
> pricitat 0 +<br>
> carry k casti promenne. Pravda, sice je obcas videt preskoc<br>
> nasledujici<br>
> instrukci(e), kdyz neni prenos a tou nasledujici instrukci je<br>
> inkrement<br>
> casti promenne. Opravuji se, dost (vetsina ?) procesoru<br>
> nenastavuje pri<br>
> inkrementu prenos a protoze se pricita jednicka k vicebitove promenne,<br>
> tak je mozne testovat byte na nulu. Takze preskoc nasledujici<br>
> instrukci(e) neni-li nula. A to celkem trikrat, takze to nebude kratsi<br>
> nez priklad nahore. A tusim ze to nebude na PICu ani rychlejsi. To by<br>
> musel mit podmineny skok, ne jen preskok.<br>
><br>
</div></div>> Radek (<a href="http://benedikt2hw.cz" target="_blank">benedikt2hw.cz</a> <<a href="http://benedikt2hw.cz" target="_blank">http://benedikt2hw.cz</a>>)<br>
><br>
><br>
> _______________________________________________<br>
> HW-list mailing list - sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a> <<a href="http://www.HW.cz" target="_blank">http://www.HW.cz</a>><br>
> <a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a> <mailto:<a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>><br>
> <a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<div class="HOEnZb"><div class="h5">><br>
><br>
><br>
><br>
> _______________________________________________<br>
> HW-list mailing list - sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a><br>
> <a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
> <a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<br>
_______________________________________________<br>
HW-list mailing list - sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
</div></div></blockquote></div><br></div>