Forum: Digitale Signalverarbeitung / DSP / Machine Learning Fehlermeldung beim Linken


von Martin (Gast)


Lesenswert?

Hallo,

jetzt habe ich ein ähnliches Problem, ich habe aber bereits eine
Vermutung, dennoch möchte ich Euch zu Eurer Meinung fragen:
Fehlermeldung lautet:

error: can't allocate .cinit (sz: 000004ea page: 0) in HOSARAM
(avail:
is not in the project "C:\xyz\xyz.pjt"

Diese Fehlermeldung erscheint im Output - Fenster beim Linken, genauer
gesagt nach der Meldung:

[Linking...] "C:\Programme\TI\c2000\cgtools\bin\cl2000"
-@"Debug.lkf"
<Linking>

Dieser Fehler tritt nur auf, wenn ich eine .h Datei einbinden will,
also

#include "xyz.h".

Wenn ich diese eine .h Datei einbinde, und dafür eine andere aus dem
Projekt rausschmeisse, geht alles glatt. Es liegt also nicht an der
Datei selbst. Sie ist auch im Projektordner. Ich vermute, daß das
Projekt zu groß ist. Falls ich eine der beiden .h Dateien weg lasse und
erfolgreich compiliere, hat das /Debug-Verzeichnis 183KB. Die
(uncompilierte) Datei, die ich einfügen möchte, hat 255Byte.

Oder ist es ein ganz anderer Fehler?

Gruß, Martin

P.S.: Code Composer, mit TMS320F2812-Board, wie gehabt :)

von Michael (Gast)


Lesenswert?

Nur mal so eine Frage, ist das Projekt xyz eigentlich von Dir selbst
aufgesetzt?
Wenn ja wie hast Du Dir das Linkerfile erstellt?

von Martin (Gast)


Lesenswert?

nein, ist nicht selbst aufgesetzt. Ist das Beispielprogramm "Volume2",
welches ich modifiziert habe. An der Linkerdatei habe ich aber (noch)
nichts gemacht. Muß ich das denn?

von Michael (Gast)


Lesenswert?

Hallo Martin,

wo hast Du das Beispiel her? Kannst Du es mal uploaden, dann kann ich
es mir ja mal anschauen....

Michael

von hebel23 (Gast)


Lesenswert?

Hallo Martin,

Deine Vermutung ist richtig. Ich vermute, dass Du aus dem RAM heraus
debugst und nicht jedes mal den DSP flasht? Das Projekt ist zu groß und
passt nicht mehr in den Teil des RAM, in den der Linker es legen will.
Du musst also das Linkerfile anpassen und Teile in andere Bereiche des
RAM mappen.

Gruß Andreas

von Martin (Gast)


Lesenswert?

@hebel23

Kannst Du mir grob schildern, wie das geht? Bzw. wo ich darüber was
herausfinden kann?


@Michael

Ich habe das Beispielprogramm gerade nicht hier, ich werde es aber
hochladen. Meinst Du das Originalprogramm oder das von mir modifizierte
(Ist etwas umfangreich!)?

Gruß, Martin

von hebel23 (Gast)


Lesenswert?

Hi!

Also die Linkadressen stehen im *.cmd - File (bei Dir wahrscheinlich
F2812.cmd).
Wenn Du da mal reinschau´st, findest Du MEMORY und SECTIONS -
Definitionen.
Unter MEMORY werden die Speicherplätze mit Startadresse und Größe
deklariert. Unter SECTIONS werden bestimmte Teile Deines Codes
bestimmten Speicherplätzen zugewiesen.
z.B.:
.text               : > FLASHA      PAGE = 0
bedeutet, dass Dein kompilierter Code in den unter FLASHA deklarierten
Speicherbereich gemappt wird. Das wäre der Fall, wenn Du das Programm
aus dem Flash starten (und vorher hineinschreiben) willst. Im
Debugmodus läuft aber auch der Programmcode aus dem (internen) RAM
heraus.
In Deinem *.map - File siehst Du anschließend, ob und wo der Linker die
Teile hingemappt hat.
Sieh Dir die Dateien und auch die Memory-Map im Datenblatt mal genauer
an. Das Ganze ist ziemlich kryptisch und erfordert ein bissl Gedult
beim Anpassen an das jeweilige Projekt. Ich hab jetzt leider nicht so
viel Zeit, um genauer darauf einzugehen.
(Heute abend vielleicht...)


Gruß Andreas

von Martin (Gast)


Lesenswert?

Mein Projekt heißt HDR, und deshalb heißt die CMD-Datei auch
HDRcfg.cmd.
Die wurde automatisch erstellt, als ich die HDR.cdb-Datei erstellt und
gespeichert habe.

Zu Beginn steht da ein Kommentar(in HDRcfg.cmd):

/*   Do not directly modify this file.  It was    */
/*   generated by the Configuration Tool; any  */
/*   changes risk being overwritten.                */

Nachdem ich mich damit abgefunden habe, daß ich das Programm in den
Flash laden und von dort starten muß, habe ich mal mit der Recherche
begonnen. Ich habe mit die Memory Map angeschaut und auch die
*.map-Datei. Dort fand ich folgendes:


MEMORY CONFIGURATION

                  name            origin    length      used    attr

         ----------------------  --------  ---------  --------  ----
PAGE  0: OTP                     003d7800   00000400  00000000  RWIX
         FLASH                   003d8000   0001fff6  00000000  RWIX
         H0SARAM                 003f8000   00002000  00001b46  RWIX
         BOOTROM                 003ff000   00000fc0  00000000  RWIX

PAGE  1: M0SARAM                 00000000   00000800  00000480  RWIX
         PIEVECT                 00000d00   00000100  00000100  RWIX
         L0SARAM                 00008000   00002000  00001adf  RWIX

Ich bin mir nicht 100%ig sicher, aber es scheint mit tatsächlich so,
daß beim H0SARAM von 00002000 nun 00001b46 voll sind. Flash ist noch
völlig unbenutzt.

Nun zu meiner Frage: Wie kann ich das Programm in den Flash laden und
von dort starten (im Kommentar in der Datei HDRcfg.cmd steht ja, ich
soll diese Datei NICHT ändern). Geht das denn im Code Composer unter
DSP/BIOS Config -> HDR.cdb unter "System" -> "MEM Memory Section
Manager"? Wenn ich bei diesem "MEM Memory Section Manager"
"Properties" auswähle, kann ich sehr viel einstellen. Ich weiß aber
weder, was ich da genau tue, noch, worüber ich darüber Infos finden
könnte. Die Code Composer Studio Help gibt nicht viel her.
Muß ich auch noch einen Jumper umstecken?

Ich hoffe, ich konnte mein Problem gut schildern!

Grüße, Martin

von hebel23 (Gast)


Lesenswert?

Hi Martin,

welche Version von CCS hast Du da?

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Zur Version siehe Anhang.

Gruß, Martin

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

@Michael

Hier ist das Beispielprogramm von TI. Wird in den Tutorials unter
"Developing a Simple Program" genauer erklärt.

Allerdings muß ich dazu sagen, daß ich nun selbst ein neues Projekt
erstellt habe und meine Quelldateien darin eingefügt habe - mit dem
gleichen Ergebnis. Die Fehlermeldung ist also nicht von diesem Beispiel
abhängig.

Gruß, Martin

von hebel23 (Gast)


Lesenswert?

Hallo Martin,

also ich hab hier die Version 2.12 aber bei Integrated Enviroment steht
2.10 (statt bei Dir 2.20).
Auf jeden Fall gibt es bei mir kein DSP/Bios Config - Menü und auch
kein File mit der Endung *.cdb .
Ich hab die Einstellungen im *.cmd-File daher immer per Hand gemacht.
Wenn Du das Programm aus dem Flash laufen lassen willst, musst Du den
Jumper 7 auf 2-3 (boot from flash) stellen.
Lässt sich Dein DSP schon aus CCS flashen oder musst Du auch über den
Umweg Sd-Flash gehen?

Andreas

von Martin (Gast)


Lesenswert?

Hallo,

ich weiß nicht genau wie das geht, das war je meine Frage. Ich kann in
diesem Config-Menü irgendwie einen Speicherbereich einstellen, habe
aber auch noch dieses Sd-Flash in meinem Windows-Startmenü...

Gruß, Martin

von Martin (Gast)


Lesenswert?

@Andreas:

Noch eine Frage:
Kannst Du nicht im CCS unter File - New - DSP/BIOS Configuration eine
solche Configurationsdatei erstellen? Wenn man die neu erstellt und
dann speichert, wird bei mir diese *.cmd, *.cdb und noch ein paar
andere estellt.

Gruß, Martin

von hebel23 (Gast)


Lesenswert?

Hallo nochmal,

es gibt tatsächlich unter New/ einen Eintrag namens DSP/Bios
Configuration. Das ist aber inaktiv (grau). Ich meine mich zu erinnern,
dass ich, als ich damals mit dem 2812-DSP anfing, gelesen zu haben, dass
das in dieser Version noch nicht unterstützt wird. Es waren damals noch
nicht mal die richtigen "Serien-DSP´s" sonderd die Prototypen
(TMP320F2812) zu kriegen. Desshalb hab´ ich dann mühsam das
Linker-Commandfile selber zusammengestrickt.

In Deinem Fall kann ich Dir also leider dazu keine Auskunft geben, da
ich diesen ominösen Configuration-Dialog nicht kenne.
Leider hat TI auch eine sehr eigenwillige Softwarestrategie, so dass
ich  nicht mal auf die neueste Version (offenbar V2.20) updaten kann.

Gruß Andreas

von Michael (Gast)


Lesenswert?

Die neueste Version ist V2.23. Ich habe die Version 2.20.Ich finde aber
auf der ganzen Seite keinen Link wo ich das Update bekomme ich werde
mich am Montag mal ans Telfon hängen. So kann das ja auch nicht
sein....

von hebel23 (Gast)


Lesenswert?

Hi Michael,
Deine Bemühungen werden wohl ohne Erfolg bleiben. Von TI ist es soviel
ich weiß nicht vorgesehen, dass man die Software kostenlos updaten
kann. Ich kann z.B. nur Patches für genau meine Version (2.12)
downloaden und das auch nur ein Jahr lang. Für jede weitere, höhere
Version müsste ich bzw. meine Firma etwas bezahlen. Das nennt sich dann
"Annual Subscription" und ist wie der Name schon sagt jährlich neu zu
bezahlen. Wie gesagt, TI hat eine sehr eigenwillige Softwarestrategie.

Eine neuere Version würde Dir aber nichts nützen, da Du ja eigentlich
schon die komfortablere Lösung und offenbar einen Editor für das *cmd -
File dabei hast. Da wirst Du Dich wohl oder übel mit dem Tool
beschäftigen müssen oder das *cmd-File doch per Hand editieren.

Andreas

von Martin (Gast)


Lesenswert?

Kann es wirklich war sein, daß es bei TI keinerlei Doku darüber gibt,
wie man ein Programm in den Flash laden kann? Das muß doch irgendwo
erklärt sein, oder nicht?

von Michael (Gast)


Lesenswert?

Hi Martin,

versuch's mal damit "TMX320F281x Flash API". Hat mir aber auch noch
nicht wirklick weitergeholfen....
Ich weiß eigentlich auch immer nicht so genau was API jetzt wirklich
ist. Hat da jemand eine Idee????

Michael

von hebel23 (Gast)


Lesenswert?

Naja also ganz so dumm lassen die TI´ler einen dann doch nicht sterben.
Suchet und ihr werdet finden...:

http://www-k.ext.ti.com/SRVS/CGI-BIN/WEBCGI.EXE/,/?St=214,E=0000000000001413147,K=895,Sxi=9,Case=obj(31718)

Das ist die Application Note zum Thema: "Running an Application from
Internal Flash Memory on the TMS320F281x DSP"

Das sollte doch eigentlich Deine Fragen beantworten... ;o)

Andreas

von hebel23 (Gast)


Lesenswert?

Oops, der Link war wohl doch zu lang. Such mal nach "SPRA958D" unter
Knowledge Base...

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe die beiden Beispielprogramme (SPRA958D + TMX320F281x Flash
API) geöffnet. Ich konnte Sie zwar compilieren, aber beim Übertragen
kommt die Fehlermeldung (siehe Anhang). Funktioniert das bei Euch? Habt
ihr noch irgendwo etwas umgestellt (z.B. Jumper,..)?
Vielleicht ist der Prozessor schon hinüber?

Gruß, Martin

von Michael (Gast)


Lesenswert?

Hallo Martin,

ich habe gerade das Beispiel "example_BIOS_flash.pjt" ausprobiert.
Bei mir funktioniert das einwandfrei. Zu Deiner Fehlermeldung habe ich
leider keine Idee.
Was ich noch aber gar nicht hinbekomme ist, das Beispiel auf meinen
Code zu portieren. Das ist mir ein Rätsel. Vielleicht sollte ich das
Beispiel aushöhlen und meinen Code da reinstecken.
Aber am Ende habe ich dann wieder keine Ahnung :-(....

Noch eine andere Frage. Ich benutze das *.cdb nur zum Einstellen der
Interrupts und der zum Einstellen der Memory Sections. Aber ich benutze
es nicht zur Erstellung eines BIOS. Ist das jetzt ein DSP/BIOS oder ein
nonDSP/BIOS.

Michael

von Michael (Gast)


Lesenswert?

Hallo Martin,

kann sein das Du nicht den On-Chip Flash Programmer benutzt. Ist unter
Tools zu finden....

Michael

von Martin (Gast)


Lesenswert?

@Michael:

Hast Du das Beispiel "example_BIOS_flash.pjt" im CCS compiliert und
übertragen? Oder hast Du es im CCS compiliert und mit dem SD-Flash-Tool
übertragen?

Gruß, Martin

von Michael (Gast)


Lesenswert?

Hallo Martin,

wenn Du auf's Flash was laden willst, dann mußt Du immer den "On-Chip
Flash Programmer" benutzen, ansonsten bekommst Du Fehlermeldungen. Beim
Compilieren ist kein Unterschied. Da nimmst Du einfach immer nur die
"Build" bwz. "Rebuild All" Option.

Michael

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.