<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><title>Re: pole bitového pole v C</title><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.StylE-mailovZprvy18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=CS link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Jak jsem psal, je to starý projekt, nový procesor řady pic s&nbsp;18 pin více než 8k, stejný pinout jsem nenašel. Něco tam chci dodělat. Obsazenost původního programu 95%, takže velikost paměti jsem původně odhadnul dobře. Všem děkuji. Míra<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> hw-list-bounces@list.hw.cz [mailto:hw-list-bounces@list.hw.cz] <b>On Behalf Of </b>Andrej Jancura<br><b>Sent:</b> Sunday, January 13, 2013 2:48 PM<br><b>To:</b> HW-news<br><b>Subject:</b> Re: pole bitového pole v C<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p>&nbsp;</o:p></p><p><span style='font-size:10.0pt'>Dobry den,<br><br>Len par poznamok ku Vasim postrehom. Mam par verzii HiTechu pre PIC a<br>stravil som aj par noci tym, ako pisat v C najkratsi kod, porovnatelny<br>s asemblerom.<br><br>Ako prvu poznamku by som si dovolil na adresu sposobu programovania.<br>Snazil by som sa na Vasom mieste pisat kod inak, t.j. hladal sposoby<br>ako setrit pamatou tym, ze by som vyuzival vlastnosti, ktore ma<br>prekladac pri roznych ceckovskych konstrukciach integrovane v sebe,<br>alebo si pred navrhom hw sadnut a skusit odhadnut, kolko riadkov kodu<br>sa vmesti do tej ktorej pamati flash. Mozete to urobit tak, ze na<br>riadok kodu v C poviete ze to zaberie povedzme 16-24-32 instrukcnych<br>slov v asembleri. Z toho Vam vyjde nejaky minimalny pocet riadkov kodu<br>v C. A ak sa nevmestite do pamati, pouzit typ s vacsou. Usetri Vam to<br>dost casu a sprijemni programovanie. Na Vasom mieste by som sa snazil<br>navrhnut si aj schemu rozdelenia pamati RAM na softverovy stack pre<br>parametre, globalne premenne a premenne pouzivane kompilatorom. Tie<br>posledne su cca. 16bytov, teda treba tuto hodnotu odcitat od celkovej<br>velkosti RAM.<br><br>Co sa tyka kompilatorov, zdaleka nie su pisane tak, aby generovali<br>najkratsi kod. Mam rozne verzie, v ktorych je badat vyvoj, ale v<br>kazdej je cosi vzdy inak... Takze to co platilo v jednej verzii<br>neplati v dalsej. Zial XC8 nemam, lebo vaham nad tym, ci to ma vobec<br>este zmysel investovat do 8-bitov a vyraznym faktorom je aj to, ze<br>Mchip neplanuje ponukat option restart HPA. Ale zase na druhej strane<br>sa mi uz nechce ucit nieco nove, ked viem, ze si sadnem a mozem rovno<br>programovat. Pri ARM by som musel riesit vsetky otazky vyvojovych<br>prostriedkov a ucit sa ich od zaciatku. Takze neviem, dost vaham.<br><br>Dalsia vec, co sa tyka sposobu kompilovania, mchip ma pravdepodobne<br>pristup aj k nestadartnym normam a podla toho potom zrejme pise<br>kompilatory. To su tie rozne vychytavky, ktore sa snazite najst a<br>integrovat ich do Vasho kodu. Nechcem to moc rozvadzat, ale aby ste<br>aspon tusil preco to je tak, tusim v knizocke emc for product designer<br>je kapitola venovana emc a programovaniu. Su tam rozne aspekty a je<br>tam aj poznamka o vyzarovani a imunite. Pokial napisete zly software,<br>mozete mat tiez problemy, co moze zniet paradoxne, ale faktura a par<br>tyzdnov stravenych v skusobni Vam to potvrdi.<br><br>Takze neviem Vam nic viac poradit, akurat to, aby ste to skusil<br>prepisat cez lokalne premenne, kedze sa automaticky alokuju a urcite<br>ich pouzivate v programe na viacerych miestach. Navonok Vam to<br>nezozerie ziadnu RAM. S kodom to je tazsie, ale to by som riesil, az<br>ked budete pri nejakom zaplneni pamati, povedzme na 70%.<br><br>A.<br><br>2013/1/13 Miroslav Draxal &lt;<a href="mailto:evik@volny.cz">evik@volny.cz</a>&gt;:<br>&gt; Výhody unionu pro mcu jsou v tom,&nbsp; že dokážu různým způsobem přinutit<br>&gt; kompilátor aby šetřil paměti.<br>&gt;<br>&gt;<br>&gt;<br>&gt; typedef union {<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; unsigned char value;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; struct {<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned CisloBitu : 6;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned SetClr : 1;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp; } bits;<br>&gt;<br>&gt; } _SetBitPole;<br>&gt;<br>&gt;<br>&gt;<br>&gt; Pokud chci vynulavat cely byt SetBitPole.value=0; // přeloží jako clrf …<br>&gt;<br>&gt; SetBitPole.bits.SetClr=1; //přeloží jako bsf…<br>&gt;<br>&gt;<br>&gt;<br>&gt; Pokud to mám jenom jako char, a chci nastavitb jeden bit, tak automaticky<br>&gt; používá<br>&gt;<br>&gt; movlw 0x01000000<br>&gt;<br>&gt; andwf SetBitPole,f<br>&gt;<br>&gt; Prostě se snažím co nejvíc podstrkovat kompilátoru jak udělat co nejkratší<br>&gt; kód. Ono se řekne, vždyť je to jeden byt navíc. U dospělých MCU to nevadí,<br>&gt; ale já šetřím pamětí. Takových hle pár vychytávek a mám volných dalších 100<br>&gt; bytů.<br>&gt;<br>&gt;<br>&gt;<br>&gt; Prostě mám ve funkci vstupní hodnotu union, abych nemusel ve funkci použít<br>&gt;<br>&gt; SetBitPole.value = VstupniHodnota;<br>&gt;<br>&gt;<br>&gt;<br>&gt; Potřeboval bych, abych mohl volat funkci&nbsp; àVoid funkce(_SetBitPole<br>&gt; SetBitPole);<br>&gt;<br>&gt; Tímto zápisem<br>&gt;<br>&gt; Funkce ((24 - CisloSekce) | 0x40;)<br>&gt;<br>&gt; Což samozřejmě nejde z pohledu C,&nbsp; z pohledu ASM předávám jeden byt.<br>&gt;<br>&gt;<br>&gt;<br>&gt; Důvod proč. Zjistil jsem, pokud volám funkci jako char, tak se parametr<br>&gt; předá ve W, ale pokud předávám parametr jednobytového unionu, tak to přeloží<br>&gt; jako<br>&gt;<br>&gt; Movwf parametr<br>&gt;<br>&gt; Call Funkce<br>&gt;<br>&gt; …….<br>&gt;<br>&gt; Funkce Movf parametr,w<br>&gt;<br>&gt;<br>&gt;<br>&gt; Kompilátor by si to měl umět optimalizovat, ale neumí. Ušetřil bych 2 byty.<br>&gt; Snažím se to obejít. Uznávám, že to je, jako když si pes honí ocas. Míra<br>&gt;<br>&gt;<br>&gt;<br>&gt; Ps. Celkovou „mou optimalizací“ zápisu C kódu jsem již ušetřil 0,5kB paměti<br>&gt; a stále jsou v zápisu rezervy. Nesmějte se vy, co používáte dospělé MCU.<br>&gt;<br>&gt; 1/ na zařízení probíhá upgrade soft.<br>&gt;<br>&gt; 2/ cokoli předělávat na desce se mi nechce<br>&gt;<br>&gt; 3/ další výrobky nebudou<br>&gt;<br>_______________________________________________<br>HW-list mailing list&nbsp; -&nbsp; sponsored by <a href="http://www.HW.cz">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">http://list.hw.cz/mailman/listinfo/hw-list</a></span><o:p></o:p></p><p class=MsoNormal><br><br>__________ Informace od ESET NOD32 Antivirus, verze databaze 7889 (20130113) __________<br><br>Tuto zpravu proveril ESET NOD32 Antivirus.<br><br><a href="http://www.eset.cz">http://www.eset.cz</a><br><br><br>__________ Informace od ESET NOD32 Antivirus, verze databaze 7889 (20130113) __________<br><br>Tuto zpravu proveril ESET NOD32 Antivirus.<br><br><a href="http://www.eset.cz">http://www.eset.cz</a><o:p></o:p></p></div> <BR>
<BR>
__________ Informace od ESET NOD32 Antivirus, verze databaze 7889 (20130113) __________<BR>
<BR>
Tuto zpravu proveril ESET NOD32 Antivirus.<BR>
<BR>
<A HREF="http://www.eset.cz">http://www.eset.cz</A><BR>


 </body></html>