Codevision Flashinhalt in RAM kopieren

Gast #3211563
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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.