How are everyday machines programmed?

13,835

Solution 1

Most of what you're talking about are embedded systems where C is a luxury that may not be available. The software often isn't separate programs running under an OS like you'd have on a desktop or phone, especially if the chip the designers chose to use is described as a "microcontroller".

Most of the time the software is written in C or assembly. C requires a compiler to be written for that platform (and might produce bloated or inefficient asm if it doesn't optimize well), but a simple assembler only has to turn text into machine code one line at a time and is easy to write. (And if a vendor wants anyone to buy their microcontrollers, they'll make sure at least an assembler exists for it to make development attractive, often also a C compiler although sometimes non-optimizing.)

Your coffee pot and most simple systems like that don't carry an operating system. They simply load from a start address in memory and you put your code there. Often these systems have their "code" burned into EEPROMS that act as the hard drive of the system. Or depending on the type of EEPROM / flash, code may be able to run directly from flash without having to get loaded into RAM first. (The device may not be able to write to its own flash memory; that's done with external tools. The edit/compile/run cycle may include reprogramming the flash of actual hardware, if not testing in a simulator.)

Coca-cola machines, routers, etc. typically use a realtime OS like QNX, EMBOS, or sometimes RTlinux if you're lucky. Most of these are proprietary OS you license for lots of money, but they have C compilers, drivers to work with hardware, etc.

http://www.qnx.com/

http://www.segger.com/cms/embos.html

http://www.microsoft.com/windowsembedded/en-us/campaigns/compact7/default.aspx?WT.srch=1&WT.mc_ID=SEARCH

RTLinux

Solution 2

They use microcontrollers, the 8051 is the classic one. These are 8-bit or 16-bit cores, they rarely have an operating system. The programmer writes the code to initialize the onboard peripherals and implement the interrupt handlers. Languages used are assembly and C. Tough debugging jobs require an in-circuit emulator.

There's lots of growing room beyond this, with 32-bit embedded cores (ARM is the 100 pound gorilla) that boot an embedded version of Linux and/or the Java JVM.

Solution 3

These are embedded systems, and would be programmed using a very low-level language such as C or assembly. In general such a system will run without an operating system, although some newer "everyday machines" such as blue-ray DVD players and wireless routers do run their code on top of a unix-based operating system.


Update

Along the lines of what others have said, many modern embedded systems also run a flavor of windows. It depends up on the application. Also, there is a trend in many spaces to run on a more powerful platform with an operating system, to handle cases such as Blue-ray players needing to run Java, and other instances where the end user desires more functionality.

Solution 4

Let's think about the processor in your desktop. All it does is run machine instructions, and by itself, isn't really concerned about "operating systems" or "programs".

You turn your computer on, the processor points to the first instruction, and it starts executing.

On your desktop, it starts executing the "operating system". But there is no reason that you couldn't have the processor executing any set of instructions you chose. (This may not be very useful, since you'd still want to output results to the screen, and that functionality resides in the OS.) At the same time, if your machine instructions consisted of the right opcodes so that the processor would output the correct sequence of signals to paint a picture on the monitor, all the better. No OS needed.

Desktops do so much stuff that we generally require the abstraction of an OS. But at its core, all the processor does is execute instructions.

Same for the processor in Coke machines and Coffee machines. All it does is execute instructions.

Well, writing machine instructions bit-by-bit is tedious. So, just as with desktops, we typically write code in C, which is then compiled into machine code. That machine code is loaded onto the embedded processor and it runs.

Embedded systems do so little that they don't need full-on OSes. A microcontroller might have 8 or 16 pins on the chip - compared to scores of pins in your regular CPU socket.

So the workflow is write some code (say, in C), compile it on your desktop machine. That compiler generates machine code for the embedded chip. Then that code is loaded onto the microprocessor (and you need special hardware to do this.) Then you power the chip and it starts executing instructions. Simple!

Solution 5

Many devices which perform a specific function do not contain any "code". They perform their functions via the properties of their electronic components. More advanced systems, which can perform many different functions or need to be easily upgradable, will contain a microcontroller and some sort of "operating system". Since these still have some limits to their functionality, the operating system will be simple and specially designed. Getting even more advanced, the device will contain something similar to a computer. It will have a more complicated operating system which can communicate with different parts of the system. Finally, you reach devices such as smart phones, which contain a full operating system which can run user level code and have much more user input than simpler devices. However, even modern processors are essentially very large electrical circuits. Every instruction the CPU recognizes will cause a different circuit to be used to perform that function.

Here are some Wikipedia pages you may be interested in:

http://en.wikipedia.org/wiki/Electrical_engineering
http://en.wikipedia.org/wiki/Integrated_circuits
http://en.wikipedia.org/wiki/Electronic_engineering
http://en.wikipedia.org/wiki/Computer_engineering
http://en.wikipedia.org/wiki/Microcontroller

Share:
13,835

Related videos on Youtube

Josh Leitzel
Author by

Josh Leitzel

Ruby ± Rails, JavaScript | CoffeeScript | Angular I can be contacted at [email protected]. Twitter GitHub Blog

Updated on January 18, 2021

Comments

  • Josh Leitzel
    Josh Leitzel about 3 years

    How are everyday machines (not so much computers and mobile devices as appliances, digital watches, etc) programmed? What kind of code goes into the programming of a Coca-Cola vending machine? How does my coffee maker accept a pre-programmed time and begin brewing a pot of coffee hours later, when that time arrives?

    Do these kinds of machines have operating systems inside of them, or is it something even more basic? Are they written in Assembly, C, or some other language?

    And, I would really like to find some resource that lists these operating systems or underlying code systems, possibly even with source code if possible. If anyone knows of such a resource (searching yielded nothing for me), that would be fantastic.

    • Jonathan Sterling
      Jonathan Sterling almost 13 years
      Fantastic question! I've been wondering the same thing myself.
    • mu is too short
      mu is too short almost 13 years
      Do some searching/research on "embedded systems" (I even added the tag for you).
    • dmckee --- ex-moderator kitten
      dmckee --- ex-moderator kitten almost 13 years
      InRe the close votes: I don't see this as material for Programmers because it is about programming. On the other hand it might do well on the electronics SE site, simple because there will be more specialists. The answer, of course, is some of all of the above. You'll need to pick a smaller class before you can get one answer.
    • Jodrell
      Jodrell almost 13 years
      Its very broad question that covers at least 3 engineering disciplines and many shades inbetween.
    • steamer25
      steamer25 almost 13 years
      FWIW, you might be interested in playing with a microcontroller platform such as Arduino (~$30) arduino.cc.
    • Ciro Santilli OurBigBook.com
      Ciro Santilli OurBigBook.com over 8 years
      Voting to close as too broad.
  • Andrew Marshall
    Andrew Marshall almost 13 years
    To clarify, Bluray uses Java.
  • Justin Ethier
    Justin Ethier almost 13 years
    Perhaps, but the actual players run Linux and are written in C/C++
  • old_timer
    old_timer almost 13 years
    Cash registers and gas pumps and the like were running dos (some brands), sadly some of those run windows now (grocery store or other self checkout lines). The desire to have tv shows blaring at you while you pump your gas, and dancing baloney on the screen when not, has lead to more horsepower. Likewise the coke and water machines with the two axis grabber.
  • Andrew Marshall
    Andrew Marshall almost 13 years
    @Justin, well yes of course, Java needs to sit atop something to function. My point was that it utilizes such a high-level language (comparatively) as Java.
  • Gunther Piez
    Gunther Piez almost 13 years
    @Andrew: And on what operating system does the Java interpreter in the blue ray run? And in what language is that operating system written?
  • Piskvor left the building
    Piskvor left the building almost 13 years
    That's a rather small gorilla, but I guess power constraints are rather important with embedded great apes ;)
  • Justin Ethier
    Justin Ethier almost 13 years
    @dwelch - Good point, and sadly I have actually see the BSOD on one of the machines at the local grocery store.
  • Andrew Marshall
    Andrew Marshall almost 13 years
    @drhirsch …I just stated that it can't run on its own. As I said before I would think that would be implied as Java is incapable of running without sitting atop a low-level interpreter. @dwelch, that's interesting as Justin says they run Linux & BSODs only exist in the world of Windows.
  • Josh Leitzel
    Josh Leitzel almost 13 years
    Thank you! I've chosen yours as the best answer since you directly addressed everything in my question. A special thank you for pointing me toward many examples with links.
  • Josh Leitzel
    Josh Leitzel almost 13 years
    Thanks! I've given you an upvote since you were the first to answer and your answer definitely helped me out.
  • Josh Leitzel
    Josh Leitzel almost 13 years
    Thank you! Your answer was useful to me and I've given you an upvote.
  • Josh Leitzel
    Josh Leitzel almost 13 years
    Thank you so much! If I could have chosen another best answer, it would have been yours. I found it very useful. +1
  • Justin Ethier
    Justin Ethier almost 13 years
    Thanks, I'm glad the answer helped you out!
  • BlueRaja - Danny Pflughoeft
    BlueRaja - Danny Pflughoeft almost 13 years
    People coding in binary? Assemblers are so stupidly simple to write I find that hard to believe. Do you have a source for this? Also, this answer gives the false impression that all systems contain a microprocessor which runs code. Though this is becoming more popular as microcontrollers and EEPROM (which make debugging and upgrading easier) become cheaper, it is still not worth it for very cheap systems, or systems which have not changed much over the last 20 years. For example, some digital watches.
  • dmckee --- ex-moderator kitten
    dmckee --- ex-moderator kitten almost 13 years
    This is simply too strongly stated. You don't need to host the compiler on the target. Cross-compilers are very common in embedded programming.
  • Potatoswatter
    Potatoswatter almost 13 years
    A coke machine running QNX? WTF - that's another kind of coke! And yes, there is a C compiler for every single platform currently shipping in volume. Nobody wants to write assembly, lack of C would be a huge handicap. (Some compilers aren't very good, granted.)
  • Potatoswatter
    Potatoswatter almost 13 years
    Also, EEPROM by definition can be rewritten 100000+ times. Write-once memories are obsolete; all popular microcontrollers today have Flash. FPGA is a completely different market from low-end MCU… you have no idea what you're talking about.
  • Potatoswatter
    Potatoswatter almost 13 years
    This is wrong. A major factor in the cost of low-cost chips is the package that carries the silicon. For this reason, it is cheaper to replace discrete logic with a microcontroller once you get to a couple dozen gates or so… and a dozen gates don't do much. MCU ubiquity has driven up the cost of discrete gates, changing the balance. Also, most low-end MCUs don't run any kind of operating system.
  • chubbsondubs
    chubbsondubs almost 13 years
    I have a friend who works on vending machines that are quite complex. They have cellular radios, monitor inventory, track temperature, report financial figures, and send HTTP calls back to servers to aggregate all of this data so you can track across all of your machines. And yes these brands of machines are using an Embedded OS. I think they're using RTLinux using C. So yes even the lowly vending machine is becoming complex enough to warrant embedded OS.
  • domen
    domen almost 13 years
    ARM chips are entering low end too... with <1USD prices, 2x2mm footprint.
  • Potatoswatter
    Potatoswatter about 11 years
    Embedded OS like RTLinux, yes. But QNX has significant license costs and isn't used where it's not needed, and it's not needed for a vending machine no matter what.
  • Prof. Falken
    Prof. Falken almost 11 years
    I'add that RTLinux is not used in routers, just plain Linux. (or uCLinux)
  • Mira Weller
    Mira Weller about 7 years
    Modern processors are surprisingly much concerned about operating systems. They provide features like Memory Management Units, privileged instructions and modes and hardware virtualization. Modern operating systems depend on some of these features. That's the reason why you can't (easily) run linux on small microcontrollers.
  • Peter Cordes
    Peter Cordes about 3 years
    @BlueRaja-DannyPflughoeft: This answer is community-wiki; someone with actual embedded experience should probably edit to fix the egregious claims like hand-writing machine code because asm needs a "compiler".