CodeVisionAVR - co robię nie tak?

Sep 23, 2004 7 Replies

Witam.



Czy może ktoś podpowiedzić mi co jest nie tak w moim krótkim kodzie w CodeVisionAVR. Kod kompiluje się bezbłędnie, konfiguracja jest ok, dlaczego jednak program nie działa. Czy ktoś może sprawdzić to u siebie na komputerze i AVRe, bo wydaje mi się że tutaj źle kompiluje CodeVisionAVR.



... char c; char buffer[32]; char *s; ... while (1) { //Odbiór stringa s=buffer; while(c=getchar()!=0 ){ *s=c; s++; } *s=0; //Wysłanie stringa s=buffer; while( *s != 0 ){ putchar(*s); s++; } } }


Z góry dzięki za odpowiedź bo męczę się chyba nad tym juz z tydzień. Pozdrawiam.


Pinarczuk napisał(a):

powinno być: while ( (c=getchar()) != 0 ) przy założeniu że chcesz zapisać pobrany znak do zmiennej c i porównać z zerem, no i jesteś pewien, że ostatni znak będzie zerem

Pozdrawiam czerstwy

Pinarczuk wrote on 23 Sep 2004 18:50:56 +0200: [.....]

Kompilator to chyba kompiluje poprawnie, problem w tym że nie jest zbyt dobry ponieważ nie wyrzuca ostrzeżenia na takie coś:

Występuje tutaj niejednoznaczność i kompilator generuje kod taki jak to przewidzieli jego twórcy aczkolwiek nie taki jakiego Ty byś oczekiwał. :-) Jak mniemam ten wiersz powinien wyglądać tak: while ((c = getchar()) != 0) { a ze względu na brak nawiasów kompilator prawdopodobnie potraktował go tak: while (c = (getchar() != 0)) { Przyzwoity kompilator natychmiast wyrzuci ostrzeżenie w takim miejscu.

Tydzień? Przez ten czas możnaby spokojnie przeczytać kilka pierwszych rozdziałów jakiejś dobrej książki o C gdzie są opisane takie rzeczy. :-)

Regards, /J.D.

while(1) { s=buffer; while(c=getchar()) *s++ = c; *s = 0; ...

Krzysiek

dokladnie; polecam koledze nauke _podstaw_ programowania w C; /oczywiscie na 80486 'lub wyzsze' w np. bc a nie na avr w cvavr...

poza tym: cvavr ma code wizarda, sporo przykladow jest na sieci, ...

On Fri, 24 Sep 2004 16:54:29 +0200, "Q" snipped-for-privacy@gazeta.gov.pl> wrote: [.....]

C to jest C. Poprawnie napisany kod w ANSI C [*] da się skompilować praktycznie każdym współczesnym kompilatorem i będzie on działał poprawnie. Oczywiście chodzi o kod nie wykorzystujący jakichś cech lub bibliotek systemowych specyficznych dla danej architektury. Generalnie należy nauczyć się odróżniać język C od kompilatora tego języka oraz od bibliotek systemowych. Aha, no i warto również nauczyć się odróżniać kompilator i linker od IDE. :-)

[*] Oczywiście są inne (tzn. nowsze) standardy C, ale ANSI C jest obecnie "najmniejszym wspólnym mianownikiem"

Regards, /J.D.

Pomijajac co koledzy slusznie wytkneli, to jeszcze: a) czy na pewno chcesz zeby program wczytywal dane az do znaku 00h ? Trudno taki wyslac z peceta.

b) przyzwoitosc nakazuje sprawdzac czy bufor sie nie przepelnia ..

J.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required