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
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?
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.
Die IAR-Runtime tut gewoehnlich den Stack mit 0xCD initialisieren. Damit kann man dann einigermassen bequem pruefen wieviel Stack gebraucht wird.
./. 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.