www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ganze 8kb RAM des XC164 nutzen


Autor: Thomas Grübler (thomasgruebler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich arbeite gerade an einem Projekt bei dem viele Daten 
zwischengespeichert werden müssen aus Geschwindigkeitsgründen.
Also µC verwende ich einen XC164 16F32F mit 8kb ram, aufgeteilt in 2kb 
PSRAM, 4kb DSRAM, 2kb DPRAM. Datenblatt gibs hier: 
http://at.farnell.com/jsp/search/productdetail.jsp...

Derzeit kann ich nur mehr max ein 512byte array in der main-Funktion 
initialisieren und ein 2kb array mit dem "near" attribut. Ich bräuchte 
jedoch mindestens noch ca 2kb ram irgendwo her.
Wie kann ich auf den rest des Rams zugreifen?

Als IDE Verwende ich µVision:
IDE-Version:
µVision3 V3.60
Tool Version Numbers:
Toolchain: PK166 Prof. Developers Kit Version: 6.11
Toolchain Path: C:KeilC166BIN
EC++ Compiler: EC166.Exe V1.09d
C Compiler: C166.Exe V6.11
Assembler: A166.Exe V5.30
Linker/Locator: L166.Exe V5.25
Librarian: LIB166.Exe V4.26
Hex Converter: OH166.Exe V4.7a
CPU DLL: S166.DLL V3.60
Dialog DLL: D167.DLL V2.49
Target DLL: BINUL2OCDS.DLL V1.17
Dialog DLL: T167.DLL V2.48

Vielen Dank!!
Thomas

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hej T(h)omas,

Hmmm, denke bitte daran, das 1.) ein arry in der main() funktion als 
lokale variable auf dem stack angelegt wird, mit allen konsequenzen...
Also wäre es wahrscheinlich besser, das als static mit file-scope zu 
deklarieren...
Desweiteren solltest du einen augenmerk auf die laufzeit des C-startup 
codes haben, wenn so grosse arrays zu "0" initialisiert werden, da kann 
schon mal schnell das disablen des internen watchdogs zu spät kommen 
grübel ;-).
wenn du ansonsten alles brav konfigurierst, solltest du zugriff auf alle 
RAM ressourcen haben (abzüglich SFR-Space und Stack...).
anderenfalls mal bei keil in die FAQ schauen.
meckert denn der compiler/linker oder läuft dein programm einfach nicht 
???

ansonsten mal den keil support kontakten...

gruss, tom.

Autor: Thomas Grübler (thomasgruebler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Mittlerweile meckert der compiler auch wieder weil ich wirklich alles 
allokiert habe (denk ich):
//For storing data
union {
  UINT8  c[4800]
  UINT16 s[2400];
} near data;

union {
  UINT8  c[516];
  UINT16 s[258];
} data2;

union {
  UINT8  c[1024];
  UINT16 s[512];
} idata data3;

doch es sind trotzdem nur 6,3kb der verfügbaren 12kb des xc164 32f40f 
(also ich hab jetzt µC gewechselt zum 32f40f weil er 4kb mehr ram hat).

nein es hängt sich erst auf wenn ich den zu viel allokierten ram auch 
nutze. also in speicherbereiche reinschreibe die es nicht gibt (es gibt 
12MB zum addressieren als vorwärtskompatibilität).

L166 Locate, User classes, beinhaltet das folgende:
ICODE (0xC00000-0xC3FFFF), NCODE (0xC00000-0xC0FFFF), 
FCONST (0xC00000-0xC3FFFF), HCONST (0xC00000-0xC3FFFF), 
XCONST (0xC00000-0xC3FFFF), NCONST (0xC04000-0xC07FFF), 
NDATA (0xE00000-0xE017FF), NDATA0 (0xE00000-0xE017FF),
SDATA (0xC000-0xCFFF, 0xF600-0xFDFF), SDATA0 (0xC000-0xCFFF, 0xF600-0xFDFF), 
IDATA (0xF600-0xFDFF), IDATA0 (0xF600-0xFDFF), 
FDATA (0xC000-0xCFFF, 0xF600-0xFDFF), FDATA0 (0xC000-0xCFFF, 0xF600-0xFDFF), 
HDATA (0xC000-0xCFFF, 0xF600-0xFDFF), HDATA0 (0xC000-0xCFFF, 0xF600-0xFDFF), 
XDATA (0xC000-0xCFFF, 0xF600-0xFDFF), XDATA0 (0xC000-0xCFFF, 0xF600-0xFDFF)

Die Zeile NDATA hab ich laut der Keil FAQ und dem Forum abgeändert.
-> http://www.keil.com/support/docs/2899.htm

mfg
Thomas

Autor: Gerald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas Grübler:

hast du schon eine lösung?

wie sieht dein aktuelles L166 Locate, User classes aus?

lg

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.