Forum: Compiler & IDEs Fragen: WinAVR, enum u.a.


von Sebastian Fahrner (Gast)


Lesenswert?

Hallo,

habe jetzt erfolgreich auf WinAVR umgerüstet. Sieht sehr gut aus.

Allerdings habe ich noch ein paar Problemchen dabei, meine alten 
3.0.2-Programme zu portieren:


1. Für einen switch() hatte ich folgende Aufzählung angelegt:

enum HAUPTSTATUS   { HS_IDLE = 0,
                     HS_RESET_0, HS_RESET_1, ...
                   } ;

Hat unser 3.0.2 einwandfrei geklappt, aber 3.3 bringt mir folgenden 
Fehler:

WARNING - symbol 'HAUPTSTATUS' refers to non-existing type => 
@s8;eHS_IDLE:0,HS_RESET_0:1,  ...

Was stimmt denn damit nicht? Wo kann man denn bei enum den Typ angeben?


2. Das makefile weigert sich hartnäckig, mir die Meldung "Errors: none" 
auszugeben (für AVR-Studio). Diese Meldung sollte doch durch $(FINISH) 
ausgegeben werden. Aber obwohl dieses aufgerufen werden sollte, kommt 
die Meldung nicht?!
Ich habe jetzt halt mal den Text von $(END) geändert, aber ich wüßte 
doch gerne, was das Problem ist.

von Peter Fleury (Gast)


Lesenswert?

1.
Kommt diese Fehlermeldung vom Compiler oder von Objtool (das Tool das 
Cof File zum Debuggen in AVRStudio erzeugt) ?
Wird ein hex file erzeugt ?

2. Das Beispiel \winavr\sample\Makefile hat leider einen Fehler: Vor 
$(FINISH) muss man ein TAB eingeben, nicht Space.

.PHONY : finish
finished:
<TAB>$(FINISH)
^
TAB anstelle Space

von Sebastian Fahrner (Gast)


Lesenswert?

Zu 1.:

Wenn mich nicht alles täuscht, ist es das objtool.
Es steht die Meldung
"objtool loadelf main.elf mapfile main.map writecof main.cof"
direkt über der Warnung.

Allerdings ist es kein Fehler, sondern nur eine Warnung. Da mir das 
falsche makefile aber kein "Errors: none" gebracht hat, dachte ich, daß 
es ein richtiger Fehler ist. Ein .hex-File wird aber erzeugt.

Zu 2.:
Danke, ich werd's ändern!

Grüße,

Sebastian

von Joerg Wunsch (Gast)


Lesenswert?

objtool hat wohl noch so seine Schwierigkeiten mit allen
nicht gerade simplen Datentypen.

von Sebastian Fahrner (Gast)


Lesenswert?

Kann ich die Warnung dann guten Gewissens ignorieren, oder soll ich 
lieber alles per #define machen?

Grüße,

Sebastian

von Joerg Wunsch (Gast)


Lesenswert?

Du kannst die Warnung ignorieren, wirst aber die enums
nicht im AVRstudio debuggen können.

Andererseits sind natürlich #defines auch zuweilen keine
schlechte Idee, da enums immer zu int evaluieren, während
man zuweilen mit ein paar #defines auch noch mit uint8_t
auskommen kann.  Allerdings werden andererseits eine ganze
Reihe Operationen per definitionem immer mit int abgearbeitet,
so daß sich der Effekt wohl wieder relativiert.

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.