<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 &quot;16x 8bitovych registrov&quot;. 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">&lt;<a href="mailto:hw.kaliciak@stonline.sk" target="_blank">hw.kaliciak@stonline.sk</a>&gt;</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">&gt; Dobry den,<br>
&gt;<br>
&gt; starsie verzie prekladaju i++ tak, ze tam je skutocne incfsz a cela<br>
&gt; konstrukcia ma 8 instrukcii a to na 35 rocnej architekture PIC16. Cize<br>
&gt; tak ako ste to odhadol, ten princip. Preco novsie verzie pouzivaju tu<br>
&gt; sialenu konstrukciu neviem, ale da sa vytusit, ze za tym mozu byt<br>
&gt; rozne dovody. Ono je aj tak celkom zaujimave filozofovanie, preco ten<br>
&gt; kompilator negeneruje najoptimalnejsi kod, a to aj v platenej verzii.<br>
&gt; Rozoberat to zbytocne nechcem, lebo problem pristupu k typu int cez<br>
&gt; byty sa tu rozoberal uz aspon tri krat a vzdy sme skoncili pri<br>
&gt; kompilatore C... A poznamkami preco je PIC16 na nic. Tym nechcem<br>
&gt; povedat, ze novsie cipy nie su dobre, ale mozu byt aj ine prakticke<br>
&gt; dovody, preco robit so zabehnutymi typmi.<br>
&gt;<br>
&gt; Tymto by som rad tuto diskusiu z mojej strany uzavrel.<br>
&gt;<br>
&gt; A.<br>
&gt;<br>
&gt;<br>
&gt; Dòa 31. októbra 2013 0:19, Radek Benedikt &lt;<a href="mailto:benedikt@lphard.cz">benedikt@lphard.cz</a><br>
</div>&gt; &lt;mailto:<a href="mailto:benedikt@lphard.cz">benedikt@lphard.cz</a>&gt;&gt; napísal(-a):<br>
<div><div class="h5">&gt;<br>
&gt;     &gt; unsigned long i;<br>
&gt;     &gt; ...<br>
&gt;     &gt; i++;<br>
&gt;     &gt;<br>
&gt;     &gt; 0xFFEA: MOVLW 0x1<br>
&gt;     &gt; 0xFFEC: ADDWF i, F, ACCESS<br>
&gt;     &gt; 0xFFEE: MOVLW 0x0<br>
&gt;     &gt; 0xFFF0: ADDWFC 0x8, F, ACCESS<br>
&gt;     &gt; 0xFFF2: MOVLW 0x0<br>
&gt;     &gt; 0xFFF4: ADDWFC 0x9, F, ACCESS<br>
&gt;     &gt; 0xFFF6: MOVLW 0x0<br>
&gt;     &gt; 0xFFF8: ADDWFC 0xA, F, ACCESS<br>
&gt;     &gt;<br>
&gt;     &gt; Cize celkom pochopitelny kus &quot;assembleru&quot;. Nulovanie W po kazdej<br>
&gt;     &gt; inkrementacii je predpokladam dan za free verziu kompilatora -<br>
&gt;     pouziva<br>
&gt;     &gt; sa vseobecne pripocitanie 32-bitovej konstanty k premennej, bez<br>
&gt;     ohladu<br>
&gt;     &gt; na to, ze jedno z nich je skratka jednotka.<br>
&gt;<br>
&gt;     Drobne upresneni naokraj:<br>
&gt;     Ta jednotka je taky 32bitova, ono to neni zas tak nebezne,<br>
&gt;     pricitat 0 +<br>
&gt;     carry k casti promenne. Pravda, sice je obcas videt preskoc<br>
&gt;     nasledujici<br>
&gt;     instrukci(e), kdyz neni prenos a tou nasledujici instrukci je<br>
&gt;     inkrement<br>
&gt;     casti promenne. Opravuji se, dost (vetsina ?) procesoru<br>
&gt;     nenastavuje pri<br>
&gt;     inkrementu prenos a protoze se pricita jednicka k vicebitove promenne,<br>
&gt;     tak je mozne testovat byte na nulu. Takze preskoc nasledujici<br>
&gt;     instrukci(e) neni-li nula. A to celkem trikrat, takze to nebude kratsi<br>
&gt;     nez priklad nahore. A tusim ze to nebude na PICu ani rychlejsi. To by<br>
&gt;     musel mit podmineny skok, ne jen preskok.<br>
&gt;<br>
</div></div>&gt;     Radek (<a href="http://benedikt2hw.cz" target="_blank">benedikt2hw.cz</a> &lt;<a href="http://benedikt2hw.cz" target="_blank">http://benedikt2hw.cz</a>&gt;)<br>
&gt;<br>
&gt;<br>
&gt;     _______________________________________________<br>
&gt;     HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a> &lt;<a href="http://www.HW.cz" target="_blank">http://www.HW.cz</a>&gt;<br>
&gt;     <a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a> &lt;mailto:<a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>&gt;<br>
&gt;     <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">&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a><br>
&gt; <a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
&gt; <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>