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?
Gast
#3726157
Tu die passende xcl-Datei aus v850\config in Dein Projekt. Dann bei Linker -> Config -> Linker Configuration File: Override default [x]
1 | |
2 | |
3 | |
4 | |
5 | |
Gute Verrichtung.
Gast
#3726210
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.