Forum: Compiler & IDEs UART lib von P. Fleury mit AVR-GCC 4.1.2?


von Bastian G. (bastian23)


Lesenswert?

Hallo,

funktioniert die UART Library von P. Fleury ohne Änderungen im Code mit 
dem AVR-GCC 4.1.2. Compiler?

Sind SIGNAL() anstatt ISR() hierbei noch gültig? Ich erhalte die 
Warnung:
c:/winavr-20070525/bin/../avr/include/avr/signal.h:36:2: warning: 
#warning "This header file is obsolete.  Use <avr/interrupt.h>."

9600 baud bei 16 MHz auf einem MEGA 8 sollten eigentlich funktionieren. 
Mit einem eigenen kleinen Testcode konnte ich Zeichen im HyperTerminal 
empfangen, mit der lib von Peter jedoch nicht.

Grüße,
Bastian

von !Aufreger (Gast)


Lesenswert?

>funktioniert die UART Library von P. Fleury ohne Änderungen im Code mit
>dem AVR-GCC 4.1.2. Compiler?

Ja.

>Sind SIGNAL() anstatt ISR() hierbei noch gültig?

Ja.


>Ich erhalte die Warnung: [...]

Und?

>9600 baud bei 16 MHz auf einem MEGA 8 sollten eigentlich funktionieren.

Ja.

>Mit einem eigenen kleinen Testcode konnte ich Zeichen im HyperTerminal
>empfangen, mit der lib von Peter jedoch nicht.

Ergo: verzichte auf die "lib".

von Mats B. (mhb)


Lesenswert?

Hallo,

ich scheue mich einen neuen Thread auf zu machen, denn ich benutze 
ebenfalls P. Fleury's code mit AVR-GCC allerdings einem

Mega32 und einem Mega128.

Das_Problem :


beim 32er kann ich zwar über das Hyperterminal Daten empfangen aber 
nicht an den µP senden.(mit P.Fleury  code)
Hier habe ich auch schon die SIGNAL() gegen ISR() ausgetauscht und auch 
die Vektorbezeichnungen selber geändert. kein Erfolg

Der 128er macht mit den meißten Codes gar nichts(u.a. auch nichts mit 
P.Fleury)
ich habe einen code gebastelt, der immerhin einzelne Ascii-zeichen 
senden kann allerdings keine strings. Eigentlich sollte es ja kein 
problem sein mit einer primitiven while schleife :
1
//pseudocode
2
uart_puts_(const char test[] const uint8_t i)
3
{
4
uint8_t j;
5
while (j<=i)
6
 {
7
  uart_putc(test[j]);
8
  j++;
9
 }
10
}
dann auch stings zu senden, er tut es aber nicht.

Kann mir bitte jemand helfen oder erklären was ich noch sonst wo 
einstellen muss(z.B. im makefile) bzw. für extra declarationen machen 
muss (a la: volatile).
Oder mir sagen das ich einen ganz banalen Denkfehler mache irgendwo.

Und ja, ich weiß, dass da noch codes fehlen. Ich habe die gerade nicht 
da, ich werde die heute Nachmittag noch nachreichen(samt makefile).


@ bastian
es wäre nett wenn du deinen code mit dem du es zum laufen bekommen hast 
für deinen mega8 mir nochmal zukommen lassen könntest.

danke und Grüße

Mats

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mats Burmester wrote:

> ich scheue mich einen neuen Thread auf zu machen, ...

Wäre aber besser gewesen.


>
1
//pseudocode
2
> uart_puts_(const char test[] const uint8_t i)
3
> {
4
> uint8_t j;
5
> while (j<=i)
6
>  {
7
>   uart_putc(test[j]);
8
>   j++;
9
>  }
10
> }
11
>

Vom vergessenen Komma mal abgesehen: du solltest dringend
Compilerwarnungen einschalten.  Dann würde er dir nämlich sowas
sagen wie `j ... possibly used uninitialized'.

Wenn das aber normale C-Strings sind, braucht man die Längen-
information gar nicht separat mitgeben, sondern nutzt das
abschließende Zeichen '\0':
1
uart_puts(const char *s)
2
{
3
  char c;
4
5
  while ((c = *s++) != 0)
6
    uart_putc(c);
7
}

An manche der Kurzschreibweisen von C (Zuweisung innerhalb eines
Vergleichs, Pre-/Post-Increment oder -Decrement) solltest du dich
einfach lieber gewöhnen, da sie gängig sind und nicht unbedingt
als `obfuscation' gelten.  Auch die Dualität zwischen pointer und
array sollte man verstanden haben.

von Mats B. (mhb)


Lesenswert?

hi,

danke auf jenden Fall für deine schnelle Hilfe ich habe eben 
herausgefunden woran es lag, ich habe die chars falsch initialisiert man 
soltle sie über sowas initialisieren :
1
char __attribute__ ((progmem)) inbuff[] = "none";


Grüße

Mats

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.