PIC18: Tabellen in C

Gast #1729164
Hallo, ich möchte in C eine Tabelle im Programmspeicher ablegen, ummit 
Ihr einen DA-Wandler zu steuern.
Es werden ca. 1000 INT benötigt, um eine Wellenform darzustellen.
Das Problem:
Bie diesem Beispiel werden auch RAM verbraucht, ich möchte aber nur ROM 
Speicherplatz benutzen.


const int in_table[] = {
8,8,2,3,4,5,7,
8,8,2,3,4,5,7,
8,8,2,3,4,5,7,
8,8,2,3,4,5,7,
8,8,2,3,4,5,7,
8,8,2,3,4,5,7,
8,8,2,3,4,5,7,
8,8,2,3,4,5,7};

zahl = in_table[2];

Also Frage: Wie kann man im C eine Tabelle mit vielen Werten im ROM 
ablegen, die man dann ähnlich wie in Assebbler mit TBLRD auslesen kann?

Danke für Eure Hilfe.
Gast
Hallo Holger, danke für die schnelle Antwort.
Aber mein PICC18 compiler verweigert die Arbeit.


const int in_table[] = {  .... geht, aber mit RAM Verbrauch.

const rom int in_table[] = {.....Fehlermeldung

Error   [314] Z:\HVT-Tester\Board18C\Untitled006.c; 100.11 ";" expected
Error   [285] Z:\HVT-Tester\Board18C\Untitled006.c; 120.1 no identifier 
in declaration
Warning [374] Z:\HVT-Tester\Board18C\Untitled006.c; 120.1 missing basic 
type; int assumed
Error   [314] Z:\HVT-Tester\Board18C\Untitled006.c; 120.1 ";" expected
Gast
DirkF schrieb:
> const int in_table[] = {  .... geht, aber mit RAM Verbrauch.

Wie kommst Du darauf?
Das PICC18 Handbuch, das man mitunter ja auch mal aufschlagen könnte
(wink ;-), ist da anderer Meinung. Ich auch...

DirkF schrieb:
> const rom int in_table[] = {.....Fehlermeldung

MPLAB C18, SourceBoost oder SDCC benutzen "ROM".
Der Hi-Tech PICC18 kennt das nicht.
Gast
Hallo,
Handbuch vom PICC18 habe ich schon rauf und runter gelesen.
Zu Anzeige des Verbrauchten RAM / ROM benutze ich in MPLAB den Memory 
usage gauge.

Fakt ist folgendes:

const unsigned char USB_CD_Ptr[]={1,2,3,4,5,6,7,8,9};
Memory usage gauge: 154 ROM /  12 RAM benutzt.

const unsigned char USB_CD_Ptr[]={1,2,3,4,5,6,7,8,9,11,22,33,44};
Memory usage gauge:  156 ROM /  16 RAM benutzt.

Also für 4 zusätzliche Bytes in der Tabelle werden auch 4 Bytes RAM mehr 
verbraucht.

Da ich eine große Tabelle anlegen möchte, kann ich mir diese RAM 
Verschwendung leider nicht leisten.

Also nochmal die Frage an die Experten: Wie kann man in C (HI-TECH C18) 
eine große Tabelle im ROM anlegen, die ich dann auslesen kann.

Bin für jeden Tipp dankbar.
Gruß Dirk
Gast
Hallo an alle,
habe den Fehler (meinen) gefunden.

Hatte die Deklaration

const unsigned char  Daten[]={1,2,3,4,5,6,7,8,9,11,22,33};

im Hauptprogramm Main gemacht.

Jetzt habe ich die Deklaration ganz an den Anfang verschoben. jetzt 
gehts.
Schön, daß man hier im Forum viele hilfsbereite Leute findet.
Werde in Zukunft wohl noch mehr auf Probleme stoßen und mich hier 
nochmal melden.
Gruß Dirk
Gast
Kann es nicht doch vielleicht sein, daß Du den C18 und
nicht den PICC18 benutzt?

Beim PICC18 ist ein "const" ausreichend (es sei denn, Du hast
an den Linker-Einstellungen herumgefummelt...).
Und wenn es tatsächlich der PICC18 ist, benutzt Du davon
vielleicht nur die evaluation version?

Meine Pro Version macht das nicht, aber ich erinnere mich dunkel
an die ersten Compiler-Tests.

Schau mal hier:

"Automatically allocates objects into optimal locations"

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en542861

Lite: Nö...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.