Forum: Digitale Signalverarbeitung / DSP / Machine Learning Speicheraufteilung C2000 (32-Bit)


von Jürgen M. (Gast)


Lesenswert?

Moin Moin,
ich arbeite seit einiger Zeit mit einem C2000 Eval-Board.
Bisher habe ich die Speicheraufteilung von den Beispielprojekten 
übernommen. Hat auch immer alles wunderbar funktioniert.
Nun möchte ich, aus Interesse, ein wenig tiefer in die Materie 
einsteigen.
Gibt es zu der Speicheraufteilung irgendwelche Dokumente, Tutorials, 
Programme, Exceltabellen, etc. die einem den Einstieg erleichtern und 
bei der Speicheraufteilung helfen?
Habe auf der Ti-Internetseite, oder auch im Wiki nichts explizites zur 
Speicheraufteilung gefunden!?


Viele Grüße
Jürgen

von Mine Fields (Gast)


Lesenswert?

Hast du das Datenblatt gelesen?

von Jürgen M. (Gast)


Lesenswert?

Hi Stefan,
ja habe es mir durchgelesen. Aber eine Anleitung oder ein "How-To" habe 
ich da nicht gefunden!
Habe mir auch die Memeory Map hergenommen und mit dem Linker Command 
File verglichen.
Werde daraus nicht so wirklich schlau, weil es an einigen Stellen 
widersprüchlich ist.

Viele Grüße,
Jürgen

von Jürgen M. (Gast)


Lesenswert?

Ich denke mein Problem war, dass ich das Zusammenspiel zwischen Speicher 
und Linker Command File nicht wirklich verstanden habe.
Nun sind aber im Linker Command File noch einige Anweisungen enthalten, 
die ich nicht verstehe.
1. Zum Beispiel der Befehl: ".ebss           : > RAML4,     PAGE = 1".
Ich habe mir den User Guide "TMS320C28x Assembly Language Tools
v5.0.0" (SPRU513C) dazu durchgelesen.
Da ist zwar ".bss" zu finden, aber nicht was ".ebss" ist!
Ist da vielleicht ein anderer User Guide hilfreicher!?

2. Angenommen ich möchte in meinem Programmcode ein konstantes Array 
definieren und dieses Array soll im Flash an einer bestimmten Adresse 
abgelegt werden.
So muss ich im Linker Command File mir den Speicher vorgeben.
z.B.
1
MEMORY
2
{
3
PAGE 1:
4
ARRAY_SPACE : origin=0x300000, length=0x000020
5
}

Wie sage ich dem Compiler nun, lege mir mein konstantes Array an diese 
Adresse?

Grüße
Jürgen

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Wie man bestimmte Speicherbereiche per Section auf bestimmte Adressen 
legt, sieht man am besten an den Peripherieregistern.

Hier wird üblicherweise ein struct per section Anweisung in eine 
bestimmte Speichersection geschoben. Im Linker Command file wird diese 
Section einem Speicherbereich zugewiesen. Schließlich wird noch die 
Startadresse und Länge von diesem Bereich definiert.

Grüße,

Peter

von Peter D. (pdiener) Benutzerseite


Lesenswert?

>Da ist zwar ".bss" zu finden, aber nicht was ".ebss" ist!
>Ist da vielleicht ein anderer User Guide hilfreicher!?

http://processors.wiki.ti.com/index.php/C28x_Compiler_-_Understanding_Linking#Types_of_Compiler_Sections

Hier steht, wofür die einzelnen Sections verwendet werden.

Grüße,

Peter

von Jürgen M. (Gast)


Lesenswert?

Hallo,
besten Dank für eure Antworten!
Musste leider ein paar Tage pausieren, deswegen antworte ich erst so 
spät.
Sorry!
Das mit der Speicheraufteilung habe ich nun verstanden.
Nun habe ich da aber noch eine Frage... ;)
Gibt es eine Möglichkeit dem Compiler zu erzählen, dass bestimmte Dinge 
ins Flash sollen?
Bei AVR schreibt man ja einfach "___flash const int variable"  oder so 
etwas.
Das muss doch auch beim CSS möglich sein!?


Viele Grüße
Jürgen

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Ja, natürlich geht das. Konstanten sind, wenn man das normale 
Linkerskript (also nicht das xxx_RAM) verwendet, im Flash.

Im Gegensatz zum AVR kann der TMS320 direkt Daten aus dem Flash lesen, 
deswegen liegen Konstanten auch dort. Beim AVR müssen sie immer erst vom 
Flash ins Ram kopiert werden, wenn man damit arbeitet.

Also ein einfaches

const int foo = 10;

sollte reichen.


Ansonsten kann man das natürlich genauso mit
#pragma DATA_SECTION(foo,"sectionname")

in eine beliebige Section schieben.


Grüße,

Peter

von Jürgen M. (Gast)


Lesenswert?

Vielen Dank Peter!
Jetzt kann ich Gas geben! ;)

Viele Grüße

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
Noch kein Account? Hier anmelden.