Skip to content

radio_esp32::adapter::calls

How often the blob has used the entries its start path leans on.

libpp arms the MAC’s receive interrupt only once it has decided receive should be on, and it is not reaching that decision — see doc/plan-radio.md. A branch it takes silently is invisible from here, but the calls it makes on the way are not: an entry that never fires, or fires far fewer times than the ones around it, is the shadow of the branch that was not taken.

Only the entries that carry the start path, not all 115. Allocation, because a descriptor ring that fails an internal check is skipped without a word; the queue and semaphore pairs, because that is how pp_task moves between states; and the two context predicates, because the blob guards raw register writes on them and a wrong answer there is exactly a hardware-write that never happens.

fn get(which: usize) -> u32

The count for which.

const CALLOC: usize;
const ENV_IS_CHIP: usize;
const EVENT_POST: usize;
const FREE: usize;
const IS_FROM_ISR: usize;
const MALLOC: usize;
const N: usize;
const NAMES: [&str; 14];

In the same order as the constants above.

const QUEUE_CREATE: usize;
const QUEUE_RECV: usize;
const QUEUE_SEND: usize;
const SEMPHR_CREATE: usize;
const SEMPHR_GIVE: usize;
const SEMPHR_TAKE: usize;
const TASK_CREATE: usize;
const TIMER_ARM: usize;