von avr-gcc nach WinAVR andere Bibo?

OP #424185
Lesenswert?
• ▲
▼
Hallo,
2 Jahre habe ich mit avr-gcc (GCC) 3.4.4 unter Linux kompiliert und
UART-Kommunikationsroutinen aus/ähnlich avr-glibc (siehe Anhang)
verwendet.Bislang ohne Probleme.
Nun soll das ganze wegen Wechsel auf AVRStudio4 das Ganze
mit WinAVR-20060421 kompiliert werden. Sollte doch das gleiche Ergebnis
produzieren? Tut es aber nicht, die routine q_pressed() (siehe Anhang) ,
die ein über RS232 gesendetes 'q' erkennt liefert jetzt !=0 wenn es kein 
'q'
ist.

Gruß
joh
Angehängte Dateien:
Gast #424382
Lesenswert?
• ▲
▼
Kein Wunder, wenn uart1RxDataLength_grn==0, dann wird kein Returnwert 
festgelegt. Es ist also dem Zufall überlassen, was das entsprechende 
Register zu diesem Zeitpunkt enthielt.

Ich würde das so ändern:

u08 q_pressed(void) {
  u08 uc_rt;

  if (uart1RxDataLength_grn!=0) {  //(nur) wenn etwas von UART kam...
    uc_rt=uart1Get();      //dann Zeichen holen
    if (uc_rt==0x71) {      //wenn 'q' dann...
      uart1FlushRxBuffer();    //
      return 1;        //true liefern
    }
  }
  return 0;        //sonst false
}

So wird in beiden False-Fällen 0 zurückgeliefert.
OP #424996
Lesenswert?
• ▲
▼
@Jörg: die einzigen Warnungen die ich bekommen (wenn man nicht gerade
den C99 compat. Mode einschaltet) beziehen sich auf
...
fdevopen(uart1Put, uart_getchar_JW);
...

warning: passing arg 1 of `fdevopen' from incompatible pointer type
warning: passing arg 2 of `fdevopen' from incompatible pointer type

if(var == 'ASCIIzeichen') ist viel informativer, ok :)




@SiO2 ((ist das nicht Sand?  :))
auf der WinAVR Seite ist es avr-libc 1.4.4 auf der liux-Seite sicher 
älter




@chrisg
da hast Du wohl recht, heute abend folgt der Targettest

if(daranhatsgelegen==TRUE) {
  Asche_auf_mein_Haupt();
}
else ...
Moderator Persönliche Seite #425047
Lesenswert?
• ▲
▼
Jörg Haas wrote:

> @Jörg: die einzigen Warnungen die ich bekommen (wenn man nicht
> gerade den C99 compat. Mode einschaltet) beziehen sich auf

> warning: passing arg 1 of `fdevopen' from incompatible pointer type
> warning: passing arg 2 of `fdevopen' from incompatible pointer type

OK, du solltest die Argumente für die backend-Funktionen mal anpassen,
das hat sich mit avr-libc 1.4 geändert (die bekommen jetzt noch ein
FILE * mit übergeben).  Die Interrupthandler kannst du bei der
Gelegenheit gleich noch von SIGNAL() auf ISR() und auf die neuen
Vektornamen umbauen.

Wäre übrigens schön, wenn du solche Beispiele einigermaßen
compilierfähig anbieten würdest, so musste ich mir selbst die Arbeit
machen (include-Dateien, privater u08-Typ, rausfinden, welcher
Prozessor gemeint ist, ...).

Das sind wirklich deine einzigen Warnungen?  Ich bekomme:
1
Anhang.c: In function 'uart_putstr':
2
Anhang.c:213: warning: pointer targets in initialization differ in signedness
3
Anhang.c: In function 'main':
4
Anhang.c:342: warning: passing argument 1 of 'fdevopen' from incompatible pointer type
5
Anhang.c:342: warning: passing argument 2 of 'fdevopen' from incompatible pointer type
6
Anhang.c:351: warning: control reaches end of non-void function
7
Anhang.c: In function 'q_pressed':
8
Anhang.c:333: warning: control reaches end of non-void function

Das erste ist ein char * vs. uint8_t *.  Diese Warnung hat der GCC 3.x
möglicherweise wirklich noch nicht gebracht.

Das zweite kennst du schon.  Das "reaches end of non-void function"
ist dein verkürztes main(), OK.

Die dritte Warnung ist genau die, die ich meinte.  Du fällst in
q_pressed() ,,unten durch'', und das ist dem Compiler sehr wohl eine
Warnung wert (meiner Meinung nach auch bereits dem GCC 3.x, aber ich
kann hier nur noch 4.x testen).
Moderator Persönliche Seite #425664
Lesenswert?
• ▲
▼
Jörg Haas wrote:

> ....ja, das war's wohl. Zukünftig sind mir
> Kompilerwarnungen einen Blick mehr wert.

Das ist immer ein guter Vorsatz. ;-)

> Sieht der Idealfall also nun so aus, daß ich ein unter
> Linux compilierbares Projekt 1:1 unter WinAVR(AVRStudio)
> übersetzen kann?

Ja, allerdings sollte zumindest die minor version der
Bibliothek sinnvollerweise zwischen beiden gleich sein,
also avr-libc 1.4.x auf beiden.  Wenn du auf Kompatibilität
zwischen 1.2.x achten musst, wird's aufwändiger.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren