Click here to Skip to main content
11,921,898 members (38,926 online)
Rate this:
Please Sign up or sign in to vote.
See more: Embedded C++ C Windows
What is the difference in programmnig Real time systems, embedded, and regular (desktop) systems. Is there special training you need to program in c/c++ on one of these systems as opposed to a desktop linux or windows system? Is it the tools used to program? or maybe a combination of the two or even something I haven't thought of here.
Thanks in advance.
Posted 25-Jan-11 4:38am
jimd1968 25-Jan-11 11:26am
Thank you everyone for your answers. I understand it much better now.
Rate this: bad
Please Sign up or sign in to vote.

Solution 1

Having programmed all three kinds, I must say that the answer depends a lot on your target platform. For example, programming for iPhone definitely qualifies as embedded, yet the skills you need are nearly identical to what you need to program for Mac. On the other hand, programming custom hardware would often require a working knowledge of in-circuit emulators, logic analyzers, and perhaps even oscilloscopes. An ability to read assembly language and relative fluency in binary operations is often assumed as well.

In general, programmers of embedded systems must be a lot more conscious about their memory use: situations when the system memory is expressed in single-digit kilobytes are not unusual. Very often you would have no operating system, so you'd need to fully understand low-level hardware interactions, interrupts, hardware timers, etc.

Real-time programming requires a different mindset altogether. The language you use becomes secondary to the way you think about resources, synchronization, schedules, memory allocations, and especially algorithms. For example, amortized linear-time algorithms do not qualify as linear-time algorithms, quick sort becomes an O(N^2) in your mind, and mainstream things such as lazy initialization become completely irrelevant. Pre-allocation becomes the order of the day, and formal verification of your most critical code becomes a requirement, not a luxury. On top of that, real-time operating systems present services that are different from what you would find on a typical desktop, so a lot of additional learning is in order.
Yusuf 25-Jan-11 11:20am
VG +5
Nishant Sivakumar 25-Jan-11 16:04pm
Great answer, my 5 too.
Rate this: bad
Please Sign up or sign in to vote.

Solution 4

I've found this quite helpful over the years:

You'll find some info about supported OS'es, including Windows CE, pSOS, QNX Neutrino, and VxWorks, here:[^]

As can be seen from the ACE, TAO, and CIAO Success Stories[^], this IS actually rocket science, and it has been used for quite a number of serious real-time applications.

Espen Harlinn
Rate this: bad
Please Sign up or sign in to vote.

Solution 2

The question is really too generic to answer. In general, for real-time systems you are going to use a RTOS rather than a general-purpose OS like Windows. As for "embedded" systems they range from simple devices with no OS, minimal memory and only a C compiler, to powerful mini-computers that can be even programmed with high-level languages like Java.
Rate this: bad
Please Sign up or sign in to vote.

Solution 3

I would venture to suggest that it is none of the above. The development tools and language are less critical than a very good understanding of the target platform/system. For example, I could write an embedded program in C but it would probably not be very efficient, because although I am a reasonable C programmer, I know almost nothing about embedded systems.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 493
1 Dave Kreskowiak 285
2 Sergey Alexandrovich Kryukov 243
3 Richard MacCutchan 155
4 ppolymorphe 135
0 OriginalGriff 7,231
1 KrunalRohit 4,530
2 Sergey Alexandrovich Kryukov 3,356
3 George Jonsson 2,865
4 Suvendu Shekhar Giri 2,216

Advertise | Privacy | Mobile
Web04 | 2.8.151120.1 | Last Updated 25 Jan 2011
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100