www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Grosse Daten Konstanten definieren in C18 Pic Compiler


Autor: Andy -. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich versuche eine Mende Daten in einem Array zu definieren.
Die Daten müssen nicht verändert werden, also nur gelesen werden.

C18 Compiler: Daten im Code ablegen oder im Rom?

Leider bekomme ich immer diese Meldung
MPLINK 4.35, Linker
Copyright (c) 1998-2010 Microchip Technology Inc.
Error - section '.idata_wg.o' can not fit the section. Section 
'.idata_wg.o' length=0x000000a2
Errors    : 1

Ich habe das mit diversen Definitionen versucht aber igendwie gehts halt 
nicht.

const char[] X1 = {0,0,0,0,0,0};
const char[] X2 = {0,0,0,0};
const char[] X3 = {0,0,0,0,0,0,0,0};
...

oder mit
#pramag idata access Daten
near char[] X1 = {0,0,0,0,0,0};
...
#pramag idata access Daten
far char[] X1 = {0,0,0,0,0,0};
...
Wie kann ich globale constanten definieren über die 256 bits hinaus 
gehen?
Es sollte einfach auf die Daten zugegriffen werden ohne EEProm Lese- 
Funktion wenn möglich...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
const rom char[] X1 = {0,0,0,0,0,0};

Autor: Sven Woehlbier (woehlb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt im Linkerskript eine außreichend große Section vereinbaren und 
die Variable dieser Section zuweisen, mit den Standard-Linkerskripten 
wird das nichts. Ist bei mir aber lange her, frage mich jetzt bitte 
nicht nach Einzelheiten!

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da "const" Daten als Daten adressierbar sein müssen, können sie nur im 
RAM liegen. Und ist nur begrenzt Platz. Erst mit "rom" landen sie im 
ROM.

Autor: Andy -. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort,
Habe es gefunden und so definiert:
char const rom K1[] = {1,2,3,4};
char const rom K2[] = {1,2,......,24};
...
char const rom *Data[] = {K1,K2};

So weit so gut, jedoch kann ich nicht auf die Data Structur zugreifen.
Ich weiss auch nicht genau ob das so richtig definiert ist.

Ich möchte von den constanten ein Array mit welchem ich wie folgt 
zugreifen kann:

v = (&Data[1])[3];
i = sizeof((&Data[1])[3]);
oder
char s[] = Data[1];
i = sizeof(s);
v = s[3];

etwas kompliziert mit diesem MCC18 Kompiler.

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> v = (&Data[1])[3];
kommt darauf an, wie v definiert ist

> i = sizeof((&Data[1])[3]);
wahrschinlich ist die funktion so definiert:
int sizeof(unsigned char *RAMData);
müsste für ROM-zugriff so heissen:
int sizeof(rom unsigned char *RAMData);

> char s[] = Data[1];
char s[] ist ein pointer ins RAM
Data[1] ist der inhalt dieses pointers (pointer ins ROM)
[ich hoff, das stimmt, was ich sagte?]
du versuchst hier einen wert einem pointer zu übergeben, ich vermute mal 
du willst den ROM-inhalt ins RAM befördern. das musst du so machen:

void CopyROMToRAM(rom unsigned char *ROMData, unsigned char *RAMData) {
// copies ROM data to RAM
  unsigned char x;
  for (x=0; x < 16; x++) // 16 = data length
    RAMData[x] = ROMData[x];
}

Autor: Andy -. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Master
das Problem war, dass ich das ROM nicht definiert hatte
danke.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.