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.
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.
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.
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.
Unfortunately it's mostly locked up in a university CMS, and I haven't put copies out on the public 'net partly just to slightly obscure the semester to semester changes we make to throw off lazy cheaters.
Not in Europe. Since FAANG level jobs aren't that numerous here compared to US so the difference between embedded and non-embedded work is close to zero. Pay is pretty similar.
Add sure, but if your only target in life is working for FAANG & Co. then every other tech job in the world pays very little.
You might as well also not want to be a doctor, teacher, lawyer, as well because hey, FAANG pays better. Everyone should abandon their passions and career dreams and become devs for FAANGs because pay is everything that matters in a career.
Yeah, I work in a robotics company in Europe- our embedded people are paid essentially the same as web/enterprise software developers in the same market. Definitely a lot less remote Opportunities (though usually for institutional reasons- most of the work can be done remotely, if company is organized for that- which not a lot are).
EEs are IMHO underpaid in both sides of the pond though.
Embedded can be remote, if the hardware is small enough and cheap enough to ship one to each remote developer.
I worked on telephones for the hard of hearing, and we had some remote developers. No problem.
On the other hand, there are embedded systems that are for 3D printing spaceship hulls. I kind of suspect that remote isn't going to fly for working on those systems...
You can probably do (most) of that remotely. If you're writing embedded systems that can't be 95% tested off the hardware, you're living in unnecessary pain.
I work on devices bigger than a car and sure, occasionally I have to visit the 'office', but almost everything can be debugged and tested remotely.
Yes, remote access to test units (if practical, I.e. more than one instance of system exists) or the real one, simulated h/w for higher level software (i.e. a GUI that connects to simulated device instead of real one).
Obviously there will always be some physical component to embedded development, but in many cases it is possible to do a lot remotely.
> EEs are IMHO underpaid in both sides of the pond though.
Because of EEs in PRC and Taiwan with relatively speaking much lower salaries for about the same level of competency [who also have native-level access to the design/supply ecosystem over there].
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.
>Seems to miss the part where it's ok to create terrible software in embedded
As opposed to the absolute perfection that is modern web, enterprise and mobile SW?
>But it's all fine as it shaves a few cents from the BOM.
Every engineering job, including SW development, works to reduce material costs and automate away other jobs. Why do you feel embedded development is somehow worse here?
Embedded development is substantially worse when it comes to out of tree unmaintainable kernel patches, compiler forks, binary blobs around terrible hardware etc etc.
Completely incomparable to web, enterprise and mobile (android and co is a part of the embedded trashfire of course). They all have their problems but are minor league compared to embedded development hell.
Embedded development takes BoM reduction to the extreme and piles all the technical debt onto software.
Binary blobs you say? How about how our entire lives are ruined by having to use garbage apps like Teams every day or any other multitude of garbage websites on a daily baiss ?
Did you actually work in the embedded industry, or are you just venting on some bad experiences you had with some boards/phones?
You know, embedded is more than r-pi clones and android devices, right? It's auomotive, aerospace, industrial automation, healthcare, etc.
I cannot overestimate how mistaken you are but you seem to be already set in your ways, and have a bone to pick so I'll leave the conversation here to save my sanity as you can't be reasoned with nor is anyone's time worth it to convince you otherwise.
Unfortunately the industry I am in (multimedia) is slowly getting invaded by all the awful embedded development practices, binary blobs, custom forks, hacks galore. It's ruining an area where there was clean code, no blobs.
I remember people hacking on the binary of the MS mpeg4 encoder to create "DivX" binary blobs are everywhere (though much less so in every industry than they were 30 years ago)
> android and co is a part of the embedded trashfire of course
I don't consider e.g. Android phones to be embedded. A smartphone is much more like a small laptop. That being said, there is a sliding scale; e.g. car infotainment systems have properties of both embedded and non-embedded software.
embedded hardware has much simpler cost calculations than web, it's pretty easy to come up with an out the door unit cost for hardware, while a web service might not even have any coherent idea of a unit sold, let alone what it costs before there are users
and a simple number is a very easy bludgeon to wield in discussions about engineering choices
We are slowly getting better at this. Most embedded Linux companies for example have shifted or are in the process of shifting to an upstream-first policy. A lot of the toolchains are open, busybox is used everywhere. A lot of the really good HALs are open source. We're getting there!
I've been using Zephyr lately and have been really enjoying it. It still has the vendor HAL libraries available (e.g. Microchip/Atmel ASF), but the devicetree-based HAL has been fabulous to work with. I've tried a number of different embedded frameworks/RTOSes over the years, but it's the first that I actually feel happy using. There's a few sharp edges for sure, but it's at least an order of magnitude better than anything I've used in the past. One thing that's been particularly good is that the abstractions feel right, and it's allowed our team to collaborate on firmware without constantly tripping each other, because the module boundaries and abstractions are good.
This is good to hear. I'm just getting up and running with tutorials for a Nordic IoT SIP using Zephyr, with plans to develop a new model of an agricultural data monitoring/control product we've been offering for a few years. So far it seems really good. I personally have very little experience with embedded software (many years with web software) but am finding it easy to pick up.
Great to know, Zephyr is on my to-use list and I need move it up the list more. Heard good things about it. It might become the Linux OS for low resource MCUs as the trend goes, it's also a LF(Linux foundation) project and vendor neutral, very promising.
I've been using Zephyr on an Atmel/Microchip SAMD21 for $WORK and it's been awesome.
I have an RP2040 sitting on my desk for a personal project and the plan was to use Zephyr for that as well, but it seems the WiFi is based around a binary blob and a weird interface to it that the Arduino BSP has wrappers for... It's been crunch time at work and I haven't gone back yet to see if the RP2040 port is coming along further, but on the Saturday I was looking at it, it seemed like connectivity was potentially going to be an issue for now.
ESP32 support is currently great for some chips and a WIP for other chips. I got unlucky and the one board I planned to use for a different project was pretty much completely unsupported, but I found a different one in my parts bin that only took about 4 hours to get going with the sensors I had planned on using (I2C or SPI, I don't recall), Bluetooth Central for some different sensors, and WiFi to connect it to the local network. It was really smooth!
There is quite a bit of interesting work in the embedded Rust space on this. The embedded-hal project has made some progress on standardizing traits for peripherals and there are some decent HAL crates that have largely adopted those standards. The stm32-hal crates are fantastic.
rust is too hard to use for me, if I need pick up a modern language for low level it will be zig instead of rust.
while rust might be fine for MCU low level embedded, it does not work for mid-range embedded linux when you have 64MB storage for example, as rust is by default static linked, a few of rust executable will fill up the storage, unlike c or c++ or zig where they can share some libraries _easily_ to save space.
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.
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.
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.