Exercises and Research Topics

Click here to go back to the course page.

A designer (in software, hardware, or both) needs to solve problems. So some items are just exercises (i.e.: "try to explain this or do that, as you now should be able to") and some are real-world issues, whether new problems to solve, or a request to find the rationale behind a choice I made. Both require some brain-time: thinking of the problem at large and being creative; I don't care care a lot (or not at all) about the real circuit or the code lines: what is important is finding the right direction, then the implementation is not interesting, it's just clock time to be spent, also called "sweat of the brow" in lawyer speak.

And how can you tell exercises from research topics? It's simple: if you solved it, it was an exercise, otherwise it was a research topic -- I found this pearl by Richard Bellman in The Art of Computer Programming by Donald Knuth.

During the interactive lessons, solutions are provided to some of the problems, sometimes by students, sometimes by me, usually after some brainstorming. Solved problems are marked as such: if you missed the discussion or the solution, please ask me by email. Such brainstorming and solutions happen in RAP mode ("random access problems"): they are not boringly solved in the order they are asked: I want you to think about them, until the time is ripe to disc{uss,lose} each of them.

Exercises that are not going to be solved, because they are just boring "study" items, are marked as such.

Table of Contents

The exercises are divided by lesson, where the lesson is where I proposed the exercise. Each of them may or may not be related to the subject matter, and sometimes they probe forward to later topics.

01- Git

02- PCB design

Here we are looking at the schematic of the TDC board.

03- C language

04- Linker (just an intro)

05- Cross compiling

06- Versatile timing

07- ARM, GPIO, running on hardware

08- Flash running, initial udelay

09- GPIO and neopixel in practice

10- Kconfig and more about time

11- PLL and printf

13- Udelay

14- Processes

15- I/O and sharp timing

18- I2C, SPI, UART

20- Interrupts

2- Threaded Interrupts

Alessandro Rubini
Last modified: May 2021