TODO#
Stack#
didactic
goal: towards message queues, from “sensor-read”, spinlock version. main thread waiting at highest priority (main is always highest jjj link doxygen/zephyr)
transfer do-much*spinlock -> message queue sensor-produce done
possibly rename and reimplement artifacts on a branch
sensor-unlocked. following shortcomings; lets attack one after another
main thread consumes. power saving when he waits (jjj time). he has to wakeup though at a certain interval to be as much realtime as the battery can give.
in waking up, he retrieves all elements from the list that he sees. unlocked!
sensor-spinlock
wrap spinlock, test
sensor-mq, for the battery.
From the beginning
in each chapter: summarizing, what’s next step, which problem are we attacking
overview of what we’ll be doing -> aider, when done with rework
define time (monotonic in ns), and wait functions. arithmetic overloads.
messagequeue/code/sensor-produce.cpp: ohne sensor_data (ist zu lang fuer die didaktik), nur mit std::pair und von da an auto, geht das? oder besser raus in ein eigenes .h
consistent why-shell prompts in rst
what if the sensors are defined to fire only once in a week, but if they do you need to react immediately
⟶ jjj link scheduling
⟶ jjj message queues
More Todo#
Various#
Some memory model
Shell doc
Mutex -> errorcheck (check if zephyr defines it as recursive and prioinherit)
spinlock -> errorcheck (same as muex)
Time (async?)
Poll
Timers
poll signal
multiple raises overwrite previous ones
Move FD to Internal
add concept (trivially-copyable T) to MessageQueue
Reformulate Tasks? Processes? Threads? in terms of this
Enable/disable safeguards against blocking in interrupts
class FDto handle thisstart unchecked
inside the isr, prompt the user
see how everything stalls
user input -> continue
enable check
Realtime#
hmmm show priority inversion?
Interrupt Communication#
message queue/pipe usage -> blocking in isr forbidden
possibly only signal someone who’s sleeping?
one msqg for (thread, interrupt)? or
msgq1=(thread1, (interrupt1, interrupt2)), msgq2=(thread2, (interrupt3))