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.
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
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.
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
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
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
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ö...
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.