Here are some exercises about lesson 08, where we add GPIO and printf. Some are very simple, like exercise 5, some are not, as usual. Exercise 6 is not related to this lesson, but it's interesting (and a real problem with real code). 1- As requested in the video, please suggest changes to the better in the GPIO API I committed. There are suboptimal details (try to use it yourself, you will note). 2- Assuming the new API is incompatible, please suggest a way to migrate from the current API to the new one. Imagine you have several users of your current API, for example by replicating this include/ and lib/ in other packages (that want to track this "uspstream"), or that you have dozens of applications in this very package (the two situations are different, and the best approach differs). 3- Explain why the three leds in the TDC board are connected to ping 0_1, 1_28 and 1_31. 4- Suggest a way to add "external" GPIO pins (e.g. an I2C extender, but that's irrelevant. What I want is an API to plug new GPIO pins that are then accessible with the standard API (esp. gpio_set() and gpio_get()). 5- Now that we have pp_printf, we really want to select among the several implementations, instead of just using vsprintf-full.o. Please fix the code base to do that. 6- With current code, we can use time_after() with jiffies, but we could still do the buggy comparison "j < jiffies". Please suggest a way to force a build failure whenever the user touches jiffies as an integer, to force consistent use of accessor functions (time_before(), but also a new jiffies_add() that must be provided). 7- Why does tests-tdc/hello include GPIO code, even if it doesn't reference GPIO and we use -gc-sections?