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
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
ich hatte mit den flash sachen auch probleme ... http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29 das hatte mir geholfen C4 ist ja ein pointer .. das müsste auch etwas anders behandelt werden ich tu mich mit zeigern auch schwer ^^
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
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
>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
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
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.
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.