My friend and colleague Richard Vlamynck has proposed another guest posting and I am more than happy to accommodate him. Apart from helping me and doing the rest of his day job, Richard puts in time, as I do, trying to assist people on various social networking sites. This can certainly be challenging, as, while many posts are genuine pleas for help from engineers who need to tap someone else’s experience in a specific area, others seem to be from people who expect all their work to be done for them.
Richard suggested that I might like to share an example …
Here is the question that Richard chose to address. I have not included the OP’s name and I have reworded it, as the original English was a little hard to decode:
Hello everyone. I am writing some code, in C, to control a room fan, air conditioning and TV and record the number of entries to the room. I am using CAN protocol. Can someone provide the right code. Thanks in advance.
And here is Richard’s response:
If I may, please allow me to help you. If I understand your question correctly, you are saying that you are an “Embedded Software Developer” for “Embedded Linux” (this discussion group) and you would like to control some embedded system functions using the CAN protocol using the “right code”.
I would recommend that you should start by building an embedded Linux system of your own, and then add CAN support. If you do this, then you can answer your own questions regarding what is the “right code.” The “right code” is different between one embedded system and another – an embedded system developer knows this.
This is what you need to do to become an embedded Linux software developer: purchase the cheapest old PC that you can find and then learn how to build a version of embedded Linux for that PC. It doesn’t matter if the PC has an Intel 80386 or a Pentium or a AMD chip or whatever. The point is that you need to teach yourself how to build an embedded Linux system version that will run on some hardware, and the cheapest and most available hardware is old PC motherboards. Once you do that, then you can build systems for ARM and ColdFire and Mips, and PowerPC, ad naseum.
Embedded Linux is even worse/better than that. Can you fit Linux in an embedded system with only one megabyte of memory? If you find an old PC that only has 640K or memory, then you will learn about what was used to be called damn small Linux and things like that. But for now, just go ahead and download the latest Linux kernel from kernel.org and have at it.
Spend a few days or a few weeks or a few months doing “make config” or “make menuconfig” or “make xconfig” until you actually understand how to build a custom embedded Linux system of your own. If you really are an embedded Linux software developer you should know how to pull in and exclude out the various modules and drivers and software stacks from the standard Linux kernel to make an embedded system of the Linux stack. Using the above, build a bunch of different configurations for your embedded Linux system. After you get that piece of the puzzle understood then you need to discover how CAN fits in.
Now, you should go to the CAN controller network sites and learn how to program CAN controllers. Try to find a cheap CAN controller that you can add to your x86 embedded system or possibly find a new system that has a CAN controller built in. An embedded software developer should really know how to do all this without asking.
At this point, please go and take a look in your Linux kernel source tree for all CAN related drivers and stack software. There are different controllers with different functionality. Go look at manufacturers datasheets and learn how to program the various controllers.
Never Forget: An embedded software engineer is sort of like a Christopher Columbus, you have to be willing to take a risk to sail off the edge of the world and discover new things on your own. Stop asking questions on social networking sites and go get the answers for yourself.
I hope that helps,
Was Richard being harsh? Personally, I think not. Embedded software developers have always needed to have a wide knowledge base and the skills to fill in the gaps. Many aspects of the world have changed over the years since embedded systems first appeared. This is not one of them.