Salu zusammen
Ich habe endlich den mspgcc zum funktionieren bekommen. Er zeigt
folgendes an (Anhang)
Was bedeutet dieser Error? Ich weiss selber das ich den MSP speise,
speise ich ihn nicht, erkennt er ihn ja nicht...
Im zweiten Post seht ihr noch die Programmstruktur unter Debug. Gehe ich
in Eclipse auf Debug, kommt die Fehlermeldung:
D:\reflection\msp430_Eclipse_Project\G-Sens\Debug\G-Sens not found
D:\reflection\msp430_Eclipse_Project\G-Sens\Debug\G-Sens not found
D:\reflection\msp430_Eclipse_Project\G-Sens\Debug\G-Sens not found
aber das File scheint ja da zu sein...?? (siehe Anhang im nächsten Post)
Ich will eigentlich nur das Prog auf den MSP laden, debuggen ist mir
vorerst noch egal, bin schon froh wenn ich das Teil irgendwie rauf
kriege. Hoffe es kann mir einer helfen, obschon, ob mir noch zu helfen
ist...?? :o)
Greets und Danke schon einmal im Voraus
reflection
Hier noch was ich im Debugger eingetragen habe (Anhang)
Wenn ich dann debugge bringt er folgenden Fehler:
Unable to set working directory: Target is not responsing
Unable to set working directory: Target is not responsing
Unable to set working directory: Target is not responsing
Was mache ich falsch?
Gruss
Trenn mal die Verbindung zwischen Vcc und dem USB-Debugger. BEi mir hat
das auch nicht geklappt, als ich die Vcc an den Debugger angeschlossen
hatte.
Achja, im gdb-target.ini musst du natürlich G-Sens.elf schreiben, Endung
scheint nicht da zu sein.
Salu zusammen
so, ich komme nun in den Debug Modus, er scheint einen Teil herunter zu
laden, aber bei 85% steigt er immer mit folgender Fehlermeldung aus
(Anhang).
Wenn ich den MSP dann kurz vom Strom nehme und wieder neu starte, ist
ein Teil des Programms drauf. Ich kann alle Zeichen auf dem Display
lesen, nur meine Umwandlungen mit sprintf hat er nicht geschluckt, da
kommt nur Müll (hat in IAR so funktioniert der Code...) . Kann mir aber
das aus dieser Fehlermeldung nicht erklären. Habe irgendwo mal was
gelesen, dass es verschiedene Versionen von msp430-gdb.exe gibt. Stimmt
das? Kennt jemand das Problem. Irgendwas hat er auch noch mit einem
Reset Vector (hinten im Bild)
Greets
Habe nun die Version von Mai 06 installiert. Kommt der selbe Fehler.
Hier noch der Log
No symbol "auto" in current context.
Warning:
Cannot insert breakpoint 4.
Error accessing memory address 0x149a: (undocumented errno -1).
Cannot insert breakpoint 5.
Error accessing memory address 0x12f4: (undocumented errno -1).
Cannot insert breakpoint 6.
Error accessing memory address 0x157c: (undocumented errno -1).
kill
Kann es sein das ich etwas nicht einbinde? Ich habe noch 16 Warnings in
meinem Code die ich einfach nicht wegbekomme, so ala:
Warning: Implicit declaration of function ....
Es ist komisch, wenn ich nur Strings zum Display schicke klappt es,
aber, die werden alle angezeigt. Kann es mit dem sprintf zusammenhängen?
Nützt es was wenn ich meine main.c poste?
Gruss von einem dem die "Birne" raucht
Hmm...ich denke mal, du musst einen Teil der Funktion sprintf() selber
schreiben. Muss man bei printf() auch.
Warning: Implicit declaration of function ....
Bedeutet, dass der Linker die Funktion nicht findet, die benötigt wird.
Guck mal in das Headerfile stdio.h:
1
intputs(constchar*s);
2
intputchar(intc);//has to be supplied by the user, but avoids useless warnings
Das ist ja eindeutig. Ich chätze mal, du musst puts() noch selbst
schreiben.
Manche dieser Funktionen befinden sich in anderen .c Files. Kann es
daran liegen? (Implicit declaration...) Habe die verschiedenen .c Files
im Main nicht speziell definiert, die scheint er selber einzubinden.
Muss ich das stdio.h in jedes meiner .c Files einbinden? Sorry für die
komischen Fragen, aber wie gesagt, der Code hat mit IAR bestens
funktioniert.
Was meinst Du mit selber machen? Stehe da jetzt ehrlich gesagt gerade
ziemlich auf dem Schlauch. Grundsätzlich sieht das Ganze bei mir etwa so
aus. Gibt es da mit Standardverfahren nichts anderes das vielleicht
funzt?
float acc_x = SCA3000_Read_16Bit(0x05); // X-Wert auslesen SCA3000
acc_x += 0.04; // Rudimentäre Offsetkorrektur
:-)
sprintf(x_axis, "%s%+5.3f %c","x:",acc_x,'g');// X-Wert in String
schreiben
Habe auch schon im Netz gesucht und was gefunden, das msp430-gdb wohl
ein Prob hat mehr als 3 Breakpoints einzufügen. Kann mir einer sagen wie
ich das abschalte, dass er mir die Breakpoints selber setzt? Habe
nämlich manuell nichts gemacht. Denke zwar, das der Fehler wirklich an
meinem Prog liegt. Hänge mal noch das main.c an, viellicht kann mir dann
einer weiterhelfen. Sorry schonmal für den Code, ist mein erstes uP
Prog. :o)
Greets
Naja, wenn du externe Funktionen benutzt, musst du das zugehörige
Header-File, in dem die Funktionsdeklarationen stehen, in jede Datei
einbinden, in der du diese Funktionen nutzen willst.
Oder aber mit extern in jedem File alle benutzten Funktionen
deklarieren.
Wegen der Brakpoints: Das ist kein Problem des GDB. Die MSP430X14x haben
nun mal nur 3 Hardware-Breakpoints, von daher ist es völlig korrekt,
wenn du nicht mehr als 3 setzen kannst.
Ich arbeite mit den 16x, die haben 8 BP, und die funktionieren alle mit
gdb.
Achja, mit selber machen meine ich: Es gibts ja auch die printf()
Funktion. Auf einem µC weiß allerdings die Lib nicht, wo denn jetzt das
einzelne Zeichen wie hin muss. Wenn du printf() verwendest, musst du
noch definieren, was die putch() machen soll. Beispielsweise auf der
seriellen Ausgeben. Oder auf einem Display...oder oder oder. Da das nur
der Benutzer weiß, musst du das selbst schreiben. Könnte mir vorstellen,
dass das bei puts() auch so ist.
Übrigens musst du dem linker noch die option m mitgeben, wenn du die
math-lib benutzen willst.
Hab gerade mal selber probiert. Sprintf() klappt ohne selber was zu
machen. Muss also an deinen anderen Funktionen liegen. Erstelle mal
Header-Files und includiere die.
Aha, das ist doch interessant das er nur 3 Breakpoints kann der
MSP430x149. Wieso probiert mein Prog dann einen 4. Breakpoint
einzufügen? Ich habe absolut keine Breakpoints deklariert, die macht er
einfach selber! Denke das es in demfall daran liegen wird denn er stürzt
ja mit der Fehlermeldung ab er könne Breakpoint 4 nicht setzten was ja
anscheinend auch korrekt ist. Wie bekomme ich diese Breakpoints raus?
Greets
In der Debug-Perspektive hast du doch das kleine Fenster mit den
Breakpoints, Expressions, Variables usw. Da kannst du alle Breakpoints
ausschalten. Aber einen beim Start von Main() brauchst du immer. Aber
den kannst du dann auch deaktivieren, wenn der da angekommen ist.
Übrigens steht die Anzahl der Breakpoints für jeden MSP430 im Manual des
USB-FET-Debuggers. SLAA138 oder so...
Edit: Nochmal mit Bild.
Also bei Breakpoints stehen zwei drin
D:\Gruenenwald\msp430_Eclipse_Projects\G-Sens\main.c[line: 65]
D:\Gruenenwald\msp430_Eclipse_Projects\G-Sens\main.c[line: 107]
Wieso möchte er dann einen 4. setzen wenn es gar keinen 3. gibt?
Sorry, aber ich hänge mich an jeden noch so dünnen Strohhalm in der
Hoffnung es doch noch zum laufen zu bekommen. Das mit den Breakpoints
ausschalten muss ich am Abend mal probieren, aber irgendwie glaube ich
noch nicht dran, dass es das dann auch wirklich ist...
Greets
Einer steht immer an Anfang von main(), der steht aber nicht in der
Liste da oben drinne.
Es wird nicht funktionieren, solange du deine Funktionen nicht
ordentlich deklarierst. Der Linker kann nicht hellsehen.
Also ich habe die Header Files erstellt. Etliche Fehler sind schon weg,
aber es hat immer noch, hat da noch jemand eine Tipp? Versuche das mit
dem Debugger erst wieder wenn ich keine Warnings mehr habe. Scheint aber
doch am sprintf zu liegen. Wenn ich den als Kommentar deklariere gibt es
nur noch die Fehler von unbenutzten Varabeln.
Was hat das mit dem Rückgabewert von main auf sich? Main hat ja keinen
Rückgabewert :o) Fehler sind im Anhang aufgeführt
Gruss
Wahrscheinlich erwartet sprintf() bei eine Double variable, du gibts
aber float. Das macht ja aber nix, da Double größer ist. Du kannst ja
mit (double) casten.
Beim GCC muss Main() als int sein, und einen Rückgabewert haben. Ist da
nun mal so.
Und wieso deklarierst du in jeder schleife die char Variablen neu, sind
doch immer die gleichen.
Wenn ich das richtig verstehe würdest Du die Variabeln vor dem while(1)
deklarieren da sie ja immer gleich bleiben? Wie gesagt, es ist mein
erstes C Programm und das erste uP Prog auch welches ich versuche zu
schreiben, bin für solche Tipps immer dankbar. Irgendwie muss man ja mal
anfangen und das das nicht das Gelbe vom Ei ist was ich da schreibe kann
ich mir nur zu gut vorstellen :o) In der Schule hatte ich nur zwei
Semester Java, das ist sozusagen mein Stand :o)
Greets Serge
PS: Ich werde mal versuchen den float in einen double zu casten. Mal
schauen mit welchem Befehl das in C funktioniert. Oder soll ich lieber
gleich alles mit double machen? Wäre dann ja wohl mit Kanonen auf
Spatzen geschossen, oder?
Auf so einem kleinen 16-Bit Controller ist jede Fließkomma-Sache eine
kanone auf den armen Spatzen. Lieber mehr Gehirnschmalz reinstecken, um
mit Ganzzahlen auszukommen, meist lässt sich das durch ein paar
geschickte Multiplikationen und/oder Summationen alles erschlagen.
Die Deklaration gehört vor die while Schleife, oder noch besser ganz
oben ins File, also außerhalb von main().
Casten geht so:
1
floatwert=2.45;
2
sprintf(buffer,"Wert: %1.2f",(double)wert);
Allerdings linkt der dann die gesamte FP-Lib dazu, und langsam wirds
auch wie sau. Aber kommt halt auf die Anwendung an....
Habe hier beim Compilieren noch einen Fehler gefunden den ich mir nicht
erklären kann, vielleicht weiss ja jemand etwas darüber:
Severity and Description Path Resource Location Creation Time Id
Error launching external scanner info generator (gcc -E -P -v -dD
D:/Gruenenwald/MSP430_Eclipse_Projects/.metadata/.plugins/org.eclipse.cd
t.make.core/specs.c) G-Sens Unknown 1184741400416 3193
Das is kein schlimmer Fehler, sondern nur eine Warnung. Der Build läuft
ja trotzdem durch. Kann man leicht abstellen:
Window -> Preferences und dann nach Bild
Danke, das hat funktioniert! Langsam aber sicher komme ich dem Ziel
näher :o) Eine Frage noch: Wie finde ich raus wie gross mein Code ist?
Ist das das .elf File???? Hoffe ja nicht, das hat jetzt schon 80kb und
mein MSP hat ja nur 60k...
Greets
Neenee, im .elf sind noch die ganzen Debug-Infos usw drinne. es gibt ein
Konsolenprogramm, das man als Build Step nach dem Kompilieren ausführen
kann, siehe Bild. Musst natürlich den Filenamen ersetzen.
Salu zusammen
Es funktioniert freu! Habe es endlich zum laufen gebracht. An was es
schlussendlich genau lag weiss ich aber nicht. Auf einmal ging es und
seit da läuft es ohne Probleme :o)
Zum sprintf: Die funktion existiert zwar, hat aber keine Floatingpoint
Unterstützung. Habe nun meinen Float folgendermassen aufbereitet:
float acc_x = SCA3000_Read_16Bit(0x05); // X-Wert auslesen SCA3000
acc_x -= 0.04; // Rudimentäre Offsetkorrektur
:-)
if (acc_x < 0)
{
sign = -1;
}
else
{
sign = 1;
}
sprintf(x_axis, "x:%c%i.%03ig", (sign == 1) ? '+' :
'-',(int)acc_x*sign,(int)(modf(acc_x,&tempf)*1000.0)*sign); //
X-Wert in String schreiben
Was meint ihr dazu? Geht das einfacher (und Resourcen sparender)?
Funktionieren tut es, das habe ich getestet, aber ich denke es ist halt
nicht "so schön"
Greets reflection
Da ich echt noch nicht der Superprogrammierer bein muss ich leider
fragen wie man das mit dem Hardware Multiplier macht. Habe in dem MSP
Buch das ich gekauft habe zwar was finden können, aber das wird alles in
ASM erklärt und ich verstehe wenn überhaupt dann nur C...
Wie meinst Du das mit Kommarechnung? Ich bekomme ja einen Binärwert aus
dem Sensor und das ist ja eigentlich schon ein Float, sobald ich ihn mit
den Steps umrechne...
Greets