<div dir="ltr"><div><div>Dobry vecer,<br><br></div>skusim to komentovat vo Vasej reakcii, teda v texte a na konci.<br><br></div>A.<br><div class="gmail_extra"><br><br><div class="gmail_quote">2014-03-31 21:27 GMT+02:00 Miroslav Draxal <span dir="ltr"><<a href="mailto:evik@volny.cz" target="_blank">evik@volny.cz</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div link="blue" vlink="purple" lang="CS"><div><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Ne neuzavřeli. Jenom pátrám dál. O tom bootloaderovi v examles vím, koukal jsem. Problém je v tom, že tohle přesouvání je všechno „systémové“. Já chci nesystémově podstrčit kompilátoru mnou napsanou obsluhu přerušení. Kompiler si udělá „systémově“ začátek rutiny přerušení tj, uklidí registry, pak předá řízení do<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"> void interrupt low_priority interrupt_low (void)<u></u><u></u></span></p><p class="MsoNormal">
<span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">a po návratu z funkce přerušení zase systémově obnoví registry. Těch registrů ukládá a obnovuje cca 13, což je pro mě moc. V přerušení používám jenom W reg a potřebuji „fofr“. Nemusím ukládat registry.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Takže řešení je:<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">1/ buďto nějak systémově přesvědčit kompilátor, aby místo své obsluhy přerušení použil mou<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">2/ nebo nesystémově použít <u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Void MeInterrupt(void)@0x08<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Pokud použuji 2/ v hi-tech 9,80 tak to místo na adresu 0x08 přeloží na 0x00, což je chyba<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Pokud použiji 2/ v xc8, tak se to přeloží OK</span></p></div></div></blockquote><div><br></div>
<div>Myslim si, ze operator @ funguje az vo verzii xc8, preto Vam to nejde.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div link="blue" vlink="purple" lang="CS">
<div><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Problém je, že 9,80 mám legálně ve verzi PRO, a pokud použiji XC8, tak tam jedu ve verzi Lite a už se do pice nevejdu. Ten projekt musí být i nadále živý, čili nemohu ho jednorázově přeložit ve zkušební verzi XC8 PRO.</span></p>
</div></div></blockquote><div><br></div><div>A na upgrade na XC8 ste neuvazoval? :)<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div link="blue" vlink="purple" lang="CS"><div><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Dnes mě napadlo, že bych využil toho, že funguje <u></u><u></u></span></p><p class="MsoNormal">
<span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Void MeReset (void)@0x00<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">#asm<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Goto _picInit<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Nop<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Nop<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Goto _MeHigInterrupt<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">#endasm<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Což funguje, vše se uloží jak má, ale problém je, že zas nevím jak zapsat to _picInit. Je to inicializační rutina procesoru, kde se nuluje RAM atd. To zase dodá kompiler. Adresa počátku rutiny se mění po rekompilaci (přidání dalšího kódu). Nevím jak se na ten pic Init odkázat, aby tomu kompiler rozuměl.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">M.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"> </span></p></div></div></blockquote><div><br></div><div>Pozrite, myslim, ze zaklad je ten, ze v zdrojaku nenapisete void interrupt my_isr() {}. Ked napisete tento riadok, tak prekladac automaticky generuje celu rutinu ukladania a obnovy registrov v preruseni, aj ked je prazdna. Pak by som sa pozrel ako to generuje ten mnou zmienovany startup . as, ja mam toto:<br>
<br>--chip=16f690 -M -P -N31 \<br>--warn=0 \<br>--mode=pro \<br>--opt=all,+asm,+asmfile,9 \<br>--addrqual=ignore \<br>--runtime=default,+clear,+init,+keep,+osccal,+resetbits,-download,-stackcall,+stackwarn,+clib \<br>--summary=default,-psect,-class,+mem,-hex \<br>
--double=24 \<br>--float=24 \<br>-G \<br>--asmlist \<br>--output=default,-inhx032 \<br><br>rx_tx_debug.c<br><br></div><div>A pozrite si ako je rieseny ten startup a vas main v C. Potom Vam neostane uz nic ine, iba sa vrhnut do toho asembleru a manualu a naprogramovat si tu obsluhu sam. Ako som uz pisal, princip som pochopil na 90%, ale prakticky mi to nikdy moc nechodilo. Ine riesenie v tych starych verziach kompilatora nie je. Snad len to, ze si pozrite este kapitolu o uzivatelskom startup file a jeho prilinkovani.<br>
<br>Viacej Vam k tomu naozaj neviem poradit. <br><br></div><div>A.<br><br></div></div></div></div>