Hallo zusammen. Ich habe da ein kleines Problem. Ich habe bisher immer Codevision 1.24.2 verwendet für die Programmierung und Erzeugung von HEX Files für die ATMEGA64 µC. Ich habe an Adresse 0xEF00 im Flash Parameter stehen, die der Reihe nach einer vorgegeben Struktur abgespeichert sind: Adressinitianlisierung: #define CPARAMETER 0xEF00 Definition meiner Struktur: // parameters typedef flash struct Par{ byte CheckSum; // 1 byte Mode; // 2 byte Gate1Beg; // 3 byte Gate1Wid; // 4 byte Gate2Beg; // 5 byte Gate2Wid; // 6 byte Level1_ScanBegin; // 7 byte Level2_ScanEnd; // 8 byte Gate1IntUp; // 9 byte Gate1IntDn; //10 byte Gate2IntUp; //11 byte Gate2IntDn; //12 byte HoldTime; //13 byte Logic; //14 byte LogicLevel; //15 byte LogicError; //16 byte LogicState; //17 . . . word Threshold2; //21 byte Resolution; //22 word Delay; //24 byte Energy; //25 byte ScanSteps; //26 byte ScanFilter; //27 word OffsetMinTime; //29 } ParameterRecord; nun defniere ich einen Pointer vom Typ dieser Struktur: // variables in flash code struct Par flash *P; und lasse dann den Pointer P auf die Adresse 0xEF00 zeigen: P = CPARAMETER; Das Codevision 3.04 (das neue) welches ich nun verwende akzeptiert das nicht mehr und bringt mir die Fehlermeldung: "a value of type 'unsigned int' can't be assigned to an entity of type 'flash struct Par *'" Könnt ihr mir erklären wieso dass nicht mehr funktioniert und was ich tun muss, dass es wieder funktioniert? DAnke schon mal im Voraus
Der Type der Variable P stimmt nicht mit dem Typ der Konstante CPARAMETER überein. Der Compiler verlangt gleiche Typen wie sowas:
1 | int i=3; |
2 | int j=i; |
3 | [c/code] |
4 | Der folgende fehlerhafte Code würde die gleiche Fehlermeldung auslösen, die Du bekommen hast: |
5 | [code] |
6 | char c='a'; |
7 | int j=c; |
Du kannst die Fehlermeldung durch Typecasting (http://www.paprots.com/red-inferno/cplusplus/basic/Typecasting/main.htm) unterdrücken.
1 | P=(flash struct Par *) CPARAMETER; |
Dann kann der Compiler aber nicht mehr prüfen, ob CPARAMETER auf eine Struktur vom gleichenTyp zeigt oder irgendwo anders hin. Folgenden fehler würde der Compiler nicht bemerken:
1 | char[] CPARAMETER="Hallo"; |
2 | struct Par flash *P=CPARAMETER; |
Da in Deinem Fall CPARAMETER sowieso eine hardcodierter Pointer ist, kann der Compiler ohnehin nicht prüfen, ob die Adresse stimmt. Insofern denke ich, dass Typecasting in deinem Fall ausnahmsweise Ok ist.
Okay, Fehlermeldung kommt jetzt nicht mehr. Muss jetzt noch prüfen, ob dies auch richtig funktioniert. Da hast Du mir schon echt weiter geholfen. Vielen Dank dafür.
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.