www.mikrocontroller.net

Forum: Compiler & IDEs [C] Probleme beim auslesen von Strings


Autor: SinoTech (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin gerade dabei mich mit Mikrocontrollern zu befassen und (nachdem 
die Grundlagen funktionieren) würde mir gerne ein paar Debug-Ausgaben 
über die UART Schnittstelle an den PC senden. Die Kommunikation 
funktioniert auch im großen und ganzen, nur kommt von den Strings die 
ich im Programm angegeben habe nur Müll an. Ich habe verschiedene 
Möglichkeiten ausprobiert (Im flash speichern und auslesen, String einem 
globalen/lokalen pointer zuweisen, ...) aber das einzige was 
funktioniert hat war:

- gcc-4-1-2: Byteweises befüllen eines Puffers, Puffer mit strcpy füllen
- gcc-4.3.3: Byteweises befüllen eines Puffers
- gcc-3.4.5: Byteweises befüllen eines Puffers

Als uM benutze ich den ATmega8, als Programmer den mySmartUSB MK 2 von 
myAvr.de (der reicht auch die Daten vom UART durch).
Den Code habe ich an das Post angehängt. Bin für jede Hilfe dankbar, 
denn mittlerweile weiß ich wirklich nicht mehr was ich machen soll.

Cheers,

Sino

Autor: SinoTech (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hätte ich beinahe vergessen:

1. Die Ausgabe auf dem Terminal sieht etwa so aus:

   4????'mnopqr

   Es werden also nur die Zeichenketten c5 und c6 korrekt gesendet

2. Gebaut wurde unter Linux mit gcc-4.1.2:

   avr-gcc -mmcu=atmega8 main.c -mmcu=atmega8 -c -o main.o
   avr-gcc main.o -L/usr/lib/binutils/avr/2.19.1/ 
-Wl,-Map=main.elf.map,--cref -o main.elf


Danke schonmal im voraus.

Cheers,

Sino

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hatte mit den flash sachen auch probleme ...

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

das hatte mir geholfen


C4 ist ja ein pointer .. das müsste auch etwas anders behandelt werden
ich tu mich mit zeigern auch schwer ^^

Autor: Thomas Weyhrauch (thomas100)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Code ist so eigentlich richtig.

Zur Sicherheit hab ich ihn mal in meinen Atmega168 geladen und da läuft 
er.
(Ich hab allerdings keine serielle Schnittstelle dran sondern hab mit 
einem JTAG-ICE überprüft, ob die Daten im Senderegister ankommen)

Auch im Simulator das gleiche Ergebnis.

Hast du vielleicht Probleme mit der Frequenz, dass du die Baudrate nicht 
triffst und Samplefehler auftreten?
Parität falsch gewählt? Anzahl Stop-Bits falsch?

gast schrieb:
> C4 ist ja ein pointer .. das müsste auch etwas anders behandelt werden

C4 ist ein Pointerarray. Sobald du mit dem Indexoperator auf so ein 
Array zugreifst, erhälst du den Inhalt, in dem Fall also ein char.



Gruß
Thomas

Autor: SinoTech (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke für eure Antworten.
Also der Code an sich scheint in Ordnung zu sein. Ich habe ihn jetzt mal 
unter Windows mit "MyAVR Workpad Plus" (war als Demo bei meinem 
Anfängerboard dabei :-) ) gebaut und dann funktioniert es.
Dachte dann es würde evtl. an den Settings liegen mit denen ich den 
avr-gcc unter Linux gebaut habe, und habe mir mal WinAVR installiert 
(benutzt den Win32 Port des gcc's). Kommt aber auf's gleiche raus als 
wenn ich unter Linux arbeite.

@Thomas
Benutzt du den gcc zum bauen? In dem Fall würde ich mir die Tage einen 
anderen Controller besorgen und testen, evtl. hat der gcc ja Probleme 
mit dem ATmega8.

Cheers,

Sino

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>In dem Fall würde ich mir die Tage einen
>anderen Controller besorgen und testen, evtl. hat der gcc ja Probleme
>mit dem ATmega8.

Wenn, dann hätte er mit allen AVR's Probleme. Unter Linux solltest du 
sicherstellen, daß du eine fehlerfreie avr-gcc-Version benutzt, die 
mitgelieferten avr-packages sind nicht immmer auf dem neuesten Stand.
Die aktuelle WinAVR-Version ist aber in Ordnung.

Und wenn myAVR das Programm, ohne zu meckern, übersetzt, dann nutzt das 
auch einen avr-gcc. Schau doch mal nach, welche Version das ist.

Oliver

Autor: SinoTech (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab es jetzt endlich zum laufen bekommen. Fehler war das ich die 
Ausgabedatei vom letzten Befehl auf den ATmega brennen wollte:

1. avr-gcc -mmcu=atmega8 main.c -mmcu=atmega8 -c -o main.o
2. avr-gcc main.o -L/usr/lib/binutils/avr/2.19.1/ 
-Wl,-Map=main.elf.map,--cref -o main.elf

Bin davon ausgegangen das "main.elf" dann das fertige binary ist und ich 
es ohne Änderung direkt mit avrdude brennen kann.

avrdude -c avr910 -p m8 -P COM7 -v -U flash:w:main.hex

Da es aber ins flash geschrieben wird, muss man anscheinend vorhher die 
.eeprom Section rauswerfen (klingt logisch ;-) ):

avr-objcopy -O ihex -R .eeprom main.elf main.hex

Dann funktioniert es auch :-)

Danke nochmal für eure Antworten und ein schönes Wochenende.

Cheers,

Sino

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver schrieb:

> Wenn, dann hätte er mit allen AVR's Probleme. Unter Linux solltest du
> sicherstellen, daß du eine fehlerfreie avr-gcc-Version benutzt, die
> mitgelieferten avr-packages sind nicht immmer auf dem neuesten Stand.

Neuer ist nicht unbedingt besser...
> Die aktuelle WinAVR-Version ist aber in Ordnung.

Auch WinAVR 20090313/20081205 hat kleine Bugs an Bord.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Auch WinAVR 20090313/20081205 hat kleine Bugs an Bord.

Schon, aber keine, die sich in den paar Zeilen des o.a. Programms 
bemerkbar machen.

Oliver

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.