I teach a sophomore-level class for electrical and computer engineering majors out of the Valvano materials, we put references to the chapters in both the free online and later inexpensive print version in our materials.<p>It's great in many ways, and free-to-cheap which is a particularly nice quality in a textbook, but it is _quite_ out of date at this point: it's tied to the old "ARM Compiler v5" bespoke compiler rather than the "v6" LLVM-derived one, and even Keil doesn't ship with v5 anymore. v5 used a different assembly syntax (v6 is GNU style, being LLVM derived - fortunately the toolchain can still ingest v5 style assembly _files_ just not inline so we can keep the assembly the students interact with matching the book), different tooling for C/Assembly interop, and an assemblage of bespoke macros and extensions, so there has been some creative tooling work to keep the book and assignments consistent for the students.<p>The EK-TM4C123GXL TivaC board that is the less expensive of the two targets the Valvano materials are built around is a pretty nice if slightly expensive embedded trainer, about $20-25 for a Cortex M4F with a fairly rich assortment of peripherals, a 2nd micro configured as a programmer/in system debugger on one end of the board, easy-to-interface male AND female headers on a bunch of broken out pins, pads to tap the USB-Serial traffic while it still looks like serial, high and low speed oscillators arbitrated by a pretty fancy clock circuit, two user buttons, and an RGB LED. Powerful enough and with enough Flash and RAM to get interesting things done, not so powerful or memory rich that you can get away with modern programming decadence, and simple enough that we can talk about the nuts and bolts of any particular feature.<p>We construct from "Baby's first assembly program" through "Register-direct manipulation" and finally "Controlling external devices via the HAL functions" over the course of a semester. Because of the way the degree programs are structured, we're a little more focused on "This is how computers actually work" than on embedded applications, but I'm still pretty proud of the course and the students mostly seem to appreciate it.
Seems to miss the part where it's ok to create terrible software in embedded, with custom forks of everything, binary blobs galore. But it's all fine as it shaves a few cents from the BOM.