Forum: Mikrocontroller und Digitale Elektronik Quicksort für LPC1768 -> Error


von F. P. (pl504)


Angehängte Dateien:

Lesenswert?

Hallo!

Bin gerade dabei, ein Quicksort-Programm für den LPC1768 zu realisieren. 
Leider stürzt das Programm bei Feldgrößen ab ca. 200...250 Elementen in 
der Quicksort-Funktion ab, obwohl der Chip mit 64 kB RAM eigentlich 
genug Reserve haben sollte. Was habe ich falsch gemacht?

Die Implementierung auf einem LM3S8962 (TI) funktioniert bei 1024 
Elementen übrigens einwandfrei, nur eben nicht auf dem LPC.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

F. P. schrieb:
> Leider stürzt das Programm bei Feldgrößen ab ca. 200...250 Elementen in
> der Quicksort-Funktion ab, obwohl der Chip mit 64 kB RAM eigentlich
> genug Reserve haben sollte. Was habe ich falsch gemacht?

Was sagt denn Dein Debugger dazu?

von Arne (Gast)


Lesenswert?

Bedenke, dass der LPC1768 die 64kB NICHT am Stück hat.
Einmal 32kB ab $10000000 und einmal 32kB ab $2007C000.
Wenn du Speicherplatz statisch allokierst, sollte aber der Linker 
melden, wenn es nicht passt.

von Arne (Gast)


Lesenswert?

ohh, ohh.. sehe gerade: Quicksort rekursiv -> auf Stack achten.

von F. P. (pl504)


Angehängte Dateien:

Lesenswert?

Danke für Eure Hinweise.

wegen Debugger:
Ich nehme das Keil µVision4 zum Debuggen. Dort springt er in den 
HardFault_Handler. Habe das Projekt mal angehangen.


Wie löse ich das Stack-Problem bzw. woran sehe ich konkret, wo es zum 
Überlauf kommt oder wieviel Stack ich brauche?

von Arne (Gast)


Lesenswert?

> Wie löse ich das Stack-Problem bzw. woran sehe ich konkret, wo es zum
> Überlauf kommt oder wieviel Stack ich brauche?
Du siehst doch im LinkerSkript bis wohin SP maximal laufen darf. Wenn Du 
im HF-Handler bist: wohin zeigt SP?
Oder Du initialisierst den Stack mit einem Muster (0xDEADBEEF z.B.). 
Wenn du im HF bist, schaust du, ob dein Stack noch das Muster enthält, 
falls nicht, ist der SP in Data/BSS reingelaufen und killt dir was 
wichtiges.

von F. P. (pl504)


Lesenswert?

Entschuldige die dummen Fragen, aber ich bin noch nicht so sehr 
bewandert in diesen Sachen. :(
Wie initialisiere ich den Stack mit einem Muster? Was ist BSS?

Wenn er in den HF-Handler springt, hat der Stackpointer (R13?) 
0x100010F0.

von F. P. (pl504)


Lesenswert?

Problem elegant beseitigt:
In der stdlib.h gibt es ja schon eine qsort-Funktion. Damit funktioniert 
die Sache einwandfrei. :)

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.