|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1399
|
C++ e processori Sharc
Salve a tutti,
qualcuno sa qualcosa sulla programmazione dei processori Sharc DSP in C++? Sto facendo un progetto ma ho problema nella gestione della memoria: ogni volta che faccio una new ho un errore di out_of_memory. Qualche anima santa???
__________________
If you eat a live frog in the morning, nothing worse will happen to either of you for the rest of the day. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1399
|
Uppettino.
Nessuno sa nulla?
__________________
If you eat a live frog in the morning, nothing worse will happen to either of you for the rest of the day. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Quote:
Però posso provare a darti una mano: usi un sistema operativo sul DSP? Lo chiedo perché (da quello che so) per l'allocazione dinamica della memoria probabilmente è necessario o un sistema operativo o comunque qualcosa che gestisca lo spazio di memoria.
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1399
|
Intanto grazie mille per la risposta.
Dunque, il processore (un ADSP-21161N) è piazzato su una evaluation board collegata al PC (sotto Windows purtroppo) tramite USB. Io scrivo il codice con VisualDSP++ 4.00: è un programma in C++ con delle routine in assembler che gestiscono l'I/O delle seriali audio. Ti cerco di descrivere il problema. Sono partito dall'esempio CTalkthru fornito con EZKit lite (il kit per l'evaluation board). Ho trasformato il progetto in un progetto C++ e dopo un pò di modifiche tutto è andato a posto. Il problema è che sto usando il file LDF per la gestione della memoria di CTalkthru e non so se vada bene. I file LDF sono dei file del linker in cui si indica in che segmento di memoria allocare porzioni di codice. Ogni volta che uso l'operatore new del C++ per l'allocazione della memoria (ad esempio per creare un oggetto) ho un messaggio di out_of_memory nel seg_pmco. Non so proprio che fare perchè la gestione LDF è piuttosto complicata e a me fondamentalmente non interessa: sarebbe sufficiente potere allocare qualche oggetto e usarne un metodo nella funzione Process_Samples. Ad esempio: LoopOscillator* osc; Process_Samples () { double v = osc.tick (); // parti per mandare v alla seriale d'uscita } int main () { // inizializazione del processore osc = new LoopOscillator (); //settaggio flag di interrupt a Process_Samples for (;; ) asm ("idle"); } LoopOscillator è la mia classe ma quando nel main chiamo l'operatore new ho out_of_memory. Non so se ho chiarito un pò il problema. Grazie ancora, Cec
__________________
If you eat a live frog in the morning, nothing worse will happen to either of you for the rest of the day. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Purtroppo non ho familiarità con l'ambiente che utilizzi, e la mia esperienza con gli SHARC è molto datata (ADSP-21020) e limitata al solo assembler.
A quanto dici il problema sembra essere l'allocazione dinamica. Avresti problemi ad usare un'allocazione dell'oggetto direttamente come variabile statica senza bisogno del new: LoopOscillator osc;
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1399
|
Ciao,
non posso allocare staticamente gli oggetti perche il costruttore richiede obbligatoriamente dei parametri. Dovrei cambiare l'architettura di tutto il sistema per evitarlo. Sarebbe sicuramente più proficuo capire meglio la gestione della memoria. Cec
__________________
If you eat a live frog in the morning, nothing worse will happen to either of you for the rest of the day. |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Quote:
Comunque, se utilizzi l'allocazione dinamica "solo" per passare dei parametri al costruttore, non dovrebbe essere troppo problematico passare ad una allocazione statica (da quello che so, l'allocazione dinamica serve obbligatoriamente se non sai a priori "quanti" e "quali" oggetti allocare). Invece di fare : LoopOscillator* osc; e poi : osc = new LoopOscillator (par1, par2); potresti fare : LoopOscillator osc; e poi : osc.init(par1,par2);
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:19.



















