doom: fix reboot, unreachable L1 demon and no exit; get mem: don't lock IRQs

- doom: each turn shrank the view vectors (cos = 1 - ROT/8, scale
  ~0.993, plus fixed-point truncation), so the level seemed to grow
  and after ~10 turns a zero wall height was divided by: usage fault,
  reboot. The view is renormalised to unit length after every turn;
  the ray step and wall height are clamped
- doom: the L1 demon spawned inside a wall tile, so it could not be shot
  and the portal never opened; it now mirrors the imp at (11,4)
- doom: the 60 s UI lock engaged mid-game, so the exit tap went to the
  lock screen; the Doom tick now keeps the lock and auto-off timers
  alive. The user button no longer also fires (joystick press does)
- doom: sprites keep a brightness floor at distance (L2 boss is still
  hard to see; open)
- get mem (MEM_STATS builds): walk threads with k_thread_foreach_unlocked;
  the stack scan under the thread-list spinlock held IRQs off long
  enough to trip the BLE controller's radio-ISR latency assert
This commit is contained in:
liquidraver committed 2026-09-25 10:48:20 +02:00
1 parent 38f815a0a1
commit e6d6ecef80
3 files changed
+89 -25

No files matched your search

+6 -1
View File
@@ -202,7 +202,12 @@ static void memStatsLine(int n, char *reply)
struct mem_stats_walk w = { n, 0, reply };
reply[0] = '\0';
k_thread_foreach(memStatsThread, &w);
/* Unlocked: the callback scans a whole stack for its high-water mark,
* and k_thread_foreach() holds the thread-list spinlock (interrupts off)
* across it -- a few hundred us on nRF52, past the BLE controller's
* 150 us inter-frame deadline: an advertising event asserted
* (lll_adv.c "Radio ISR latency") and rebooted the node. */
k_thread_foreach_unlocked(memStatsThread, &w);
if (reply[0] != '\0') {
return;
}