PicoC Programmbaustein Werte als Text ausgeben

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Benjamin Jobst
    Lox Guru
    • 25.08.2015
    • 1194

    #1

    PicoC Programmbaustein Werte als Text ausgeben

    Hallo zusammen,

    ich versuche schon seit einiger Zeit in PicoC, mehrere Zahlenwerte (vom analogen Eingang oder intern erzeugt) in einen String zu schreiben und über den Textausgang des Programmbausteins auszugeben.
    Bisher scheitere ich immer daran, dass ich zwar die Werte mit sprintf in ein Char[ ] zusammenstellen kann, bei der wiederholten Durchführung bleibt aber der Text der letzten Durchgänge erhalten. Verschiedene Versuche mit free() oder NULL-Definition haben bisher nicht funktioniert und mir fällt jetzt nichts mehr ein...

    Also an die PicoC-Cracks unter euch: Wie bekomme ich einen String sauber zusammengeflickt, ohne SpeicherLeaks oder Artefakte?

    Anbei noch mein Beispiel-Code:
    // write program here in PicoC
    char szBuffer[128];
    float f1,f2,f3,f4;
    float Test[4];
    int nEvents;
    while(TRUE)
    {
    nEvents = getinputevent();
    if (nEvents & 0xe)
    {
    Test[0] = getinput(0);
    Test[1] = getinput(1);
    Test[2] = getinput(2);
    Test[3] = Test[0]+Test[1]+Test[2];

    for (int i=0;i<4;i++)
    {
    sprintf(szBuffer,"%s;%f",szBuffer,Test[i]);
    }
    setoutput(0,Test[3]);
    //sprintf(szBuffer,"%f * %f + %f = %f",Test[0],Test[1],Test[2],Test[3]);
    setoutputtext(0,szBuffer);
    printf(szBuffer);
    *szBuffer=NULL;
    free(szBuffer);
    }
    sleep(100);
    }
    MfG Benny
  • Nero
    Smart Home'r
    • 04.09.2015
    • 91

    #2
    Hi Benjamin,

    hast Du schonmal "memset"probiert?

    memset(szBuffer,"",128)

    Hier gibt es etwas Input zu memset...

    Kommentar

    • Benjamin Jobst
      Lox Guru
      • 25.08.2015
      • 1194

      #3
      Hallo Nero,

      danke für den Hinweis. Die Mem- und Alloc-Funktionen habe ich bisher immer etwas gemieden aufgrund einiger Speicher-Probleme, die ich zu Beginn mit PicoC einmal hatte.
      Aber so funktioniert es tatsächlich! Der Befehl ist übrigens
      memset(szBuffer,NULL,128)
      mit "" funktioniert es bei mir nicht.
      Mal sehen, wie zuverlässig es jetzt läuft, danke schonmal!
      MfG Benny

      Kommentar


      • Gast
        Gast kommentierte
        Kommentar bearbeiten
        Hi Benjamin,

        stehe nun eben vor einem ähnlichen Problem.
        Will zwei Zahlenwerte zu einem String zusammen bauen. Und dann ausgeben.
        Aber irgendwie klappt es bei mir nicht...

        Kannst du noch mal dein PicoC Code posten? Danke.

        SG, Werner
    • Benjamin Jobst
      Lox Guru
      • 25.08.2015
      • 1194

      #4
      Hi Gast am Ende habe ich das Zusammenbauen über PicoC doch gelassen, weil es auf Dauer nicht sauber funktioniert hat - Problem war immer, dass irgendwann der Speicher übergelaufen ist, das habe ich nie sauber in den Griff bekommen.
      Ich habe meine Werte am Ende über SetIO in Virtuelle Eingänge abgelegt, um sie woanders wieder abgreifen zu können...
      MfG Benny

      Kommentar

      • romildo
        Lebende Foren Legende
        • 25.08.2015
        • 5144

        #5
        Gast
        Hallo Werner
        Sofern Du zwei Analogwerte über die ersten zwei Analogeingänge einlesen und diese an den ersten Textausgang weitergeben möchtest, könntest Du es so oder so ähnlich versuchen:
        Code:
        //Romildo
        //2 Analogwerte an Textaustgang weitergeben
        int nEvents;
        float Wert1;
        float Wert2;
        char Wert[100];
        
        while (TRUE)
        {
            nEvents = getinputevent();
            if (nEvents & 0x18)
            {
                Wert1 = getinput(0);
                Wert2 = getinput(1);
                sprintf(Wert, "%f / %f", Wert1, Wert2);
                setoutputtext(0,Wert);
            }
        sleep(1000);
        }
        lg Romildo

        Kommentar

        Lädt...