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