<div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div><div><div>Zatim to pořád funguje bez problemu. Ale ten text v návodu k SDCC kap.3.10. <br></div>je uzitecny.  Ted jsem si teprve uvedomil, ze v definici  preruseni se precve pracuje<br>
</div>s deklaraci "using", která definuje registrovou banku. Samozrejme to tam mam,<br></div>kazde preruseni ma svoji banku a banka 0 je pro hlavni program.<br></div>Zajimave je, ze v navodu se pise, ze to ma byt takto :<br>
void timer_isr (void) __interrupt (1) __using (1)<br></div>a ja tam ty zavorky za interrupt a using nemam - bylo to takto ve stare verzi,<br></div>ale prekladac zadnou chybu nehlasi. <br></div>Divam se do kodu v assembleru a zacinam tomu zase rozumet. <br>
</div>To přerušení od SW UARTu mám napsané v assembleru a oznacene jako<br></div>__naked . Prestoze tam mam i using 1 , tak to prepnuti registrove banky ignoruje,<br></div>V assembleru tam nic neni, na rozdil od ostatnich preruseni. <br>
</div>Je to hloupe, ze prekladac akceptuje to using 1 a zaroven to naked. <br></div>Asi jsem na stope problemu. Zitra to zkusim spravit primo v tom assembleru, tak<br> ze ulozim pouzite registry a nebo prepnu banku sam. <br>
<br></div>Diky za pomoc, ozvu se zitra, jak to dopadlo. <br><div><div><div><div><div><div><div><br><div><br></div></div></div></div></div></div></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">Dne 20. ledna 2014 18:59 Jan Waclawek <span dir="ltr"><<a href="mailto:konfera@efton.sk" target="_blank">konfera@efton.sk</a>></span> napsal(a):<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Aha, ale to este stale moze znamenat, ze mate vacsinu toho povodneho<br>
programu, takze problem stale moze byt niekde inde v tom programe, nie?<br>
<br>
Popis preruseni je v manuali sdcc, kap. 3.10; sposob pouzitia registrov v<br>
kap. 3.10.2. V skratke, ak nepredpisete zmenu registrovej banky (co sa<br>
robi zapisom do dvoch na to urcenych bitov v PSW), tak sa prerusenie sa<br>
vykonava v tej istej registrovej banke (nulovej), pricom vsak prekladac<br>
ulozi vsetky pouzivane registre na stack.<br>
<div class="im"><br>
wek<br>
<br>
<br>
----- Original Message ---------------<br>
</div><div class="im">>Ten kód je jednoduchý, v cyklu se ètou byty s EEPROM a posílají v HEX na<br>
>terminál. Když chyba nastane,<br>
</div>>posílají se samé nuly, když udìlám HW reset, ( není potøeba vypnutí ) , tak<br>
>se data zase èotu dobøe.<br>
>Intervaly mezi "dobøe " a "špatnì" jsou v øádu jednotek hodin.<br>
>Teï jsem udìlal brutální úpravu.  EECON nastavuji na tvrdo pøi ètení na<br>
>0x02 a pak zpìt na 0xFC, tak jak je po resetu.<br>
>Taky jsem zakázal bìhem ètecí procedury všechna pøerušení. Jede to asi pùl<br>
>hodiny bez problémù, ale to už tady bylo.<br>
<div class="im">><br>
>Díval jsem se do assembleru ( produktu SDCC) a není mi jasné, jakým<br>
</div>>zpùsobem se pøiøazují registrové banky pro pøerušovací programy.<br>
>Už jsem to zapomnìl od doby, kdy jsem psal v assembleru.  Pøerušovací<br>
<div class="im">>rutiny ukládají na stack jen ACC, PSW a datapointer.<br>
</div>>Pokud  výše popsaná úprava nepomùže, budu to muset nastudovat.  Ta ètecí<br>
>rutina používá R6 a R7 a pøerušovaví rutiny taky.<br>
>Ale asi to je jiná banka, pokud si matnì pamatuju.<br>
<div class="HOEnZb"><div class="h5">><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><br clear="all"><br>-- <br>Zdravi<br>Jirka OK1MWW
</div>