Hallo Leute! Ich habe den Keil-Compiler und programmiere (in C) einen C167-µC (Eval-Board C167CR 256K Flash und 64K Ram). Diesen µC habe ich um zusätzliche 32K-Byte erweitert. Die Speicherkonfiguration ist schon richtig eingestellt. Der Keil-Compiler mapped mir die Speicher richtig z.B: HDATA (0x40000-0x4FFFE, 0x50000-0x57FFF), HDATA0 (0x40000-0x4FFFE, 0x50000-0x57FFF) Hier werden einmal die 64K und dann die 32K gemappt. Meine Frage: Wie kann ich ein Feld auf eine bestimmte Adresse bringen. Wenn ich jetzt ein Feld initialisiere: unsigned char huge feld[50000]; unsigned char huge feld2[30000]; Hier wird das erste Feld auf Adresse 0x40000 gebracht und das zweite folgt. Wie kann ich Feld2 direkt auf Adresse 0x50000 bringen? Also auf den 32K-Speicher. Mit dem CodeVisionAVR-Compiler von Atmel geht das ganz einfach mit: unsigned char feld[200] @0x260; // Beginn externes Ram Nur programmiere ich jetzt keinen Atmel, sondern einen Infineon. Wie geht das bei diesem Compiler? In der Beschreibung habe ich auch nichts gefunden. Oder habe ich es übersehen. Vielen Dank für eure Antwort. Martin
Hallo Martin! Ich habe leider einen anderen Compiler. Da funktioniert das mit der Speicherzuweisung so: at SPEICHERADRESSE unsigned char feld[FELDGRÖßE]; Versuch es mal. Tschüss Alfred
z.B.: unsigned char xyz at 0x80; Mit at kann man die Variable auf einen fixen Speicherplatz legen, glaub ich halt.
Hallo KaMiL! Danke für deine Antwort aber es geht so nicht. Ich habe eine geraume Zeit in der Beschreibung gesucht und eine Möglichkeit gefunden. In Targetoptions muss man eine neue Klasse definieren. z.B. neuklasse(0x10000-0x20000) Danach muss man ein neues C-File anlegen, worin die entsprechenden Variablen global initialisiert werden, die sich in dem angegebenen Speicherbereich befinden sollen. z.B: #pragma RENAMECLASS (XDATA=neuklasse) #pragma NOINIT unsigned char xhuge feld32[2000]; unsigned char xhuge feld64[1000]; Die existierende Klasse XDATA wird auf die neu angelegte Klasse neuklasse umbenannt. Durch die Beifügung xhuge, bei der Initialisierung der Variablen, weiß der Compiler, dass es sich um die XDATA-Klasse handelt. Da diese aber in neuklasse umbenannt wurde, gilt in diesem C-File der Speicherbereich von neuklasse. Damit man nun diese Felder z.B. in der Hauptfunktion Main benutzen kann, muss man sie mit "extern" in jenes File hinüberholen, in welchem sich eben die Funktion Main befindet. Diese Definition ist ebenfalls global. z.B.: extern unsigned char xhuge feld32[2000]; extern unsigned char xhuge feld64[1000]; void main(void) { . . . } Es ist zwar etwas umständlich (meiner Meinung nach), aber es funktioniert (Endlich!!!). Tschüss Martin
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.