PIC a C

Zuffa Jan ZuffaJ na cgc.sk
Úterý Květen 20 13:18:50 CEST 2014


je to preto, ze takto sa mi to zda prehladnejsie:
skutocny kod:
if((_CMP() & CB) == CF)
{
}
testuju sa jednotlive bity status registru (W register naplneny navr. hodnotou)
kde:
#define CB 0x01  //maska pre carry flag
#define CF 1      
#define cf  0

_CMP() porovnava dve 64 bitove cisla
je pisana v asembleri volana v c kode.
preto aj trochu ta asm syntax

pracovat v 8 bitovom PIC s 64 bitovymi cislami nie je ziadna slava
ale pri troske namahy to ide 

:)

j.
-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of David Obdrzalek
Sent: Tuesday, May 20, 2014 11:49 AM
To: HW-news
Subject: Re: PIC a C

A proc to nepisete jako
if(byte&1)
{
... // tady bit je nahozeny
}
else
{
... // tady bit je shozeny
}

tedy bez toho porovnani na 1 nebo 0. Podminka je vyhodnocena jako int, ktery je bud 0 (nesplneno) anebo cokoli jineho (splneno), tak je to porovnani zbytecne, kdyz uz beztak tim byte&1 dostanete 0 nebo 1 (tj. neco jineho).
A jeste hrozi, ze casem zmenite aplikacni logiku a budete testovat vyssi bit, a pak uz if((byte&maska)==1) nebude splnene nikdy.

Uprimne, vzdycky, kdyz vidim takovehle explicitni porovnani na nulu anebo porovnani nahozeneho bitu s 1, tak zkoumam, co tim autor chtel specialniho rict, proc je dulezite, ze to je zrovna 1 a ne neco jineho nenuloveho. V C to je asi jako byste v Pascalu psali if A=TRUE ... else if A=FALSE (anebo, to uz jsem taky kolikrat videl: if A=TRUE then B=TRUE else B=FALSE;)

Chapu, ze se to muze mene zkusenym zdat jako snazsi k pochopeni, me to ale pripada zavadejici az osklive. Tady taky hrozi, ze tam napisete jen jedno rovnitko jako v Pascalu, a kdyz vlevo nebude vyraz ale promenna, tak se to tam priradi (u vyrazu aspon prekladac zarve, ale kdyz tam bude l-value tak to maximalne da warning, pokud vubec).


Ted me tak napada dotaz pro vetsi znalce - proc vlastne ma porovnani vyssi prioritu nez bitove operace? (ze ma porovnani vyssi prioritu nez logicke citim prirozene dobre, ale u bitovych se mi ted na prvni kuk zda, ze by spis bitove mely mit vyssi prioritu, aby se lip skladaly vyrazy. Protoze kdyz vysledkem porovnani je nula/nenula, tak delat s tim pak dalsi bitove operace mi prijde ponekud zvrhle)

D.O.

On 19 May 2014 at 12:02, Zuffa Jan wrote:
> 
> prekladac je V9.81
> a kedze teraz uz vsetko funguje ako ma
> nemusite ani hadat kde sa stala chyba :)
> tie zatvorky som tam urcite skusal ale momentalne tam nie
> su :( dakujem vsetkym za nakopnutie
> 
> 
> j.
> 
> -----Original Message-----
> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Jaromir
> Sukuba
> Sent: Monday, May 19, 2014 11:50 AM
> To: HW-news
> Subject: Re: PIC a C
> 
> Pocuj, "hitec", aku verziu tohto historickeho kompilatora mas? ;-)
> 
> Mne to vo verzii 9.83 a aj v XC8 (skus ho, v mojom testovacom priklade
> generuje XC8 v 1.3 asi polovicny kod) mi to v tom druhom pripade vzdy vychadza
> ako false, nie true - co aj napoveda logika a analyza kolegu Stengla.
> Samozrejme, blbost je ze tam nemas zatvorky, ako ostatni nacrtli. So
> zatvorkami to ide ako ma, overene v HiTech 9.83 a XC8 v 1.3
> 
> Dňa 19. mája 2014 11:09, Zuffa Jan <ZuffaJ na cgc.sk> napísal/a:
> > Ahojte,
> >
> > cez vikend som pri programovani PIC (HiTec)
> >
> > narazil na nasledovny problem:
> >
> > ak napisem podmienku if(byte & 1 == 1)
> >
> > pracuje vzdy zpravne podla toho aku hodnotu ma bit 0
> >
> > ak vsak napisem if(byte & 1 == 0) bez ohladu na bit 0 sa podmienka
> >
> > vzdy vyhodnoti ako true. Nieco som nepochopil alebo to takto skutocne 
> > funguje?
> >
> >
> >
> > j.
> >
> >
> > _______________________________________________
> > HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz 
> > http://list.hw.cz/mailman/listinfo/hw-list
> >
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



_______________________________________________
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