[elektro] megint C
Ábrahám Gábor
agabor2 at freemail.hu
Tue Dec 4 11:19:48 CET 2012
A feltételes értékadás valami "változó = kif1 ? kif2 : kif3;" alakú.
A szerkezet úgy működik, hogy először kiértékeli a kif1 kifejezést. Ha ennek
értéke
nem nulla (igaz), akkor a kif2 kiértékelése következik, egyébként pedig a
kif3 kiértékelése.
A program kif2 és kif3 közül csak az egyiket értékeli ki, és ez lesz a
feltételes kifejezés értéke.
Ezért működik mindkettő, bár SDO=kiki&&1?0:1; a jobb szerintem.
Az, hogy SDO billeg vagy sem, az a deklarálásától, meg az optimalizálástól
függ.
SCLK billeg?
Ha megnézed a rutinodat
void DataOut(BYTE kimegy)
{
int nCount = 8;
char kiki;
SCLK = 0;
kiki = kimegy;
while(nCount--)
{
(kiki && 1) ? SDO = 0 : SDO = 1;
SCLK = 1;
kiki = (kiki >> 1);
SCLK = 0;
}
SCLK a ciklus végén garantáltan 0, nCount és kiki értékétől függetlenül.
Ha nem volatile, csak egy sima stack változó, miért kéne minden ciklusban
kétszer értéket adni neki?
Gábor
----- Eredeti üzenet -----
From: Skandar Graun
Sent: Tuesday, December 04, 2012 10:53 AM
To: elektro at tesla.hu
Subject: Re: [elektro] megint C
Na, pudingpróba történt.
Az Arnold verziója syntax error, nem keresgéltem most benne.
A zárójelbe tett értékekkel jó és gyors." (kiki&&1)?(SDO=0):(SDO=1);"
A "SDO=kiki&&1?0:1;" módon lefordult, elindult, de kétszer olyan hosszú
futási idővel bír.
Ellenben az érdekes az, hogy a szkópon meg nem billeg az SDO...
Beírtam a kiki-be 0x0055-öt, de nem látom
Most vagy a shiftelésem ad rossz értéket, vagy valami oknál fogva a
kiértékelés rossz.
Az SDO-t már teszteltem
2012. december 4. 10:39 potyo írta, <potyo.ada at gmail.com>:
> (kiki&&1)?(SDO=0):(SDO=1);
-----------------------------------------
elektro[-flame|-etc]
-----
A(z) üzenetben nem található vírus.
Ellenőrizte: AVG - www.avg.com
Verzió: 2012.0.2221 / Vírus adatbázis: 2634/5435 - Kiadás dátuma:
2012.12.03.
More information about the Elektro
mailing list