mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik sprintf beim MSP430


Autor: Wolfgang Emmert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!!

In meinem Programm ist der folgende Code definiert:

;*********************************************************************** 
****************************************
#define      RXTXData R4
#define      bitcount R5
#define      pointer  R6
#include     <msp430x11x2.h>

NAME      PROTOTYP

EXTERN    ausgabestring  ; C-Funktion: berechnet Ausgabestring

PUBLIC    main
PUBLIC    dr_out
..................
..................

  ASEG  0x200
dr_out          DB              15

  ASEG  0x216                           ; Arbeitsvariablen ins RAM
laden
...................
...................
;**********************************************
;* Programmstart                              *
;**********************************************
  ORG    0xF000      ; Programm-Start
;**********************************************
main   MOV.W    #0x280,SP
...................
..................
  CALL  #ausgabestring
............
............

Die zugehörige C-Funktion lautet:

#include <stdio.h>
extern char dr_out[15];
void ausgabestring (unsigned int dr_ref,unsigned int dr_akt)
   {
      float druck;
      druck = (150.0*dr_akt)/dr_ref;
      sprintf(dr_out,"\n%f",druck);
      druck =0;
   }

Die Funktion soll beim Aufruf zwei Werte aus Assembler (R12,R14)
übernehmen, den Quotienten berechnen und das Ergebnis formatiert als
String in die Variable "dr_out" (Speicherplatz im RAM: 0x200 bis
0x214) schreiben. Die Berechnung der Variable "druck" funktioniert
einwandfrei, die Übergabe der beiden Werte ist also richtig erfolgt.
Bei dem Befehl "sprintf(dr_out,"\n%f",druck);" allerdings gibt es
einen Reset und der Wert der Variable "druck" wird nicht in das RAM
geschrieben, obwohl die Syntax des Befehls richtig ist . Wie muß ich
dies berichtigen?
Bei der Compilierung und Linkung des Programms ist keine Fehlermeldung
zu beobachten.
Wer kann mir da helfen? Ich habe die neueste Kickstart-Version von TI
runtergeladen, dürfte also nicht an der Version liegen....

Wolfgang

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen MSP430 setzt du ein?
sprintf ist extrem speicherhungrig - trotz fehlerfreier compilierung
hatte ich auch schon bei einigen controllern probleme mit dem code.

Autor: Holger Menges (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Wolfgang,

probiere es mal mit:
sprintf(dr_out,"\n%f\0",druck);

Wenn ich noch recht weiß gibt es bei sprintf je nach speichermodell
Probleme mit dem Stringende.

Viele Grüße,
Holger

Autor: Wolfgang Emmert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den MSP430 F 1122.

Hallo Holger,

Leider bringt das nichts...

W.E.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evtl. hast Du den WatchDog zu empfindlich eingestellt? [s]printf
benötigt viel Zeit...

Autor: Wolfgang Emmert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, ich hab's probiert, weder wenn ich den WDT abschalte noch wenn
ich das GIE auf 0 setze, ändert sich was.
Gibt's evtl eine Ersatzlösung?

Wolfgang

Autor: sebastian roll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi.

bei meiner entwicklungsumgebung von iar muss man die
comiler-option (oder linker?) von "small_write" auf "mid_write"
umstellen, um floating-point-unterstützung bei printf() zu erhalten.

mfg
sebastian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.