.. include:: 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 |longrightarrow| jjj link scheduling |longrightarrow| jjj message queues More Todo --------- Various ....... * Some :doc:`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 :doc:`/trainings/material/soup/linux/sysprog/scheduling/processes-and-threads` in terms of this * Enable/disable safeguards against blocking in interrupts * ``class FD`` to handle this * start 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))``