sprintf beim MSP430

Gast #128039
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
Gast #128041
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
Gast #128045
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren