tags:

views:

423

answers:

10

I have completed my graduation in Computer engineering. We had some basic electronics courses in Digital signal processing, Information theory etc but my primary field is Programming.

However, i was looking to get into Embedded sytems programming with NO knowledge of how it is done. However, i am very keen on going into this field.

My questions :

  • what are the languages used to program embedded system programs ?
  • Will i be able to learn without having any basics in electronics ?
  • any other prerequisites that i should know ?
+2  A: 

I went into that field with no knowledge of how it was done as a fresh graduate and quit after 1,5 years. So, what I say may be a little bit rusty, and definitely not comprehensive.

The language we were using was C. But at that time, the disc space was 4MB and memory was 8MB on the devices we were developing for, and I know that C was used due to its libraries' tiny footprint. Apparently, performance was a criterion as well.

As to basic electronics, for an entry level position almost none is necessary. You will gain the required information and experience with time.

Not prerequisites, but having experience in the operating system internals and system development is definitely a plus.

tafa
Jumped into it too with zero knowledge. No problem.
James
+4  A: 

Without a doubt, experience or at least a significant understanding of digital electronics and low level computer engineering is required. You'll need to be able to read device datasheets and understand them. Scopes, multimeters, logic analyzers, etc... are tools of the trade.

C is used mostly, but higher level languages are sneaking in slowly.

kenny
And you can't be scared of a little bit of assembly here and there!
Earlz
@Earlz, true if you can't avoid it. A good C compiler is pretty good at optimizing most stuff.
kenny
@kenny. Sometimes, such as on the x86 you have to do platform dependent things that aren't possible from C directly, such as reading and writing to ports.
Earlz
An example example of when you can't avoid it.
kenny
+1  A: 

Languages: C, Assembler, Processing, Basic and a whole variety of others, it depends on what platform you're using as to what's available.

You might get more specific information if you ask the same question at ChipHacker or Electronics Exchange which are both stack exchange style sites (like this is) but geared to electronics and "physical computing".

Amos
+3  A: 

You have to accept constraints and be able to work with them:

  • CPU speed,
  • scarse memory,
  • lack of network,
  • custom compilers and OSes,
  • custom motherboards and drivers,
  • debugging with a logic analyzer,
  • weird coding and testing practices,
  • ...

The reward is a deep understanding on what is going on.

mouviciel
+1  A: 

You'll want to get pretty comfortable with C and build a solid understanding of assembly. In systems / embedded, usually you're working with small amounts of memory and slower processors, so you need to understand how to use limited resources wisely.

If you're getting into this as a hobby, pick up a gumstix board or an arduino, these dev boards will give you hundreds of hours of learning and fun.

If you're trying to make a career of this, find a job where the projects sound interesting and get your hands dirty. Take every task that comes your way and ask yourself how you can do better and learn from this task.

Either way, have fun and happy coding!

Sam Post
+3  A: 

VHDL, Verilog, and FPGA's are serious players in this arena as well. With a good background in CS, plenty of commitment, and maybe some MIT OpenCourseware you'll be able to pull off something good. A good knowledge of cpu architectures and some ASM will go a long way too.

stilljb
+1  A: 

Embedded systems are generally programmed in C, although there are systems at the ends of the range which use assembler when code space or timing is really tight (or there is no decent C compiler available), and at the other end, C++ up to .NET compact. It depends on what you mean by embedded systems, they go from really small microcontrollers with a few hundred bytes of RAM and program space, up to the smartphone type of device running a full multitasking operating system and user interface.

You'll get further in the higher end of this range without a background in electronics, because its less tied to the hardware and more similar to desktop development. As you go down the range of applications, a knowledge of electronics, analogue and digital, and power supplies, noise issues, compliance issues, heat issues and others all combine to make a really challenging design environment.

Start by reading some of the links here and embedded.com

Martin
+1 for noting that today's embedded systems aren't only 8-Bit µC stuff
ziggystar
A: 

Learn C. Learn to apply C to all problems. Other languages can wait. Eventually assembly will help and no programmer should be without the use a scripting language.

Depending on what embedded targets you use there could be very little difference between a PC and your target. With little electronics background this would be your easiest entry.

Small processors will give you the the steepest learning curve but you will learn the most about embedded programming. However with no electronic background this can present extra problems you might not have the skills to solve yet.

Eventually you will have to learn electronics if you want to make further progress beyond the basics.

Gerhard
+1  A: 

The one thing that I have not seen mentioned in the answers so far is that up until now you have probably done most of your coding in the context of an operating system. In many (perhaps most?) cases, with firmware as opposed to software, you will not have the convenience and benefits of coding on top of an operating system. This is why so many of the other answers indicated that a good knowledge of electronics was critical.

mickeyf
A: 

As others mentioned, embedded can mean many things. In my world (Aerospace and Defense), we work with real-time operating systems (VxWorks and Integrity are the biggest players) and occasionally Linux. We program in C primarily, although C++ is also used as well if the project has decided to use Object Oriented Programming and Modeling.

So, as for the Pre-Reqs, C for sure. You really need to learn all about C, including BIT wise operations, dealing with hex values, pointers, all the low level stuff. Assembly as well, but I only use it for debugging the hardest stuff nowadays. You need to know enough to read and understand.

I think An Embedded Software Primer is a great start to change your thinking towards embedded. Handling interrupts, real-time issues, etc...

As Mickey mentioned, sometimes you don't even have an OS. In these cases, you usually write your own task manager of some sort, but that usually wouldn't be something for the newbie to start with. Good luck.

Awaken