The series is mostly complete, except one to two posts on more advanced topics like validation and lockless programming.
- hardware (embedded hardware, brushless motors, propellers, batteries, radio, etc.)
- guidance (sensor fusion algorithms, kalman filtering, etc.)
- navigation (GPS/GNSS, magnetometers, barometers, accelerometers, gyroscopes, etc.)
- control (PWM control, PIDs, feed forward loops, etc.)
1) Real-Time Embedded Systems: Design Principles and Engineering Practices by Xiaocong Fan. - Good text book.
2) Introduction to Embedded Systems: Using Microcontrollers and the MSP430 by Manuel Jiminez et.al. - Very good book teaching you bare-metal MCU programming.
3) Hands-On RTOS with Microcontrollers: Building real-time embedded systems using FreeRTOS, STM32 MCUs, and SEGGER debug tools by Brian Amos - Great book showing the use of all tools/ecosystem needed for RTOS programming.
4) POSIX.4 Programmers Guide: Programming for the Real World by Bill Gallmeister. - The classic indispensable work on "real-time programming" for Unix-like systems.
While there quite a few hiccups along the way - you will be able to bring down jitter or OS noise to around 1 us. Of course a microkernel based OS like QNX can take you down to around 1 ns - but then the point of using Linux is that you are able to utilize the ecosystem around it.
Look into isolation, real-time patch and high performance computing.
What is your goal as this is a broad field?
If you wanna just start with it, I would try to read up on cars, can Bus and how all of that works.
You can set up a timer interrupts in Arduino, There are web-JavaScript tutorials to set up callback function to execute every 3000ms, but you won't be doing RPC over network with timestamps and expiration, without going neck deep in something specialized and chaotic as ROS2.
I'm picturing some sort of distributed, networked, timestamped system that can schedule remote executions and construct time correlated observations, something obvious to designers/architects of original SNMP spec and NIST 4D/RCS project, and I'm predicting we'll have an industry standard framework just casually appearing by the end of this decade. It's weird we don't have one.
- Traditional Unix optimises for sharing resources and using them efficiently - 'multiprocessing', 'time slicing', 'resource sharing', 'garbage collecting', etc.
- Realtime: optimises for deterministic low latency. SCHED_FIFO processes that use a logical CPU and do not yield during the trading day, use money to buy more memory or crash rather than allow the GC to destroy your latency during the trading day.
https://access.redhat.com/documentation/en-us/red_hat_enterp... is RHEL RT focused but the kernel optimisations discussed are all OSS licensed.
Linux is too complex to provide any sort of guarantee; real-time Linux is just soft realtime.
Look at an actual RTOS instead, such as seL4[0].
This however may give you a nice point to dive in from:
https://ubuntu.com/engage/an-introduction-to-real-time-linux...
for more advanced projects consider getting preempt-rt going in a yocto install.
Code compiles to assembly instructions which typically appear atomic to the author, however, such instructions may take variable numbers of cycles to execute.
2. use hwlatdetect
3. give up when you realize you can't buy commodity hardware with documented NMIs or open-source firmware