Problem mit Str()

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Problem mit Str()

      Hallo,

      kann mal jemand folgendes bitte überprüfen

      Quellcode

      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
      Alles anzeigen
      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.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Guenther ()