Hallo,
ich programmiere gerade eine Struktur im CodeVisionAVR.
Dazu habe ich im Header-File x.h die Struktur deklariert:
1
structname_struct
2
{
3
intvar1;
4
intvar2;
5
intvar3;
6
};
7
externflashstructname_structobjekt_struct[];
im Code-File wird den Variablen dann ein Wert zugeordnet:
1
Z1:flashstructname_structobjekt_struct[]=
2
Z2:{
3
Z3:{1,2,3},
4
Z4:{4,5,6},
5
Z5:{7,8,9}
6
Z6:};
Kann mir bitte einer logisch erklären, warum im CodeVision das folgende
Problem für Zeile1 kommt:
"storage modifier not allowed in this context" ???
Danke im Voraus!
Also das Leerzeichen war nicht das Problem, das hatte ich nur falsch
angegeben.
Bitflüsterer schrieb:>Such einfach im Internet.
Danke für den hilfreichen Tip. Ich hatte nur schon überall gesucht und
leider nix in der Richtung gefunden...sonst hätte ich hier keine unnütze
Frage gestellt.
Eventuell kann mir jemand eine Lösung näherbringen?
Mit freundlichen Grüßen.:
guest111
Na ja.
Wenn der Compiler sich beschwert
"storage modifier not allowed in this context" ???
dann ist eben der storage modifier hier nicht erlaubt.
Was ist ein storage modifier? Offenbar spicht der Compiler vom
Schlüsselwort 'flash'. Das ist das einzige, was ich hier als storage
modifier ansehen würde.
Warum das so ist, das wirst du die Leute von CodeVision fragen müssen,
bzw. in deren Doku stöbern, ob sie dort einen Hinweis geben, was sonst
alles schief gehen würde.
(Persönlich erscheint mir das auch unlogisch. Wenn schon, dann hätte ich
eher erwartet, dass die beiden - Deklaration und Definition, auf Biegen
und Brechen übereinstimmen müssen.
Aber vielleicht ist die Fehlermeldung ja auch fehlerhaft und das
eigentliche Problem sitzt ganz woanders. Das ist halt immer die Krux,
wenn man keinen kompletten Source Code zur Verfügung hat. So manch
vergessener Semikolon hat schon zu den tollsten Fehlermeldungen geführt,
je nachdem wo er vergessen wurde. Und das solle man auch immer im
Hinterkopf behalten, wenn man ein Codeschnipselchen beurteilen soll.
Hi,
ich kenne weder den Compiler noch hab ich dein Beispiel getestet.
Nach der Fehlermeldung würde ich aber folgendes vermuten:
1. Mach das "flash" in der Deklaration (Header) weg. WO das im Endeffekt
liegt, wird bei der Deklaration noch nicht interessieren.
2. Da der Kram ja im Flash liegt, musst du das wahrscheinlich als const
deklarieren.
guest111 schrieb:> Also das Leerzeichen war nicht das Problem, das hatte ich nur falsch> angegeben.
Du hast den Code also hier eingetippt, anstatt Copy&Paste zu benutzen?
Tu das nicht wieder, das ist eine ziemlich dumme Idee.
guest111 schrieb:> "storage modifier not allowed in this context"
Wenn die Fehlermeldung den Terminus "in this context" enthält, meinst du
dann nicht, es könnte für die Fehlersuche vielleicht sinnvoll sein, wenn
wir diesen Kontext kennen würden?
test schrieb:> 1. Mach das "flash" in der Deklaration (Header) weg. WO das im Endeffekt> liegt, wird bei der Deklaration noch nicht interessieren.
Natürlich interessiert das auch bei der Deklaration. Bei der Verwendung
der Variable muss ja entsprechender Code erzeugt werden.
Vielen Dank für die zahlreichen und hilfreichen Kommentare!
Richtig erkannt: ich habe das einzeln hier eingegeben, weil der
Quellcode unter Verschluss gehalten werden muss. (war ja nur "var3"
falsch)
Es gab zwei Probleme:
1. Der Compile wollte tatsächlich die Speicherzuweisung im *.c-File
nicht sehen.
2. Der Speicherbereich Flash war auch für meine Anwendung völlig falsch
- es hätte der EEPROM sein müssen. Das dürfte allerdings nichts mehr der
beschriebenen Fehlermeldung zutun gehabt haben.
Ansonsten lies sich die Sache so umsetzen und die Variablen lassen sich
auch während der Laufzeit ändern.
Mit freundlichen Grüßen.:
guest111
guest111 schrieb:> Vielen Dank für die zahlreichen und hilfreichen Kommentare!>> Richtig erkannt: ich habe das einzeln hier eingegeben, weil der> Quellcode unter Verschluss gehalten werden muss. (war ja nur "var3"> falsch)
Dann schreib halt ein neues Minimalprogramm, das dein Compiler mit der
gleichen Meldung quittiert und poste dann das. Code zu posten, der
ausschließlich für das Posting geschrieben ist und nie einen Compiler
gesehen hat, ist Blödsinn. Dieser Code enthält nicht selten statt des
beanstandeten Fehlers einen anderen, und du verschwendest dann nur die
Zeit der Helfer mit diesen Fehlern, die "im eigentlichen Code" gar nicht
drin sind.
guest111 schrieb:> Also das Leerzeichen war nicht das Problem, das hatte ich nur falsch> angegeben.>> Bitflüsterer schrieb:>>Such einfach im Internet.>> Danke für den hilfreichen Tip. Ich hatte nur schon überall gesucht und> leider nix in der Richtung gefunden...
Woher sollten wir das wissen? Du hast nichts davon geschrieben, was Du
schon versucht hast.