Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Ringregister

bertl71
2006-10-10
2006-10-11
  • bertl71 - 2006-10-10

    Hallo,

    ich habe folgendes Problem.

    Ich möchte serielle Datenströme in einem Ringpuffer

    speichern.

    Wie ich das sehe, benötige ich ein beliebiges Array und einen Zeiger der

    mir die Position im Array lokalisiert.

    Nun meine Fragen:

    Was mache ich wenn ich am Ende angekommen bin, springe ich dann einfach wieder in das 0-te Array Feld ?

    Wie initialisiere ich das Register korrekt ?

    Ich hoffe mir kann da jemand weiterhelfen

    Danke

     
  • Benjamin - 2006-10-10

    Einen Zeiger hast du ja schon über die Indexvariable:

    Zuerst legst du dir ein Feld und zwei Indexvariablen an:

    jetzt kannst du das Feld vollschreiben. Angenommen, pro Zyklus komm

    maximal ein Byte an und du kannst die Daten schneller wegschreiben, als sie herienkommen, reicht etwas in der Art aus

    IF neueDatenVorhanden THEN
      Buffer[posSchreiben] := neueDaten;
      posSchreiben := posSchreiben +1;
      IF posSchreiben > 100 THEN
        posSchreiben := 1;
      END_IF;
    END_IF;
    

    Mit der Indexvariablen für den Lesevorgang verfährst due genauso.

    MFG

    Benjamin

     
  • hugo - 2006-10-10

    hallo schau dir mal den source code auf w www.oscat.de w an

    dort ist unter logic-memory ein fifo und ein stack

    viel spass

     
  • bertl71 - 2006-10-11

    Hallo benjamin,

    bei mir ist aber ein kompletter Datenstrom zu erwarten, also nicht nur ein Byte pro Zyklus. Wie kann ich das Problem lösen ??

    mfg

     
  • Benjamin - 2006-10-11

    Wieso schreibst du dann nicht alle Daten, die du pro Zyklus erhalten hast in den Zwischenspeicher?

     

Log in to post a comment.