www.mikrocontroller.net

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


Autor: Bastian Göricke (bastian23)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: !Aufreger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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".

Autor: Mats Burmester (mhb)
Datum:

Bewertung
0 lesenswert
nicht 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 :
//pseudocode
uart_puts_(const char test[] const uint8_t i)
{
uint8_t j;
while (j<=i)
 {
  uart_putc(test[j]);
  j++;
 }
}
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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mats Burmester wrote:

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

Wäre aber besser gewesen.


>
//pseudocode
> uart_puts_(const char test[] const uint8_t i)
> {
> uint8_t j;
> while (j<=i)
>  {
>   uart_putc(test[j]);
>   j++;
>  }
> }
> 

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':
uart_puts(const char *s)
{
  char c;

  while ((c = *s++) != 0)
    uart_putc(c);
}

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.

Autor: Mats Burmester (mhb)
Datum:

Bewertung
0 lesenswert
nicht 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 :
char __attribute__ ((progmem)) inbuff[] = "none";


Grüße

Mats

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.