Embedded system are increasingly becoming a key technological component of all kinds of complex technical system. They serve as an heart of most high-tech products and applications and represent one of the fastest growing global markets. New products and services based on embedded systems technology are emerging day by day, making state-of-the-art design and engineering competences for new products and applications a key competitive discriminator.
What is Embedded System?
The first question that needs to be asked is “What is exactly an embedded computer?” Well,there is no exact definition for embedded system but an embedded system is a system which has a software embedded into an hardware, designed for specific application (or) to perform a specific function.
Why Embedded system?
We need embedded system because they are usually more reliable than non-embedded system. We don’t use general purpose computer in all cases.So we have to design a special computer which is called embedded system.Embedded system reduce the cost and size. Also, it is increasing the reliability and performance.
Why to study embedded system?
Embedded system are playing important roles in our lives every day, even though they might not necessarily be visible to us. Take for example,we use every day control on television through remote, the timer in a microwave oven, a cellphone, an MP3 player or any other device with some amount of intelligence built-in. In fact, recent poll data shows that the embedded computer systems currently outnumber humans in USA. Embedded system is a rapidly growing industry in which growth opportunities are numerous.
How to become an embedded engineer?
It is not a big deal to become an embedded engineer, if you have a passion on this,you will become an embedded engineer.
The prerequisites for any embedded engineer are to understand what is meant by computer architecture and operating systems.
1. C Programming :
The fundamental language of the hardware that is still portable (too some degree). Don’t just learn it, but become an expert of all its features like volatile and why it is important for writing device drivers.
The c programming language by kernighan and ritchie is the best book to learn c language.
2. Real-Time Operating System :
An operating system is a piece of software that manages Hardware and Software in the system. The real-time adds the sense of correct timing as well as correct functionality. The goal is to learn how to do multitasking programming over RTOS. Multitasking programming is a very common programming method used heavily in embedded systems.
3. Hardware architecture (ARM/CORTEX/ANDROID)
ARM is the dominant processor in the embedded industry. Its market share is around 75%. I highly recommend the ARM CortexM3 core. Many of the SoC manufacturers have adopted it. A good reference for the Cortex M3 core is “The Definitive Guide to the ARM Cortex M3”. After wards, going to the SoC is recommended. Famous SoC’s are NXP LPC, ST STm32, and TI Luminary Sterallis. For those who can’t purchase a development board, they can use QEMU to experience how to develop on Cortex M3 core and how to write different drivers for different peripherals. Again a quick introduction can be found in http://www.embeddedtips.blogspot.com about the ARM Cortex M3 and the ST STm32 Soc.
Some tips to practice:
In the learning stage, feel free to re-invent the wheel on device drivers or other pieces of code. Don’t just plop someone else’s driver code down in there. There’s value in re-inventing the wheel when you’re learning.
Challenge yourself to re-write your code more efficiently in terms of speed and memory usage.
Becoming familiar with different styles of embedded systems software architectures. Start with basic interrupt driven/background loop processing, then move up to background schedulers, then real-time operating systems.
Get a good source control! I prefer Mercurial myself.
Learn new techniques and experiment with them in your designs. Assume nothing when debugging. Verify it!
Learn how to program defensively to catch errors and verify assumptions (like using assert).
Build a debugging information into your code where you can such as outputting memory consumption or profiling code with timers or using spare pins on the uC to toggle and measure interrupt latency on a O-scope.
Here are some books:
The Pragmatic Programmer by Andrew Hunt and David Thomas – more or less required reading for any practical software development .
Programming Embedded Systems by Michael Barr .
Embedded Systems Building Blocks by Jean Labrosse .
MicroC OS II Real Time Kernel by Jean Labrosse, great intro into RTOS’s in general in there along with his OS.
Embedded Software Primer by David Simon – good intro to embedded software
Here are some websites:
Ganssle Group Jack Ganssle has some wonderful historical stories to tell. Read the articles. He gets a little preachy about some things though.
Embedded.com Good info for latest techniques and tips from Ganssle, Barr, and other industry experts.
Copyright © 2015[InnovationBeginsHere].All Rights Reserved.