mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC18: Tabellen in C


Autor: DirkF (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
const rom int in_table[] = {

Autor: DirkF (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: AkkiSan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: DirkF (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lass mal beim Compilieren ein Assemblerlisting erstellen und schau dann 
nach, was der Compiler aus den Arrayzugriffen macht und wo die Arrays 
tatsächlich landen.

fchk

Autor: DirkF (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: AkkiSan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?IdcServic...

Lite: Nö...

Autor: AkkiSan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups. Zu spät ;-)

Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein static const hätte es vielleicht auch getan.

fchk

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.