V850 "hängt" bei ddiv

#3726008
Lesenswert?

Hallo Leute,

ich benutze einen V850/E2 µPD70F400 von Renesas in Verbindung mit dem 
IAR Workbench Compiler 4.10.2. Der Mikrocontroller besitzt keine 
Floating-Point-Unit, allerdings setze ich an einigen stellen 
Fließkommazahlen ein.

Unter mir bis jetzt noch nicht ersichtlichen gründen bleibt der von 
Compiler erzeugt Code manchmal stehen (evtl. zusammenhang mit der 
Codegröße / Compilat). Wenn ich dann den Live-Debugger stoppe und mir 
das Disassembler-Window ansehe befindet sich die CPU meißt in einer 
Funktion "__COM_ddiv". Dabei handelt es sich wohl um eine Double 
Division, wenn ich den Code von "Hand" weitersteppe geht die auführung 
meißt. Mit voller geschwindigkeit allerdings nicht.

Ich benutze einige Interrupts, die ich aber alle recht schlank gehalten 
habe. Funktionsaufrufe in der ISR habe ich auf ein Minimum begrenzt.

Außerdem wandle ich mit den ADC und schiebe die Daten über DMA direkt in 
den Speicher.

Außerdem nutze ich zwei Timer-Kanäle (1ms und 1µs) um mir 
Verzögerungszeiten für eine LCD-Anzeige zu erzeugen. Der Mikrocontroller 
selber läuft mit 80 Mhz.

Kennt jemand irgendwelche Probleme in verbindung mit FP-Compilaten vom 
IAR?
Kommt jemand das Problem bekannt vor?

Grüße
Gast #3726157
Lesenswert?

Tu die passende xcl-Datei aus v850\config in Dein Projekt.
Dann bei Linker -> Config -> Linker Configuration File:
Override default [x]
1
//-------------------------------------------------------------------------
2
//      Size of the stack.
3
//      Remove comment and modify number if used from command line.
4
//-------------------------------------------------------------------------
5
//-D_CSTACK_SIZE=400

Gute Verrichtung.
#3726981
Lesenswert?

./. schrieb:
> Tu die passende xcl-Datei aus v850\config in Dein Projekt.
> Dann bei Linker -> Config -> Linker Configuration File:
> Override default [x]

Ich hab die Einstellung der Stack-Größe bis jetzt unter 
Project->Options->General Options->Stack/Heap eingestellt.

Vorher hatte ich eine größe von 0x1000 (vermutlich byte?), jetzt 0x2000.

> Die IAR-Runtime tut gewoehnlich den Stack mit 0xCD initialisieren.
>
> Damit kann man dann einigermassen bequem pruefen wieviel Stack
> gebraucht wird.

Habe sowas ähnliches auch in einem Dokument von IAR gelesen, konnte ich 
allerdings noch nicht nachvollziehen. Auch das Stack Window 
(View->Stack1/2) ist mir noch nicht ganz ersichtlich. Wie finde ich z.B. 
heraus wo der Stackpointer gerade drauf zeigt, bzw. wo kann ich mir den 
Stackpointer anzeigen lassen?

Bei mir gibt es viele große Strukturen die in der main lokal 
exisitieren. Evtl. hat jemand einen Tipp den Stack verbrauch herunter zu 
schrauben?

BRauch man für eine Analyse des Stack's mit dem IAR Workbench evtl. noch 
ein Plugin? Ich nutze die Größen limitierte Version!

Grüße

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren