pub struct CallerInboxStorage<const SLOT_BYTES: usize, const DEPTH: usize> { /* private fields */ }Expand description
Backing storage for one queryable’s request ring: DEPTH slots of
SLOT_BYTES bytes, plus one InboxEntry each.
Declared as a static by the family that knows its own bound – for the
ROS parameter services that is nros-node, the only crate that can see
both the contract’s declared parameters and the store’s capacities
(phase-446 F3’s param_service_bound). It is static and not heap for
the reason phase-391 keeps every payload buffer static: the Zephyr heap
gate prices arena + 24576 and a new term in it is a new way for an image
to stop linking.
Sync because the ring over it is SPSC. The producer is the transport’s
read task, the consumer is the executor’s spin, they are never on the same
slot, and the ordering is carried by the cursors in the backend’s
per-queryable header – the contract a backend-owned inline array already
relied on, now stated on the type that leaves the backend.
Implementations§
Source§impl<const S: usize, const D: usize> CallerInboxStorage<S, D>
impl<const S: usize, const D: usize> CallerInboxStorage<S, D>
Sourcepub const BYTES: usize
pub const BYTES: usize
What one queryable’s ring costs at this geometry: the slots plus their entries. The per-queryable header is NOT in it – that is paid once per queryable whatever the ring is, and it stays the backend’s.
Sourcepub const fn slot_bytes(&self) -> usize
pub const fn slot_bytes(&self) -> usize
Bytes one request slot holds.