pic a C

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


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