EmbeddedRelated.com
Forums
The 2024 Embedded Online Conference

embedded systems skills set

Started by John September 16, 2006
I have some interests in embedded systems and I want to learn more. I
expect most embedded systems are implemented in either C or C++.
Basically Java is not an appropriate langauge in embedded system.
Correct? Also, a good embedded systems programmer is expected to
understand software and hardware system well? Is device driver related
to embedded system? What kind of skills set you recommend if I want to
work in this field?

please advice. thanks!!

John wrote:
> I have some interests in embedded systems and I want to learn more. I > expect most embedded systems are implemented in either C or C++. > Basically Java is not an appropriate langauge in embedded system. > Correct?
There are different classes of embedded systems. Some of them are high-end and they can run linux. Others are very small and they have no OS. The high-end devices can definitely run Java, and I think many cell phones are in this category. But C is by far the most popular language for embedded systems. C++ is used sometimes, also. Of course, you'll need to learn a lot about Microcontrollers and the various architectures. Although I'm not a fan of PIC devices in general, they are extremely popular and the Parallax company has great learning packages. You could get one of the educational Basic Stamp packages and this will give you a feel for these things. Eric
On 16 Sep 2006 19:13:48 -0700, John wrote:
/cut

IMHO best way to learn some architecture is by programming in assembly
language. 

You are forced to think like a machine. 
I program my systems in assembly and C. I know a little of C++ but C is OK
for me.
Mad I.D. wrote:
> On 16 Sep 2006 19:13:48 -0700, John wrote: > /cut > > IMHO best way to learn some architecture is by programming in assembly > language.
> > You are forced to think like a machine.
I completely agree, which is why you'll find a lot of people with hardware backgrounds in deep embedded positions, by which I mean the jobs where one writes bare metal code or low level drivers. An intimate knowledge of how the hardware works is a definite advantage for those things. As the definition of 'embedded systems' has expanded (morphed, some might say), it's not uncommon to find applications programmers doing a lot of code - in a cell phone or something running Linux, for instance, there's no need to know the hardware to implement an application that merely uses the resources provided. Applications programming, incidentally, is just as important as the driver programming; it all depends on just what sort of embedded system one ends up with :) My personal preference depends on what I am writing; assembly language for where there is no OS, doing boot setups or in some cases where I have to oustmart a compiler that's just a little too smart for it's own good (optimising out some instruction sequences that are necessary at the hardware layer comes to mind where the compiler doesn't necessarily obey the compiler directives ;) Other than that, I'm personally most comfortable with C, but I've seen Java, C++, C#, .net, and a host of other languages / platforms used in the embedded space. Cheers PeteS
> I program my systems in assembly and C. I know a little of C++ but C is OK > for me.
In article <1158462734.847309.225660@k70g2000cwa.googlegroups.com>, Eric 
<englere_geo@yahoo.com> writes
> >John wrote: >> I have some interests in embedded systems and I want to learn more. I >> expect most embedded systems are implemented in either C or C++. >> Basically Java is not an appropriate langauge in embedded system. >> Correct? > >There are different classes of embedded systems.
Yes
>Some of them are >high-end and they can run linux.
Some run an OS There are many OS about from Embedded XP, Unix and clones (ie Linux) and many others down to small schedulers some are Real Time and others are not. These are from 8 bit to 128 bit systems.
> Others are very small and they have no >OS.
Others have no OS these are also 8-128 bit systems. There are OS 0n 8 bit systems and some 64 bit systems don't use an OS. Though as a rule the larger systems tend to use an OS.
>The high-end devices can definitely run Java,
Not always true. However some 8 bit devices do.
>and I think many cell >phones are in this category
???? Mobile phones use many MCU (usually) more than one. I know a lot of the SIm cards can run Java and they are 8 bit.
>. But C is by far the most popular language >for embedded systems. C++ is used sometimes, also.
Yes.
>Of course, you'll need to learn a lot about Microcontrollers and the >various architectures. Although I'm not a fan of PIC devices in >general, they are extremely popular
Well they are used.... Though the 8051 is far more common. -- \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ \/\/\/\/\ Chris Hills Staffs England /\/\/\/\/ /\/\/ chris@phaedsys.org www.phaedsys.org \/\/\ \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
thanks for all your inputs.

Since there are different classes of embedded systems, when people talk
about embedded systems, it actually can mean low-level system
programming, and high-level application programming as well?

Do we consider embedded systems development as hardware development, or
software development, or both? It seems to me its a mixture of software
and hardware development. And it depends on which area we work on, the
more lower level we work on, then it tend to need more hardware
background?

please advice more. thanks...

