Dear @vix
I analyzed the rpmsg behavior in more detail in the recent days, so I meanwhile have a better insight int what’s happening. For example there are multiple buffers working together, and which are not perfectly adjusted to each other in size. However, I didn’t want to change too much now.
Here’s a (still somewhat simplified) view:
- For the communication between the M4 and A5, there are 3 shared memory ranges used:
- shared memory @
0x3f060000
contains the actual message data (512 bytes each) - vring[0] and [1] are two linked lists of fixed size, each element containing basically a pointer to one message. (The lists are much longer than the number of buffers in the shared memory, which is basically a waste of space…)
- shared memory @
You are correct: memory between 0x3f060000
and 0x3f064000
[there was a typo in your comment above] is used by rpmsg library, and therefore not available for anything else. The space reserved is used for 32 buffers, 512 bytes each.
I will add this to the documentation.
The 1024 messages reported in the log output are about the local buffer inside the RpMsgLib - the library reads the messages from the M4 in an interrupt routine. Your application could read these 1024 messages long after they arrived.
Regards, Andy