News:

  • October 26, 2026, 04:06:54 AM

Login with username, password and session length

Author Topic: Ideas for message buffering  (Read 7575 times)

CReese

  • Hero Member
  • *****
  • Posts: 184
Ideas for message buffering
« on: April 16, 2014, 06:08:58 PM »
Hello,

I'm streaming in message data into a bunch of arrays. For example, I have a 15-byte message that I have in arrays named after what each byte means:

ByteONE0-255
ByteTWO0-255
...

Each time I read a message, I MOVER the range, e.g. move 255 bytes from ByteONE0 to ByteONE1, and plop the new message into the the zeroth position.

So I've got a FIFO queue .. what's the best way to read it? I've created an auxiliary array, MsgProcStat0-255, that I can use to store status info, like 0="unprocessed", 1="read and processed", 2="read and error", etc.

So I need to start at the end of the array and move forward, processing messages as they need to be. How do I:
a) Do this quickly
b) Avoid race conditions where a message is inserted while the processor moves to the next message that needs to be processed?

Given the message receipt rate, I could probably get away with requiring processing before the next message is read, but this doesn't seem like the most elegant solution. I'm sure this is an age-old problem.

Thanks,
Colin

rlp122

  • Sr. Member
  • ****
  • Posts: 92
Re: Ideas for message buffering
« Reply #1 on: April 17, 2014, 08:35:27 AM »
If it were me, I'd probably set up three arrays.

1) This is the main FIFO array
2) This is input buffer #1
3) This is input buffer #2

When I first receive a message I flag the transfer program that I need to start the transfer for #2 to #1.  I then switch my receive buffer to #3.

After I get done processing #2, if I have messages in #3, then I set the flag to process #3 and go back to receiving on #2.

Flippity, floppity, back and forth keeping track of how many messages I need to process in each buffer as I move back and forth between them.

But like all programming solutions there are a few dozen other ways to skin this cat.

plcnut

  • Hero Member
  • *****
  • Posts: 815
    • premiersi.com
Re: Ideas for message buffering
« Reply #2 on: April 17, 2014, 11:42:18 AM »
Every time you do a MOVER, you can:
Code: [Select]
MATH
V100
if(V100<MyMaxBufferLength,V100+1,MyMaxBufferLength)

Now you can start your message viewer at Message[V100].
Edge trigger this rung to view:
Code: [Select]
STRPRINT
SL_MyDisplay
"Message[v100]"

MATH
V100
if(v100>=1,V100-1,0)
Circumstances don't determine who we are, they only reveal it.

~Jason Wolthuis
Premier Systems Integration, LLC
https://premiersi.com