Forum: Mikrocontroller und Digitale Elektronik Problem LPC 2103 mit Variablen


von Rene L. (mad_zero)


Angehängte Dateien:

Lesenswert?

Hallo Leute

Ich habe Probleme mit Variablen von Fliesskommazahlen auf dem LPC-2103 
Bard von Olimex.
Zur Vorgeschichte: Anfangs ging weder die Berechnung von Float noch 
Double. Ich hab dann lange mit verschiedenen Cross-Compilern versucht 
und mein eigenes Makefile geschrieben. Jetzt bin ich auf dem Stand das 
alles soweit geht. Ich benutze "Sourcery G++ Lite". Ein großes Problem 
ist, das alles Fehlerfrei compeliert und debugt wird. Nur wenn er es 
dann ausführen soll hängt er. Durch probieren hab ich mein Problem auf 
folgendes eingeschränkt.

So nun zu meinem Problem:
1
float a,b,c;
2
a=12.0;
3
b=3.12345;
4
c=12.0/3.12345;
das geht!!!!!!!!!!!!!
und jetzt mit Variablen:
1
float a,b,c;
2
a=12.0;
3
b=3.12345;
4
c=a/b;
geht nicht mehr!!!!!!!!!!!
Hier hängt er sich beim ausführen auf.
Im debug-modus von Eclipse sehe ich, dass a und b die richtigen Werte 
hat.
Nur rechnen kann er damit nicht.
Ich vermute das es noch ein Compiler oder Linker Problem ist, hab mal 
mein Make-file mit angehängt.
Hat jemand eine Idee? Oder arbeit jemand mit dem "LPC2103 ARM7 
MICROCONTROLLER HEADER BOARD" von Olimex und bei ihm geht das?
Würde mich über eure Hilfe sehr freuen.

mfg Rene

von Philipp F. (philipp5054)


Lesenswert?

Einfach mal ins Blaue geschossen. Musst du vielleicht casten?

Gruß Philipp

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Könnte es sein, daß Du keinen initialisierten Stack hast?

Wenn Du Dir irgendeinen Compiler zurechtgefrickelt hast (und danach 
klingt das hier schon sehr)
> Anfangs ging weder die Berechnung von Float noch Double.
> Ich hab dann lange mit verschiedenen Cross-Compilern versucht
> und mein eigenes Makefile geschrieben.

... dann kann es sehr wohl sein, daß die Initialisierung des Controllers 
im Startup-Code schlichtweg in die Hose geht, und eben der Stack fehlt 
oder viel zu klein ist. Der Unterschied zwischen Deinen beiden 
Codebeispielen ist nämlich der, daß im ersten Fall keine Berechnungen 
durchgeführt werden, sondern nur Zuweisungen. Das ist auch bei der 
lezten Zuweisung der Fall, hier rechnet der Compiler das Resultat aus 
und weist das konstante Ergebnis zu.

Im zweiten Codebeispiel aber wird eine Floatingpoint-Divisionsroutine 
aufgerufen, und die funktioniert nur mit Stack.

von soundso (Gast)


Lesenswert?

falls GNU, must du math.h und libm.a dazucompilieren/linken.

c=a/b wird zur laufzeit berechenet,(floatingpoint division)

c=12.0/3.12345; wird vom compiler berechnet.

gruss ...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

soundso schrieb:
> falls GNU, must du math.h und libm.a dazucompilieren/linken.

Wozu "math.h"?

Wenn libm.a fehlt, gibt es einen Linkerfehler, also ist das Programm gar 
nicht erst lauffähig.

von Rene L. (mad_zero)


Lesenswert?

Ich danke euch für die schnellen Antworten.

Firefly lag gold richtig, der Stack war das Problem. Ich habe die 
originale Startup und Linker-file von Olimex benutzt. Da waren ein paar 
Memory-Adressen falsch. Jetzt werd ich noch das Makefile etwas abändern, 
und dann sollte alles bestens laufen.

Viele Dank euch.

Gruß Rene

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.