John wrote:
> thanks for all your inputs. > > Since there are different classes of embedded systems, when people talk > about embedded systems, it actually can mean low-level system > programming, and high-level application programming as well? > > Do we consider embedded systems development as hardware development, or > software development, or both? It seems to me its a mixture of software > and hardware development. And it depends on which area we work on, the > more lower level we work on, then it tend to need more hardware > background? > > please advice more. thanks... >
I think the essence of an embedded system is that it's invisible, buried inside some widget. The realm of possibilities fitting this is huge, and includes everything you've suggested. What do you want to do -- hardware or software? You can be effective working in embedded systems if you're good at either one alone, or both. It's not PC software -- people don't need to install it or fight an OS. You apply power and it's just there doing its thing. You don't have monthly updates -- if the thing was so buggy to begin with right off the bat you'll probably tank anyway. There's no pat answer. The more you know and the wider range, the more effective you can be. You'll be able to apply diverse knowledge to every problem. It's all one of degrees + balance. When you work out, you don't just lift weights with your right arm, do you? -Dave -- David Ashley http://www.xdr.com/dash Embedded linux, device drivers, system architecture
"John" <javacc1@gmail.com> wrote in message 
news:1158533706.714740.146170@e3g2000cwe.googlegroups.com...
> thanks for all your inputs. > > Since there are different classes of embedded systems, when people talk > about embedded systems, it actually can mean low-level system > programming, and high-level application programming as well? > > Do we consider embedded systems development as hardware development, or > software development, or both? It seems to me its a mixture of software > and hardware development. And it depends on which area we work on, the > more lower level we work on, then it tend to need more hardware > background?
I'm an embedded specialist. This means I deal with everything from 8-bit micros running in 8k of RAM, right up to embedded PCs running a BSD variant - even, may dog forgive me, Windows CE. I'm also a hardware guy, so the smaller systems I design myself - but the higher-end systems I buy and bury in a box. Probably the key thing about embedded is that it's a box with a specific function - it's *not* a machine you can run anything on. It probably won't have a keyboard, screen, mouse, in the accepted sense. It has one job to do - e.g. a temperature controller, or a router, or a washing machine. One tends not to run "Solitaire" on a washing machine. (So far, anyway.) Steve http://www.fivetrees.com
John wrote:
> I have some interests in embedded systems and I want to learn more. I > expect most embedded systems are implemented in either C or C++. > Basically Java is not an appropriate langauge in embedded system. > Correct? Also, a good embedded systems programmer is expected to > understand software and hardware system well? Is device driver related > to embedded system? What kind of skills set you recommend if I want to > work in this field?
To add to what others have said, I would recommend that you buy a development board based on a small, simple micro architecture, and start programming it. The 8051, AVR, HC11 or HC12 are some possible micro families. Get a board with an LCD and keypad and some analog IO in addition to the digital IO. Program it to do anything you can think of. To get more ideas, search around the web for class notes posted by the professors of university embedded programming classes. Start programming in assembly, then move to C. Many boards will come with at least a restricted-capacity compiler. As one example, there's this board: http://www.evbplus.com/dragon12.html I've never seen one of these in person, but the amount and kinds of IO make it look like a nice board for starting embedded stuff, and the HCS12 core architecture and instruction set is very clean, making it a good choice to learn assembly programming, IMO. Look around the web and you'll find a great many other board vendors as well.
On Monday, in article <m7CdnbSpZ-p5d5DYRVnyhw@pipex.net>
     steve@NOSPAMTAfivetrees.com "Steve at fivetrees" wrote:
>"John" <javacc1@gmail.com> wrote in message >news:1158533706.714740.146170@e3g2000cwe.googlegroups.com... >> thanks for all your inputs. >> >> Since there are different classes of embedded systems, when people talk >> about embedded systems, it actually can mean low-level system >> programming, and high-level application programming as well? >> >> Do we consider embedded systems development as hardware development, or >> software development, or both? It seems to me its a mixture of software >> and hardware development. And it depends on which area we work on, the >> more lower level we work on, then it tend to need more hardware >> background? > >I'm an embedded specialist. This means I deal with everything from 8-bit >micros running in 8k of RAM, right up to embedded PCs running a BSD >variant - even, may dog forgive me, Windows CE. I'm also a hardware guy, so >the smaller systems I design myself - but the higher-end systems I buy and >bury in a box. > >Probably the key thing about embedded is that it's a box with a specific >function - it's *not* a machine you can run anything on. It probably won't >have a keyboard, screen, mouse, in the accepted sense. It has one job to >do - e.g. a temperature controller, or a router, or a washing machine. One >tends not to run "Solitaire" on a washing machine. (So far, anyway.)
I have seen problems at aerospace companies, where systems for testing equipment and components, gets messed up too often because they can install screen savers, play games.... Then they wonder why their tester does not work! -- Paul Carpenter | paul@pcserviceselectronics.co.uk <http://www.pcserviceselectronics.co.uk/> PC Services <http://www.gnuh8.org.uk/> GNU H8 & mailing list info <http://www.badweb.org.uk/> For those web sites you hate

The 2024 Embedded Online Conference