Forum: Mikrocontroller und Digitale Elektronik V850 "hängt" bei ddiv


von Patrick L. (crashdemon)


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

von Patrick L. (crashdemon)


Lesenswert?

So wie es aussieht war es wohl eine Stack-Overflow, nachdem ich die 
Stack- Größe angepasst habe war das Problem weg. Gibt es im IAR 
Workbench eine elegante Möglichkeit den Stackbedarf zu erfassen?

von ./. (Gast)


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.

von ./. (Gast)


Lesenswert?

Die IAR-Runtime tut gewoehnlich den Stack mit 0xCD initialisieren.

Damit kann man dann einigermassen bequem pruefen wieviel Stack
gebraucht wird.

von Patrick L. (crashdemon)


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

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.