PIC18: Tabellen in C

Gast #1729164
Lesenswert?

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 #1729207
Lesenswert?

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 #1729428
Lesenswert?

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 #1729453
Lesenswert?

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 #1729486
Lesenswert?

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 #1729500
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren