Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use the right tool for the job: embedded programming

Tags:

java

c++

c

embedded

I'm interested in programming languages well suited for embedded programming. In particular:

Is it possible to program embedded systems in C++? Or is it better to use pure C? Or is C++ OK only if some features of the language (e.g. RTTI, exceptions and templates) are excluded?

What about Java in this domain?

Thanks.

like image 991
EmbeddedProg Avatar asked May 18 '10 09:05

EmbeddedProg


People also ask

Which tool is used for embedded software development?

3. Visual Studio. Created by Microsoft, Visual Studio is an IDE that can build embedded software, computer programs, and even mobile applications. One of the highlights of Visual Studio is it allows developers to be able to build software from first design into the final deployment.

How do I get a job in embedded programming?

To land an embedded development position, it's helpful to have certain degrees and/or IT certifications to your name. Entry- and junior-level embedded developers may need a bachelor's degree in computer engineering, software engineering, electronics engineering or computer science.

What is embedded software programming?

Embedded software applications are specialized programming within non-PC devices – either as part of a microchip or as part of another application that sits on top of the chip – to control specific functions of the device.


2 Answers

Is it possible to program embedded systems in C++?

Yes, of course, even on 8bit systems. C++ only has a slightly different run-time initialisation requirements than C, that being that before main() is invoked constructors for any static objects must be called. The overhead (not including the constructors themselves which is within your control) for that is tiny, though you do have to be careful since the order of construction is not defined.

With C++ you only pay for what you use (and much that is useful may be free). That is to say for example, a piece of C code that is also C++ compilable will generally require no more memory and execute no slower when compiled as C++ than when compiled as C. There are some elements of C++ that you may need to be careful with, but much of the most useful features come at little or no cost, and great benefit.

Or is it better to use pure C?

Possibly, in some cases. Some smaller 8 and even 16 bit targets have no C++ compiler (or at least not one of any repute), using C code will give greater portability should that be an issue. Moreover on severely resource constrained targets with small applications, the benefits that C++ can bring over C are minimal. The extra features in C++ (primarily those that enable OOP) make it suited to relatively large and complex software construction.

Or is C++ OK only if some features of the language (e.g. RTTI, exceptions and templates) are excluded?

The language features that may be acceptable depend entirely on the target and the application. If you are memory constrained, you might avoid expensive features or libraries, and even then it may depend on whether it is code or data space you are short of (on targets where these are separate). If the application is hard real-time, you would avoid those features and library classes that are non-deterministic.

In general, I suggest that if your target will be 32bit, always use C++ in preference to C, then cut your C++ to suit the memory and performance constraints. For smaller parts be a little more circumspect when choosing C++, though do not discount it altogether; it can make life easier.

If you do choose to use C++, make sure you have decent debugger hardware/software that is C++ aware. The relative ease with which complex software can be constructed in C++, make a decent debugger even more valuable. Not all tools in the embedded arena are C++ aware or capable.

I always recommend digging in the archives at Embedded.com on any embedded subject, it has a wealth of articles, including a number of just this question, including:

  • Poor reasons for rejecting C++
  • Real men program in C
  • Dive in to C++ and survive
  • Guidelines for using C++ as an alternative to C in embedded designs
  • Why C++ is a viable alternative to C in embedded systems design
  • Better even at the lowest levels

Regarding Java, I am no expert, but it has significant run-time requirements that make it unsuited to resource constrained systems. You will probably constrain yourself to relatively expensive hardware using Java. Its primary benefit is platform independence, but that portability does not extend to platforms that cannot support Java (of which there are many), so it is arguably less portable than a well designed C or C++ implementation with an abstracted hardware interface.

[edit] Concidentally I just received this in the TechOnline newsletter: Using C++ Efficiently in Embedded Applications

like image 111
Clifford Avatar answered Sep 28 '22 06:09

Clifford


More often than not in embedded systems, the language you're programming in is determined by which compiler is actually available.
If you're hardware only has a C compiler, that's what you're going to use. IF it has a decent C++ compiler than there is really no reason to prefer C over C++.
I would dare say that Java isn't a very popular choice in embedded systems.

like image 27
shoosh Avatar answered Sep 28 '22 07:09

shoosh