Problem mit Str()

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Problem mit Str()

      Hallo,

      kann mal jemand folgendes bitte überprüfen

      Source Code

      1. $regfile = "m328pdef.dat"
      2. $crystal = 16000000
      3. $hwstack = 48
      4. $swstack = 48
      5. $framesize = 48
      6. $baud = 9600
      7. $sim
      8. CONFIG SINGLE = SCIENTIFIC , DIGITS = 1
      9. Dim Feu1 , Feu2 , Feu3 As Single
      10. Dim Feu1S , Feu2S , Feu3S As String * 8
      11. Feu1 = 999 / 10
      12. Feu2 = 999 / 10
      13. Feu3 = 10 / 10
      14. Do
      15. Feu1S = Str(Feu1 , 1)
      16. Feu2S = Str(Feu2 , 1)
      17. Feu3S = Str(Feu3 , 1)
      18. Print Feu1 '99.9
      19. Print Feu1S '2 HÄÄÄ???
      20. Print Feu2 '99.9
      21. Print Feu2S '0 >>> Wie bitte???
      22. Print Feu3 '1.0
      23. Print Feu2S '0 >> was zum Deibel!!!
      24. 'Wait 3
      25. Loop
      26. End
      Display All
      bin etwas ratlos
    • Hallo caargoo,
      ich glaube, das dies ein Bug in der String Funktion ist.
      Du gibst zwar die Anzahl der gewünschten Nachkommastellen an, der Compiler berechnet das aber so, dass er erst die normale Str() Funktion anwendet und dann eine Str-Ende (0) auf die Position hinter der Anzahl Stellen setzt. Also damit den String einfach abschneidet. Dabei werden Strings mit 10 Zeichen um STr-End erzeugt, also 11. Dabei überscheibt dann ein Str() befehl den vorhergehenden.
      Das kannst du sehen, wenn du die Strings mit mindestens Länge 11 erzeugst.

      Bei deinem Programm sieht das SRAM nach dem Feu2S = Str(Feu2 , 1) so aus:
      Strings.png

      Die roten Stellen wurden gerade durch den Befehl überschrieben. Wie man abzählen kann, werden 11 Zeichen geschrieben, ab dem 10 wird der Inhalt von Feu1S überschrieben.
      Den String sollte der Compiler besser im Frame erzeugen und dann den reduzierten zurückkopieren. Bedeutet natürlich mehr Zeit. Deswegen wurde wahrscheinlich diese direkte Variante gewählt.

      The post was edited 2 times, last by Guenther ().