Elektroniczne potencjometry

A widzisz, nie trzeba pisać zawile, można bardzo prosto. W każdym razie jest ogromny wybór stylu kodowania, czego w innych (hmm...przemilcze ;-) ) jezykach nie ma.

Poza tym kompilatorowi czasami dobrze służy taka _papka_. Oczywiście dobrze ze względu na wielkość/szybkość kodu wynikowego. Można wpływać na efekt pracy kompilatora - czyż to nie piękne ;-)

Mniłego wieczoru i....czekam ;-) __ Pzd, Irek.N.

Reply to
Ireneusz Niemczyk
Loading thread data ...

Mon, 27 Oct 2003 18:48:07 +0100 jednostka biologiczna o nazwie Ireneusz Niemczyk snipped-for-privacy@powszukaj.w.archiwum> wyslala do portu 119 jednego z serwerow news nastepujace dane:

No przepraszam, ale IMHO napsanie np for (n=0;n<10;n++)costam();

da ten sam kod wynikowy co for (n=0;n<10;n++) { costam(); }

Tak samo jak napisanie:

#include<stdio.h>

#define R return #define P printf #define F for #define I if #define V void #define K int #define C char

K bm[20];static K an[8]={0111,0222,0333,07,070,0700,0124,0421};K sr(K pl,K sm,K a,K b,K p){K i,sc;K bs=-300;F(i=0;i<8;i++)I(((p>>(sm^9))&an[i])==an[i])R(-12+pl); I((p>>18)==0777)R(0);F(i=(1<<18)|(1<<sm);i<(1<<27); i=i<<1){I(i&p)continue;sc=-sr(pl+1,sm^9,-b,-a,p|i);I(sc>bs){bs=sc;bm[pl]=i;} I(sc>=b)break;I(sc>a)a=sc;}R(bs);}V sh(K p){K i;C A[20]="- - -\n- -

-\n- -

-\n";F(i=0;i<18;i++)I((1<<i)&p)A[(i%9)*2]=(i>8)?'O':'X';P("\n\n%s",A);}K main(V){K c=9;K p=0;F(;(p>>18)<0777;sh(p|=bm[1]))sr(1,c^=9,-300,300,p);R 0;}

Da taki sam efekt jak w postaci "rozwinietej" :-))) BTW: Ten program powyzej sie nawet kompiluje i dziala :-)))

Reply to
BLE_Maciek

BLE_Maciek napisal(a):

Przedpiscy raczej chodzilo o instrukcje typu: ?:, ktore moga odrzucac nieprzyzwyczajonych, a ktore upraszczaja czesto zycie.

Reply to
Marcin E. Hamerla

Mon, 27 Oct 2003 19:13:20 +0100 jednostka biologiczna o nazwie Marcin E. Hamerla snipped-for-privacy@Xpro.Xonet.Xpl.remove_X> wyslala do portu 119 jednego z serwerow news nastepujace dane:

No tak ale uzycie "krotkiego" if'a (?:) nie daje chyba raczej krotszego kodu wynikowego niz zwykly if ? To by bylo nielogiczne.

Reply to
BLE_Maciek

Mon, 27 Oct 2003 19:28:36 +0100 jednostka biologiczna o nazwie "Tomasz Gumny" snipped-for-privacy@idn.org.pl> wyslala do portu 119 jednego z serwerow news nastepujace dane:

Rany, co to za tragiczne kompilatory byly ? Mam nadzieje ze nie gcc ?

Reply to
BLE_Maciek

On Mon, 27 Oct 2003 16:21:04 +0100, BLE_Maciek <i80c586@cyberspace_NO_SPAM_.org> wrote: [.....]

IMO czytelniejsze to wygląda tak:

void mcp42(unsigned char command, unsigned char data_) { char i;

CSPOT = 0; for (i = 0; i < 8; ++i) { SDA = (command & 0x80) ? 1 : 0; command <<= 1; SCL = 1; SCL = 0; }

for (i = 0; i < 8; ++i) { SDA = (data_ & 0x80) ? 1 : 0; data_ <<= 1; SCL = 1; SCL = 0; } CSPOT = 1; }

Trzeba sobie tylko ewentualnie dobrać ulubioną szerokość tabulatora i sposób położenia nawiasów grupujących instrukcje.

A tam od razu lubić. Znać trzeba.

Znam lepsze języki (IMO oczywiście), chociaż niezbyt pasują do zastosowań embedded. Np. Eiffel.

Regards, /J.D.

Reply to
Jan Dubiec

Pewnie dlatego, że w przeciwieństwie do zwykłego if-a, wyrażenie ?: zwraca wartość wyrażenia które zostało wykonane w wyniku sprawdzenia warunku. ?: raczej nie jest przeznaczone do sterowania "przepływem sterowania". ;-)

Zgadza się. Ponadto ciąg if-ów jest *troszeczkę* szybszy.

Na pecetach, też tak jest. Na pewno pod gcc, cl.exe nie sprawdzałem, ale pewnie jest tak samo.

Regards, /J.D.

Reply to
Jan Dubiec

U mnie daje to samo - ale wygodniej mi ?: stosowac w przypisaniach :-)

IMHO jak dobry kompilator i wartosci case 'poukladane' to powinien zrobic tablice skokow. No, ale uC to uC i nie zawsze mozna...

Reply to
jerry1111
27 Oct 2003 20:51:07 +0100 jednostka biologiczna o nazwie Jan Dubiec snipped-for-privacy@slackware.pl wyslala do portu 119 jednego z serwerow news nastepujace dane:

No tak wykopsanej konstrukcji to nie znalem :-) I nie stosowalbym :-)))

Nie uzywam tabulatorow, jak widziales w mojej wersji tej funkcji, uzywam spacji. Co do nawiasow to preferuje tak:

for (n=0;n<50;n++) { costam(); costam_jeszcze(); } Jest bardziej przejrzyscie :-P

Reply to
BLE_Maciek

Ale to jest właśnie typowy sposób użycia tej instrukcji/konstrukcji. :-)

Regards, /J.D.

Reply to
Jan Dubiec

Marcin E. Hamerla snipped-for-privacy@Xpro.Xonet.Xpl.remove_X> napisal(a):

A dokladnie np cos takiego: (command&0x80)?(SDA=1):(SDA=0); to juz sie domyslam ze robi za if (command&0x80)=true to sda=1 a false to sda=0

ale co to robi? command<<=1;

albo to? (data_&0x80)?(SDA=1):(SDA=0); data_<<=1;SCL=1;SCL=0;} CSPOT=1; tutaj domyslam sie ze & to AND a ? co to jest?

'Tresciwe' te wyrazenia ale strasznie to pokrecone i trudne do analizy.

Pozdr Janusz

Reply to
Janusz_k

Jest mniej więcej tak jak napisałeś, chociaż typowo powyższą instrukcję zapisuje się tak: SDA = (command & 0x80) ? 1 : 0; A w zasadzie, aby było bardziej czytelnie, to powinno być tak: SDA = ((command & 0x80) != 0) ? 1 : 0; Czyli jeśli wartość wyrażenia w nawiasach jest różna od 0, to przypisz zmiennej SDA wartość 1, a w przeciwnym wypadku przypisz wartość 0.

To samo co: command = command << 1; czyli przesuwa bity w zmiennej command o jedną pozycję w lewo

A tutaj masz w jednym wierszu zapisanych 5 instrukcji. :-) sposób działania pierwszej i drugiej podałem wyżej.

Kwestia przyzwyczajenia. IMO to lepsze niż grzebanie się w opcodach assemblera, w szczególności assemblera uC który dopiero poznajesz. Weź pierwszą z brzegu książkę do C i szystko stanie się jasne. A jak chcesz zobaczyć pokręcone i trudne do analizy wyrażenia, to poszukaj w Sieci informacji na temat języka o wdzięcznej nazwie Brainfuck. :-)

Regards, /J.D.

Reply to
Jan Dubiec
28 Oct 2003 06:51:37 +0100 jednostka biologiczna o nazwie Jan Dubiec snipped-for-privacy@slackware.pl wyslala do portu 119 jednego z serwerow news nastepujace dane:

Jednak wolalbym if'a :-)

Reply to
BLE_Maciek

a jaka polecacie ksiazke do nauki C ?

Reply to
DJ MuNiO

Użytkownik DJ MuNiO napisał:

?? Może elegancko jest założyć własny temat ??

Reply to
Kaldachar

To akurat jest czyste i podstawowe C.

<< jest operatorem przesuniecia bitowego - tu lewo. Czyli np 2<<3 wynosi 16.

Konstrukcja: A operator= B jest skroconym zapisem od A = A operator B Zazwyczaj sluzy do np a+=2.

J.

Reply to
J.F.

LOL, troll mode on? ;-)))

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

Wed, 29 Oct 2003 19:19:22 +0100 jednostka biologiczna o nazwie "Piotr Wyderski" snipped-for-privacy@ll.replies.to.the.group> wyslala do portu

119 jednego z serwerow news nastepujace dane:

Flame mode on ;-))

Reply to
BLE_Maciek

Tue, 28 Oct 2003 20:47:16 +0100 jednostka biologiczna o nazwie "DJ MuNiO" snipped-for-privacy@wp.pl wyslala do portu 119 jednego z serwerow news nastepujace dane:

Ja zaczynalem od ksiazki Andrzeja Kloca tytul zdaje sie "Podstawy jezyka C" czy cos takiego. A potem to juz poszlo ... :-)

Reply to
BLE_Maciek

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.