PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfache Port-Zuweisung -> Fehlermeldung



Jacob2
17.07.2008, 18:54
Hi,
ich compiliere mit dem avrgcc und wollte damit für den ATmega8535 folgenden Code compilieren:

#include <io.h>
#include "..\lib\mydefs.h"
#include "..\lib\lcd.h"
#include "..\lib\stepper.h"
#include "..\lib\rc5.h"
#include "..\lib\uart.h"
#include "..\lib\sensor.h"

int main(void)
{

//hier eigenen Programmcode einfügen
DDRA = 0xff;
PORTA = 0x00;
return 0;
}

Ich wollte PortA komplett auf Ausgang schalten und dann alle auf 0. Was hab ich falsch gemacht? Ich erhalte für beide Zeilen "invalid lvalue in assignment". Kann gut sein, dass ich einen Fehler gemacht habe, ist mein erstes mal "so" zu programmieren 8-[ (vorher vorgefertigte funktionen).

sternst
17.07.2008, 19:07
Und über die erste Zeile meckert er nicht?
Es muss <avr/io.h> heißen.

Jacob2
17.07.2008, 19:19
Wenn ich den "#include-Pfad" so ändere beschwert er sich darüber, die anderen Meldungen ändern sich aber auch(siehe Bild).

sternst
17.07.2008, 19:31
Dann stimmt etwas mit deiner avr-gcc-Installation nicht.
Du hast nicht zufällig selber an der Ordnerstruktur was geändert?
Such mal nach io.h und io8535.h. Wie lauten deren Pfade relativ zum Installationsordner von avr-gcc?

Ach, noch was:
In deinem ersten Post steht ATmega8535, wieso dann mcu=at90s8535?

Jacob2
17.07.2008, 19:37
io.h ist 2x vorhanden: C:\avrgcc\avr\include
C:\avrgcc\lib\avr-libc-20011029\include
io8535.h ist auch in den selben Ordnern jeweils 1x vorhanden

es wurde lediglich unter c:\avrgcc\ ein neuer Ordner mit Unterordnern angelegt.

sternst
17.07.2008, 19:50
avr-libc-20011029??? Soll das ein Scherz sein, oder hast du dich da vertippt?
Aber auch C:\avrgcc\avr\include stimmt schlicht nicht. Sie müssten in C:\avrgcc\avr\include\avr liegen. Hast du avr-gcc und avr-libc selber compiliert?

Jacob2
17.07.2008, 19:56
nee, hab ich nicht. den avrgcc hab ich von AATiS weis nicht ob die da was geändert haben, glaubs aber nicht.
avr-libc-20011029 ist kein scherz und kein verschreiber!

fhs
17.07.2008, 20:14
Hallo Jacob2,


...avr-libc-20011029 ist kein scherz und kein verschreiber!
dann also kein Verschreiber, aber doch ein bisschen ältlich... Versuche es mal mit einer der Versionen von Dezember 2007 (siehe http://www.mikrocontroller.net/articles/WinAVR ) -- oder evtl. (Achtung: umstritten!) auch mit einer 2008er Version, mit der ich selbst keine Erfahrung habe: http://winavr.sourceforge.net/ .

Gruß

Fred

sternst
17.07.2008, 20:27
Meiner Meinung nach kannst du einfach die neueste WinAVR-Version nehmen. Ich persönlich habe darin noch keinen Fehler gefunden, und es ist auch allgemein noch nichts Gravierendes gefunden worden.

Und noch zwei Tipps:
1) Such dir für deine eigenen Sachen ein anderes lauschiges Plätzchen. Packe es nicht mit in den Installationsordner.
2) Verwende für mcu genau den Typ, den du auch benutzt, nicht irgendetwas ähnliches.

Ceos
18.07.2008, 01:22
in der neuesten version sind ein paar registerbezeichungen geändert worden und "nur" die alte schreibweise wurde entfernt, also include <io.h> geht garnichtmehr ... in dem vorgänger hat er automatisch auf <avr/io.H> umgeleitet und ne warnung beim compilieren gemacht das geht nu nich mehr

Jacob2
18.07.2008, 09:31
Wo muss ich denn mcu ändern, es muss tatsächlich ATmega8535 sein (mit oder ohne großbuchstaben dann?)!
Den "lauschigen" Platz hat das Installationsprogramm von AATis gewählt! O:)
Muss ich die alte Version von WinAVR erst deinstallieren?

fhs
18.07.2008, 09:58
Hallo

