Some years ago, I did a lot of embedded systems: barcode readers, sensing devices, etc. I even did a Fast Fourier Transform on an Analog Devices board once just for fun. (worked too!)
Most of the development was on wire-wrapped prototypes and sometimes I even had to rewire some mistakes. I can read schematics. I still have my old Oscilloscope.
I am an old time C and C++ programmer and I understand linux.
Now my questions:
1. What are the popular processors today; I'm thinking Arm
2. Can I do Commercial Embedded programming at home on a store bought board with a bunch of software? Can it be done on a Mac, or do I need to do it on Windows.?
3. How does one go about getting work? Freelancing?
Ok, so it's either Embedded systems or learning all about how to be a "Full Stack Programmer" with Django, Spring and a bunch of other esoteric technologies. :-)
Hi. I'm in pretty much the same situation. Was programming 8080's -- and even 4040's -- back in 1975, for use in embedded systems. I did a _LOT_ of software and systems in the years since, but mostly for aerospace, so not usually embedded. Now I'm trying to get back in. Here's my take:
1. I agree with you that ARM is the logical choice of CPU, _BUT_ nobody says "ARM" and "assembler" in the same sentence. To make the ARM super-efficient, they've made the instruction set very complex. Just about every instruction can be executed conditionally, then cause a conditional branch based on the results. I tried my best to learn ARM assembler, until I learned that even Jack Ganssle -- the ultimate expert on ARMs -- never uses assembler. Fortunately, as others have said, the C compiler for ARM can do pretty much anything you need done.
2. I would steer away from the Raspberry Pi, for two reasons. First, if you like to get down to the guts of the machine, you will not find that easy with a Pi. The RPi uses the Broadcomm chip which has the ARM, the graphics chip, and a lot of the I/O stuff packaged together. Broadcomm considers the boot code to be proprietary, so you don't get to see the down 'n dirty hardware-level interfaces.
But the main problem with the Pi is that it has no analog I/O. It has GPIO pins, but no way to get analog signals into and out of them.
From what I see, more people are using the RPi for streaming videos and playing music, than for embedded work.
3. I see a lot of folks here are Linux fans -- not that there's anything wrong with that. _BUT_ do not let anyone kid you: Embedded Linux is still Linux. For the things I suspect you like to do, it's going to be way too weighty. As a personal point, anyone who says "embedded system" and "vi" in the same sentence is _NOT_ an embedded system programmer.
4. IMNSHO, if you want to get into making lights flash and motors whir, you should definitely start with an Arduino. They're cheap, have the analog I/O built in, and can be programmed in C++. Google around, and you'll find a ton of tutorials & hardware goodies to tinker with. I recently bought an Elegoo Mega 2560 kit, which has every I/O device you can imagine, and then some.
Yes, it's true, the Arduino uses the 8-bit AVR processor, not an ARM. But it's running much faster than the 8080's of our day.
5. I've also fallen in love with the Texas Instruments MSP430. It has 16 16-bit registers and a layout (and instruction set) very similer to my old favorite, the Moto 68000, The TI chips feature ferro-electric flash memory (FRAM), which is very fast on both read & write. For all practical purposes, you can consider the FRAM to be the same as RAM, and use them to hold both data and code.
TI has a wonderful array of development boards, which have different peripherals built in. They've also got tons of tutorials.
6. I heard you say that you'd like to deal with comm stuff like TCP/IP etc. That certainly goes well with IoT. But have you considered WiFi instead? Seems to me that naving a microcontroller device on your local network could be lots of fun. Both Arduino and TIMSP430 offer boards with WiFi built in.
7. About making $$$: I think you're gonna be shocked to find out just what people are doing at home these days. In our 8080 days, it took a whole world of peripherals to turn the chip into an embedded system. Our 1975 controller was about the size of a washing machine . Nowadays, you can not only get a whole system over the counter, but you can lay out your own circuit boards, and get them made in quantity 1, at reasonable prices,
Heck, these days you can even 3-d print your own gadget, then populate it with the hardware. The sky's pretty much the limit.
As for hooking up with potential customers, I see that LinkedIn has a new "subsidiary" called Alignables. I have no idea what the word means -- does it mean "malleable?" -- but Alignables is all about making contact with LOCAL businesses and experts. They sort the folks out by ZIP code. It's free.
Thanks for sharing your research. It was all very interesting, especially about the ARM assembly code.
I have a question about Arduino: I have an older Arduino board that my daughter gave me. What I downloaded from Arduino is a miserable editor and is C only. How does one do C++ on that board.
No, the Arduino IDE _DOES_ use C++. It just doesn't look like it because the general structure -- the setup() and loop() functions. plus most of the built-in library functions -- are basically C.
If you Google "Arduino IDE", you'll get lots of hits describing the language and how best to do things.
One important caveat: Don't get too ambitious with malloc and free. There is no garbage collection in Arduino -- nor SHOULD there be, in any embedded system. So whatever classes and instances of a class you create, you should expect them to stay in place until you reset the program.
If you don't like the Arduino editor (I do), I see that Visual Studio 2017 supports Arduino. Check this link:
>> 1. What are the popular processors today; I'm thinking Arm
My opinion: the most popular processor is the processor the customer has already decided upon before contracting with you to write code for it! :-) I have developed software for ARM Cortex M0, M3, M4, and M7 based processors. Recently my first PIC, a PIC24. In the embedded linux world, ARM A8 and A9, etc. Seems like a MIPS or two and even an ESP32 were thrown into the mix at times.
>> 2. Can I do Commercial Embedded programming at home on a store bought board with a bunch of software?
Yes and no. Yes, certainly can work at home, but be ready to travel as needed. My office and lab are at home in a dedicated space with a reasonable set of lab equipment supporting firmware development, troubleshooting, and repair of early prototypes.
Regarding, "store bought boards", the answer is 'no' but 'yes'. Clear standard off the shelf boards are great starting points, but eventually the customer is going to need the real production board customized for their product, form factor, etc. In my case, the customer provides the prototypes, etc. I provide "usual" tools, debuggers, IDEs, lab equipment, etc.
>> 2. Can it be done on a Mac, or do I need to do it on Windows.?
Ahh... the never ending debate. Yes. and Yes. My primary computer is a fully loaded 2015 Mac Book Pro. It was not cheap, but I am in love with the screen and the way Mac supports multiple monitors. That being said, this is likely my last Mac given the latest decisions Apple has been making with their laptops. So, that being said, my Mac is just a computer. I purchase high quality commercial software, such as VMWare Fusion, and run Windows, Ubuntu, etc, as needed to support the environment that is best suited to the project and the customer requirements. So, yes, it is a Mac, but at any one moment I'm working in Windows, or Ubuntu, or whatever is needed. Don't forget about security, backup plans, etc. Some of my contracts require whole disk encryption, etc, so you might need a higher grade of Windows to ensure security for your customers. Keep all customer materials in a single folder to make it easy to destroy all materials when the contract is over and the customer requests the destruction of their IP, etc. I also have a nice HP Win10 laptop, again with VMWARE installed. Why multiple laptops? Because several of my projects support USB interfaces, and it is nice to have a sample of operating systems and laptops to test against. And heck... I'm a geek and like a few toys, and being self employed means those toys become business expenses! :-)
>> 3. How does one go about getting work? Freelancing?
Write articles. Network. Network. Become an expert in something. Write an article. Network. Network. Some specifics:
* past employers
* Craigslist (this hasn't happened for me, but I know an embedded guy that found work this way)
* github: write some cool code for a "hot" processor and then put it on github as open source or example code. I have received inquires that resulted in contracts due to my simple presence on github.
* local embedded clubs: For example, I sponsor and help with our local microcontroller club here in Nashville TN: https://www.meetup.com/NashMicro/
* social networking: I am currently working on a large contract, which is now employing several friends and past co-workers, due to some minor networking of mine on Twitter. Oh, and I sent the source of the referral a nice thank you card... you know... with a stamp.. and a hand written note! :-)
* articles: I have personally received great inquiries and work from articles/blogs I have written on this site and others.
>> Ok, so it's either Embedded systems or learning all about how to be a "Full Stack Programmer" with Django, Spring and a bunch of other esoteric technologies. :-)
I hope that was helpful! Good luck on the new endeavor!
Thank you Matthew, that is all good info.
I am currently being considered for a job that would be using all that you mentioned in your last paragraph. Frankly, I never considered the crossover between the IoT world and the world of backend software. That's an interesting thought. More research!
There isn't really one answer to your question.. "Embedded Systems" covers a broad range..
- for very low end projects, PIC and MSP430 are my favorites. Usually using an Integrated Development Environment (IDE) on Windows. TI has a great set of little MSP430 dev systems for small $$ that come with an integrated debug interface.
- for slightly more ambitious systems, Arduino is a good platform. If you are an old-school type like me, the Arduino IDE and it's programming model is a pain in the butt. That said, I've done some interesting projects on Arduino - like a board-tester I built when a client said "We have this pile of welder-controller boards that are apparently broken - can you fix them?" .. I have only used the Arduino IDE on Windows, but I assume the Mac environment is at parity. There is a huge Arduino ecosystem.
- For projects where you are going to need a lot of 'stuff' (multithreading, multiple wireless modes, remote storage, etc etc) then Raspberry Pi is the place to be. Also good if you want to quickly get a prototype together without worrying about making things play nice together. There are reasonably decent libraries for peeking/poking at GPIOs without doing any driver-writing. I usually just use an rPi to develop on, it's simpler than cross-compiling, and an rPi is plenty capable for a dev system..
Some other random thoughts:
- though it was hinted otherwise here, rPi *is* ARM-based. ARM covers a broad range from microcontrollers to large 64-bit CPUs, so saying "ARM" can be a bit confusing.
- DO NOT USE ASSEMBLER UNLESS YOU *HAVE* TO. Yeah, OK, I get it. I've been at this for a while. I started out poking at a PDP8 via ASR-33. I understand how you might feel "in control" using assembler, but resist. Truth be told, C can be essentially assembly language - and it is much easier to be expressive in C than in assembler. For those few places where you HAVE to use assembler, assembly linkage or inline assembler for JUST the parts that HAVE to be in assembler are the way to go.
As far as where to get work, it has been 100% word of mouth for me.
Good information, thanks. Raspberry PI sounds pretty comprehensive, I had no idea. Something to consider, that's for sure.
>- though it was hinted otherwise here, rPi *is* ARM-based. ARM covers a broad range from microcontrollers to large 64-bit CPUs, so saying "ARM" can be a bit confusing.
Got it, thanks.
Howdy, Sorry but any compiler has to make assumptions about what registers to save on interrupts & subroutine calls (amongst other stuff). In assembler I don't. I've written several timeout interrupts that just blow the return stuff off the stack and jump to a restart/recover point. Classical coders may call that bad form, but it's a Lot faster than any compiler can offer.
I only write "above" assembler if I need a robust user interface. C is quite good at taking the busy work out of that.
I'll yield that scope of project can be a deal breaker for either side.
Don't want to start a pissing contest here, but I guess I will ;)
I submit that's a poor example. If you're gonna jump to a restart/recover point, you don't care what's on the stack - and if you do (for backtrace) you need to have a consistent standard to be able to deal with it no matter how you got there.
Compilers are pretty darned smart about what has to be saved/restored on calls, and many architectures have temp registers and/or the concept of leaf routines such that most embedded calls have no save/restore overhead. In most cases, there need be no assumptions made.. and some toolchains for small parts (which is the only place this efficiency canard would crop up) have the ability to do a unit compile such that the compiler can see ALL routines in one pass and then no such assumptions need be made.
And, for things that run in a small realtime loop, you can use inline functions such that there is no call overhead at all.. then when you discover you are out of program memory, you can trivially turn them into real calls ;)
I suppose writing in assembler does have one advantage: job security.
I guess there are two ways of looking at the world: only use a high-level language when you need to, or only use assembler when you need to. I was once firmly in the former camp, but experience has left me solidly in the latter camp.
Howdy, no "yellow" water fight here, I come from a time when compilers frequently got in the way of efficient code. This is no longer true, but habits persist. The projects I build are well suited to assembler, YMMV.
Not a fan of the "job security" slap... <<<)))
Hello everybody, here's my 2 (euro) cents about the matter but first I have to correct a horrendous mistake of @antedeluvian, don't know if it's trolling or joking, but this "fake news" ;) post MUST be corrected:
"You may want to consider Arduino or Raspberry Pi. Neither is ARM based but they have vast universes of hardware and software."
Actually BOTH are arm based, Arduino is at the low end of the spectrum and RPi is on the high(er) end. There were some older Arduinos based on the AVR architecture, but nowadays Arduino Duo and friends are ARM and is worth to be consistent, AVR is now practically a closed road.
With this out of the way let's touch the main subject:
A1) No matter how you look at, ARM architecture is the most popular architecture in almost all aspects of the computing, from the little M0 that runs your microwave to the high end A53 or A83 that runs a high end smartphone or tablet. And guess what, Apple announced that their future CPU will be... ARM based as well. This is nice, because the knowledge of architecture ISA, buses and things that matters, are transferable over a really wide spectrum of applications.
A2.1) While Arduino and RPi are valid development choices, let's step a bit out of the box and go to other fruits ;), one may be pleasantly surprised, that is Orange Pi is a 10USD Quad core A7 with 512MB and all the peripherals in the world, sadly the innovation in small things is now in China. It runs Linux of course.
A2.2) Development environment: Run, don't walk, and get yourself a machine running Linux, this is where 90% of embedded development is done, it has environments ranging from the vi text editor to full fledged IDE like Eclipse, did I mention Visual Studio as well and embedded development is closed to the HW, you don't want to connect your JTAG debugger and serial port on a VM running on the hipsterbook ;). There are some commercial tools running on Windows or even Windows only, for low end CPUs, but are less and less locked on Windows-only run.
For embedded Linux is clear: you develop embedded Linux on Linux, full stop :).
3) I live in the middle of EU, if you are a educated person, able to read a schematic and have C and C++ experience, you're hired, the lack of embedded developers is huge (live in Germany, just PM me). In US, with the ageism and SJW crap to the extreme (no white straight males need to apply, only minorities) it may be difficult to get work, freelancing may be the best, just put in the profile some blue-haired, nose pierced and stoned looking picture, and identify as genderfluid squirrelkin and Google and Facebook will jump to hire you ;)
This is of course sarcasm, the US based posters gave a better explanation of the job market there.
Best of luck and stay (safely) away from Django ;)
Great info on linux. I can run linux on my Mac using VMWare (or so they say). I was planning on doing that anyway.
>This is of course sarcasm, the US based posters gave a better explanation of the job market there.
Are you sure you are not my son posing as an embedded software nerd? He lives in Germany and has the same sarcastic wit :-)
Here is my take on your questions:
1. What are the popular processors today; I'm thinking Arm
2. Can I do Commercial Embedded programming at home on a store bought board with a bunch of software?
You may want to consider Arduino or Raspberry Pi. Neither is ARM based (edit: The PI is ARM based. My bad. Arduino has had many processors inserted into the its hardware format, including FPGAs- can they run the Arduino software and if not can they really be called Arduino? I don't know and I don't care. It is your choice and there are no absolute rights or wrongs. Feel free to continue to flame me, again I don't care.)Apparently but they have vast universes of hardware and software. Many customers ask for the product to be developed one or the other (even though you need to be careful that they will work reliably, since both the hardware and particularly the available software may have holes when it comes to reliable, continuous operation). I believe that your knowledge of Linux will help with the Pi.
Microchip have a wide variety of non-ARM processors 8, 16 and 32 bit (although since they took over Atmel, they have that option as well) and they are very popular in the embedded marketplace. The are probably quite a few development boards to get an application running. To some extent it depends on how you are going to need to customise the hardware.
When it comes to ARM, you choices are endless. (edit: As others have pointed out there is not one ARM architecture and it depends on the what you want to use the processor for.) Perhaps the biggest player is NXP (who swallowed Freescale (nee Motorola) recently.) There is an ARM based concept known as mbed which several manufacturers support with development boards. There obviously many other development boards. ST is also in the ARM market. Unless you are really working at the cutting edge, the ARM itself is largely invisible hidden under the HLL and compiler. What does count are the peripherals, power consumption, development environment and manufacturer support.
Renesas has their own offering although there is some ARM there as well.
My personal favourite is the Cypress PSoC3 or PSoC5 which is ARM based. The internal peripherals can be software configured and include both digital and analog blocs.
Almost all processors come with complete development environments and mostly free, with perhaps a few that require some payment for upgraded compiler or RTOS.
And of course there those who advocate open-source software- I am not going there.
Can it be done on a Mac, or do I need to do it on Windows.?
I have heard good things about Windows emulators on a Mac. I don't know if there are any that will run on a Mac alone and Windows is almost always supported. YMMV
3. How does one go about getting work? Freelancing?
There are many blogs and even books. A good starting point might be I, Consultant by Jack Ganssle. I have yet to find (after 25 years) any formula other than it's who you know. Some (including yours truly) try writing articles and blogs to raise their profile in the industry. Does it get you jobs? My experience does not support that. Network, network, network... Once you have some successful projects under your belt you may get some inertia from word of mouth.
VMWare makes your Mac a virtual machine that can run just about anything including Linux and Windows. I have been looking at that ever since I decided to get back into the game.
Target (of all places) sells a Raspberry PI 3 model B project board (not sure what that entails) for $35. Listed in the details is says:
Grade Level: 2nd Grade, 3rd Grade, 4th Grade, 5th Grade, 4th Grade, 7th Grade
I'm not sure I can compete with that bunch of cut throats :-)
I think I might have an Arduino board around here somewhere, my daughter, who is a C++ developer gave it to me. Thanks for jogging my memory, I may drag it our and get it running.
Thanks for your info.
Raspberry Pi has Broadcom SoC BCM2837B0, which is ARM Cortex-A53. So it's ARM.
I am sure I have omitted several other manufacturers and systems, but the first that springs to mind is the huge offering from Texas Instruments. It goes from fairly low end through the popular MSP430 family to multicore processors with many ARM offerings. If you are going into pre-made boards (as with Arduino and Pi) you could consider the Beagleboneseries (Beaglebone Black, Blue, Geeen) which are TI/ARM based using a Linux OS.
Also may other manufacturers (like Cypress) make development boards that can host Arduino peripheral boards.
I only report what I have heard these things- I am afraid I don't have the fervour of some of the other responders to your question.
If you need things like screens, ethernet comm or other standard communication interfaces, file storage, security tools, you can use ARM-based boards provided with Linux BSPs.
Otherwise you can choose ARM Cortex-M0 to M3 boards that come with it own development environment. This is more "low-level" development.
Other option for fast prototypes or proof of concept, maybe products, go with ARDUINOS and similar boards. Depends on what you are thinking.
If you are used to MAC, you are in a good place. But some manufacturers only provide windows based dev tools.
Web connected devices needs more "esoterism" :)
What I think would be really cool would be an Arm board running Embedded Linux with TCP/IP and sockets. Is that available? I love to make things talk over networks. There's probably a chip for that now :-)
Low level development is also ok. Nice thing about C and C++, there are compilers for so many different chips.
Howdy, and Welcome Back to my favorite form of lunacy!
I'm old school: I can write C, but prefer projects small and terse enough to do in assembler. Cut my teeth in Zilog (late '70s), but went to Freescale (now NXP) in late '90s, mostly for the Flash over OTP program storage. So, I'm biased towards Freescale.
The CodeWarrior V10 IDE is free, unlimited assembler, some limit in C and is the Eclipse environment (a double edged sword IMHO). uCs (microcontrollers) of Vast varieties are inexpensive and usually stocked by Mouser and Digi-Key. The USB Multilink "dongle" is from PE Micro and still affordable (150-200 USD). Don't know about a Mac version. Purchased versions go through tiers of code size enough for anybody.
As far as getting projects (my term), I'd get to know local electronics assemblers, circuit board houses, all the production sides of the business. I get mine through an assembly house that gets calls of "can you design & build a ----". This place can build but not design, so my phone rings.
Good Hunting (unless you're in SW Michigan, My turf... teehee). <<<)))
Zilog Z-80..... sigh! What was that card product that was about 4" X 6" inch and plugged into a bus? There was a processor card, a Uart card, parallel i/o card... I developed a product called the "Match box" that could be used to bring all sorts of devices into a serial port. Later, I replaced that with a custom designed single card with a Z-80, Uarts, timers, PIO and other stuff. Put it into a box, add a Wall Wart and there you go :-) Of course I had a Z-80 ICE at that time, no PC's then.
Howdy, you thinking the STD bus? I seem to 'mem them as 4" x 6" as well. <<<)))
Yes, yes, that's it the STD bus. Thanks.
That's a really good idea. I live in the Denver/Boulder area and I'm sure there are plenty of board and design shops around here. I did a quick search and counted about 15 in Boulder.
Another interesting area is the Internet of Things. This area is ripe with that type of development. I need to find a start up with a bunch of seed money.
Great question, good discussion. Thanks.