Categories
other thoughts

Embedded systems

[Thursday: 30 minutes on the treadmill; Saturday: 5.6 miles on the riverfront]

I have my WWVB arduino clock working pretty well. I need to get it packaged into some sort of form so that I can mount it on the wall.

I would like to also explore the BPSK modulation mode of WWVB, but I haven’t figured out how to do that with the Teensy and audio board.


My new job title since July is Embedded Systems Engineer. So I’m learning more each day about embedded systems.

There seems to be some levels of sophistication in the embedded systems world.

At the low end are 8-bit microprocessors that run a single execution thread. They may have some sort of boot-up program that will help you reload their program memory. I think of the PIC chips I’ve worked with in the past. And I know there are other similar devices from a number of vendors. You write your program, send it to the chip in some way, and every time the thing starts up it starts executing your instructions. The program will usually have some sort of central loop and possibly some interrupt handlers.

A popular single-thread system is the arduino development environment. It can run on a variety of chips.

Then there is a jump up to chips that run an operating system of some sort. The OS will help do process and memory management. You can run lots of processes either on multiple processor cores or in a time-sliced arrangement.

My WWVB clock uses a Teensy 4.0 which is a Cortex M7 and running the arduino environment. But the same chip can run an operating system. So there is some overlap.

And the OS systems include Raspberry Pi and the BeagleBone and lots of SoC devices (SoC, system on a chip).

Most of the embedded controllers I’ve run into at work are the SoC type which have some OS running and some linux-like environment. So I’ve been learning about the Yocto project, a system for doing development on such devices.

Another point of variation is where you do the development work. On a PIC device you do the development and then “burn” the program on to the chip.

On the BeagleBone Black you can do the editing and compiling on the device just like doing it on a laptop or desktop machine.

On a lot of these SoC devices there isn’t a display or a keyboard and they don’t want to take up the space for a compiler and development tools on the device. So you build in an environment on your PC and download the running code to the device. It may be sent as a bootable OS image, or it could be just one package or even just a few executable files. That’s where the Yocto thing comes in: it will let you build a complete bootable linux image or a package or an executable.

Another issue that comes into it is the processor family… a lot of the SoC devices use ARM architecture and I get the impression that most development for those devices is done via cross-compilation.

So, what makes something “embedded”? I don’t think it is an easy question. Is the processor in my cell phone embedded? Well, it sort of is. But there is a display and user interaction, so maybe not. A similar chip buried in a display or a raid controller or a video game console would be considered embedded I would think.

I’m learning a lot at my new job and really enjoying it.