..., es muss tatsächlich ATmega8535 sein ...
atmega8535, siehe auch http://www.nongnu.org/avr-libc/user-manual/index.html


Muss ich die alte Version von WinAVR erst deinstallieren?
Du kannst mehrere Versionen auf dem Rechner haben (in getrennten Unterverzeichnissen); andere hier haben von der Installation aber mehr Ahnung als ich -- warte mal ab, was noch an Antworten kommt!

Gruß

Fred

Jacob2
18.07.2008, 11:56
Der Code ist soweit richtig oder?
Hab jetzt WinAVR von 12/07 installiert, ich blick aber nicht durch wo man da compiliert!

sternst
18.07.2008, 16:33
Muss ich die alte Version von WinAVR erst deinstallieren?
Ist es überhaupt WinAVR, was du da bisher hattest?
Grundsätzlich kannst du mehrere WinAVR-Installationen parallel betreiben, für den Anfang würde ich den alten Kram aber runterschmeißen, und nur eine aktuelle Version benutzen.


Wo muss ich denn mcu ändern,...
Im Makefile.


Hab jetzt WinAVR von 12/07 installiert, ich blick aber nicht durch wo man da compiliert!
Deinem Screenshot zufolge hast du bisher auf der Konsole gearbeitet, das kannst du mit WinAVR genauso. Du kannst aber auch das beiliegende pn (Programmers Notepad) benutzen. Da ich das aber selber nicht benutze, kann ich dir nicht direkt sagen, wo man dort das Compilieren startet. Es sollte aber auch dort einen Menüpunkt oder einen Button geben, der vermutlich mit "Build" betitelt ist.
Oder du installierst dir zusätzlich noch das kostenlose AVR-Studio von Atmel, dann hast du auch eine "richtige" IDE.

Jacob2
18.07.2008, 18:08
Bisher hab ich mit "einfach nur" AVR-GCC gearbeitet. Dazu PonyProg und JFE. Beim Programmers Notepad gibt es einen Menüeintrag namens "Make all" .
Jetzt noch die Frage: Was braucht man alles zum compilieren: *.c-Datei mit Hauptcode, Makefile, Lib-Dateien?
Programmers Notepad will nämlich *.elf oder sowas ähnliches!?
Bin mir sicher, das steht irgendwo schön ausführlich, ich finds aber grad nicht.
Deswegen konnt ich jetzt noch nicht den ganz oben genannten Code ausprobieren.

sternst
18.07.2008, 18:41
Bisher hab ich mit "einfach nur" AVR-GCC gearbeitet. Dazu PonyProg und JFE.
WinAVR ist nur eine Zusammenstellung mehrerer Programme, zu denen auch als Compiler der avr-gcc gehört. Programmers-Notepad ist nur ein Frontend dafür. Wie ich bereits sagte, kannst du es auch genau so machen, wie bisher, wenn du das möchtest.


Jetzt noch die Frage: Was braucht man alles zum compilieren: *.c-Datei mit Hauptcode, Makefile, Lib-Dateien?
Ist von dir abhängig. Notfalls tut es auch eine einzelne C-Datei ohne Makefile. Ist dann nur ziemlich lästig, immer die ganzen Optionen von Hand eintippen zu müssen.


Programmers Notepad will nämlich *.elf oder sowas ähnliches!?
Das ELF-File ist das Endergebnis des ganzen Compilierprozesses. Wahrscheinlich erzeugt dein Makefile noch das alte Format. Erstelle ein neues Makefile. MFILE unterstützt dich dabei.

Jacob2
18.07.2008, 20:20
Danke! ich hab mir jetzt AVR-Studio geladen und mit dem gehts sehr einfach über's Menü!
Man braucht sich nicht um Makefiles kümmern. Flashen tu ich immernoch mit PonyProg, das ist für mich ein "gesunder Mix" zwischen WinAVR/AVR-Studio und einzelne Software (WinAVR bzw. AVR-Studio hat doch auch ein Prog zum Flashen oder?)!

sternst
18.07.2008, 20:28
WinAVR bzw. AVR-Studio hat doch auch ein Prog zum Flashen oder?
Klar. Zum einen kann AVR-Studio selber Flashen, zum anderen ist bei WinAVR avrdude dabei, was aber ein reines Command-Line-Tool ist.

Besserwessi
18.07.2008, 23:19
Direkt von AVRStudio kann man nur relativ weniger Pragrammierer benutzen. Im Wesenlichen sind das die neueren von Atmel. etwa ab dem STK500. Ein externer Programmierer wie Ponyporg oder avrdude geht aber auch.