Embedded Computing ================== .. contents:: :local: .. toctree:: :hidden: ec embedded-computing-1 embedded-computing-2 cxx mt linux python cxx_build cxx_iface linux_dev_mgmt linux_exercise_sensors git linux_basics cxx_oo_basics linux_exercise_avg_sensor cxx_unittest linux_exercise_led_display linux_gpio mt_wait mt_lock exercise_mt_race_fixed exercise_mt_race linux_exercise_avg_sensor_parallel py_basics py_exercise_avg_display py_exercise_sensors py_web py_web_sensors 2021-SS-Stundenplan Overview -------- Knowledge Transferred ..................... Knowledge from "Computer Science and Programming (1+2)" and "Embedded Systems" is picked up and unified. * **Large scale software development**, covering topics like * Test Driven Development * Object Oriented Design * Configuration Management * **Linux** (*Operating System Concepts*). Bare metal operating systems are intentionally *simple* - as a result, they are generally less *powerful*. Linux, being a *general purpose OS*, has a number of features every developer wants if the software becomes larger, * *Address space separation* through the concept of *processes*: an abstraction of a crucial piece of hardware, the *Memory Management Unit (MMU)*. * A sophisticated yet simple *permission system*. * Natively supports a great variety of file systems and storage media. * Natively supports *The Internet*. * Natively supports optional realtime capabilities (on a per-process basis). * Depending on the underlying hardware platform, Linux offers support *non-PC type hardware* which is popular in the embedded world. * **Python** (*Programming language alternatives*). Embedded applications are historically written in C/C++ which is hard. It is often more appropriate to prototype functionality in a higher level language like `Python `__, or even use that as final production language. Course Setup ............ The `Raspberry Pi `__ is used as work environment *and* hardware platform. * It comes with a fully functional Linux distribution (based on `Debian `__). * It supports hardware that is en vogue in embedded applications, like GPIO, I2C, SPI, serial, and others. Details ------- See :doc:`here ` for a complete overview of the course structure. Embedded Computing 1 .................... (:doc:`Details `) * **Groundwork**. To lay the groundwork for an instructive set of programming exercises, the following topics are covered up-front: * :doc:`cxx_build` * :doc:`git` * :doc:`cxx_oo_basics` * :doc:`cxx_unittest` * :doc:`linux_basics` * :doc:`linux_dev_mgmt` * **Exercises and Making**. Above topics are consolidated by a set of programming exercises that involve relatively simple hardware makery. See :doc:`here ` for the details. * **Multithreading**. Although this is not exactly beginner stuff, everybody does it (wrong). It makes sense to clarify the do's and don'ts :doc:`early on `, and to consolidate the matter in another set of exercises. Embedded Computing 2 .................... (:doc:`Details `) * **Python introduction**. :doc:`Introduce a new language. ` * **Rewrite exercises**. Based on what was accomplished in C++, in "Embedded Computing 1", translate those exercises into an equivalent set written in Python (and see how simple this is). * **Web programming**. Using the :doc:`Flask ` web framework, write a :doc:`web application to visualize sensor data `. * **More advanced topics**. Use Python libraries, for example * Network programming * Exchange documents using JSON and/or CSV/Excel * Database access * **Linux Kernel Drivers** maybe?