pic a C

Andrej Jancura aj.hwlist na gmail.com
Pondělí Leden 14 15:32:05 CET 2013


Aha az teraz som si vsimol ten return... dajte ho prec, a vyhodnoti
Vam to cely byte naraz.

A.


Dňa 14. január 2013 15:27, Andrej Jancura <aj.hwlist na gmail.com> napísal/a:
> Dobry den,
>
> skuste ten ChangeDateTime nadefinovat ako union, kde budete mat
> polozku ChangeDateTime.Byte a ten date potom ako parameter pre switch,
> Switch (DateTime.changeDateTime.Byte)... mohlo by to vygenerovat dve
> instrukcie
>
> movwf   DateTime.changeDateTime.Byte, f
> btfss    Status,Z
>
> Pokial to chcete cez bit test file skip instrukcie, tak musite ist len
> cez if(DateTime.changeDateTime.New10ms). Neviem ci switch podporuje
> bitove operandy, ale skor nie.
>
> Majte vzdy na pamati, ako ma ten vysledny kod vyzerat v asembleri,
> potom to relativne lahko prepisete do C, teda uz optimalizovaneho C.
>
> Ja osobne by som ten kod napisal takto (trochu sa s tym treba pohrat)
>
> if(DateTime.changeDateTime.Byte == 0)
>    return;
> else
> { if(DateTime.changeDateTime.New10ms)
>    { add_10ms(); return;}
>   if(DateTime.changeDateTime.New100ms)
>    { add_100ms(); return;}
> ...
>
> Myslim, ze to vygeneruje kratsi kod, ako ked pouzijete switch(Byte),
> case... switch je implemntovany ako postupny xor a jump.
>
> A.
>
>
> 2013/1/14 Miroslav Draxal <evik na volny.cz>:
>> Dobrý den,
>>
>> Tak zase zápis.
>>
>>
>>
>> typedef struct {
>>
>>     unsigned newHalfSec : 1; // nová půlsekunda
>>
>>     unsigned newSec : 1; // nová sekunda
>>
>>     unsigned newMinuta : 1; // nová minuta
>>
>>     unsigned newHodina : 1; // nová hodina
>>
>>     unsigned new10ms : 1; // nových 10ms
>>
>>     unsigned new20ms : 1;//nových 20ms
>>
>>     unsigned new100ms : 1;//nových 100ms
>>
>>     unsigned HodinyStop : 1; //zastaví běh hodin
>>
>> } _changeDateTime;
>>
>>
>>
>> typedef struct {
>>
>>     char rok;
>>
>>     char mesic;
>>
>>     char den;
>>
>>     char den_tyden;
>>
>>     char hodin;
>>
>>     char minut;
>>
>>     char sekund;
>>
>>     char counter; // kolikrát za 1sekundu dojde k přerušení
>>
>>     uint * pDenNazev; // ukazatel na paměťový prostor s názvem dnu
>>
>>     _changeDateTime changeDateTime;
>>
>> } _DateTime;
>>
>>
>>
>> _DateTime DateTime;
>>
>>
>>
>> Jak do Switch zapsat něco takového viz níže. Zase nějak přes pointery?
>>
>>
>>
>> Switch (DateTime.changeDateTime)
>>
>> {
>>
>> Case . new10ms:
>>
>>                ....
>>
>>                Break;
>>
>> Case ....
>>
>> }
>>
>>
>>
>> Míra
>>
>>
>>
>> __________ Informace od ESET NOD32 Antivirus, verze databaze 7890 (20130114)
>> __________
>>
>> Tuto zpravu proveril ESET NOD32 Antivirus.
>>
>> http://www.eset.cz
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>>


Další informace o konferenci Hw-list