Note: this assert is unrelated to #5679.
Describe the bug A clear and concise description of what the bug is.
With very heavy traffic, the following assert triggers (line 747):
To Reproduce Information to reproduce the behavior, including:
make -f examples/Makefile-efr32mg12 BOARD=BRD4161AExpected behavior A clear and concise description of what you expected to happen.
No asserts. The queue used to cache the packets sent with FP set is of the same size of the internal metadata FIFO. Quoting RAIL documentation:
Supplementing the receive FIFO used for packet data, the RAIL library also allocates an internal packet metadata FIFO capable of holding up to 16 packets' worth of metadata. An entry in this FIFO is made on every packet completion (successful or not) signaled to the application. If the application calls RAIL_HoldRxPacket() that entry is held along with any of its packet data in the receive FIFO.
Console/log output If applicable, add console/log output to help explain your problem.
None.
Additional context Add any other context about the problem here.
I increased ACKED_WITH_FP_SLOTS to 32, and I haven't seen the problem again, even under heavy traffic. However, I would like to be certain that this is a safe value. Maybe Silabs can shed a light on this?
@dismirlian - thanks for reporting this issue. We are looking into it.
@dismirlian Given your testing with 10 sleepy end devices under heavy traffic, I'm inclined to say this value is safe. You can go ahead and submit a PR. We will also revisit our implementation of this sAckedWithFPFifo queue in our PAL soon.
As an aside, I'm curious -- what are the data rates / polling rates in your "heavy traffic" testing?
@suveshpratapa thanks for your answer. We haven't seen any issues since we increased ACKED_WITH_FP_SLOTS to 32. However, I still don't understand why we would need to increase this, if the internal FIFO and this FIFO should work in "lockstep".
The "heavy traffic" is 10 sleepy devices doing the following at the same time:
This is of course an artificial scenario, which we are using to stress the network.
Thanks!
@dismirlian We are also trying to understand why it is not working in lockstep as intended, which is why I asked you the data rates because I'm curious if it's a timing issue in RAIL. We will definitely look into the frame pending implementation in radio.c further. For now, your workaround should be fine.
Most helpful comment
@dismirlian We are also trying to understand why it is not working in lockstep as intended, which is why I asked you the data rates because I'm curious if it's a timing issue in RAIL. We will definitely look into the frame pending implementation in radio.c further. For now, your workaround should be fine.