일상적인 기계는 어떻게 프로그램됩니까?
일상적인 기계(어플라이언스, 디지털 시계 등 컴퓨터나 모바일 디바이스는 많지 않음)는 어떻게 프로그램됩니까?코카콜라 자판기의 프로그래밍에는 어떤 코드가 들어가나요?커피 메이커는 어떻게 미리 정해진 시간을 받아들이고 몇 시간 후에 커피 한 주전자를 끓이기 시작할까요?
이러한 종류의 기계에는 운영 체제가 내장되어 있습니까, 아니면 더 기본적인 것입니까?어셈블리, C, 또는 다른 언어로 쓰여져 있습니까?
또, 이러한 operating system이나 기본 코드 시스템을 리스트 하고 있는 자원을 찾고 싶습니다.가능하다면 소스 코드도 포함시킬 수 있습니다.그런 자원을 아는 사람이 있다면(검색 결과 아무것도 얻을 수 없었다) 그것은 환상적일 것이다.
대부분의 경우 임베디드 시스템입니다.C는 럭셔리하고, 이용하실 수 없습니다.이 소프트웨어는 데스크탑이나 전화기에서처럼 OS에서 실행되는 개별 프로그램이 아닌 경우가 많습니다.특히 설계자가 사용하는 칩을 마이크로 컨트롤러라고 부르는 경우에는 더욱 그렇습니다.
대부분의 경우 소프트웨어는 C 또는 어셈블리로 작성됩니다.C는 컴파일러를 그 플랫폼에 쓸 필요가 있습니다(또한 최적화가 잘 되지 않으면 비대하거나 비효율적인 asm이 발생할 수 있습니다).단순한 어셈블러는 텍스트를 한 번에 한 줄씩 기계어로 변환하여 쓰기 쉽습니다(또한 벤더가 마이크로 컨트롤러 구입을 원하는 경우 최소 어셈블러가 존재하는지 확인합니다).개발을 매력적으로 만들기 위해, 종종 C 컴파일러를 사용하기도 하지만 때로는 최적화되지 않습니다.
커피포트와 그와 같은 간단한 시스템은 운영체제를 지원하지 않습니다.메모리의 시작 주소에서 로딩하기만 하면 코드를 입력할 수 있습니다.대부분의 경우, 이러한 시스템은 시스템의 하드 드라이브로서 기능하는 EEPROM에 「코드」를 기입합니다.또는 EEPROM/플래시의 종류에 따라서는, 최초로 RAM에 로드하지 않고, 플래시로부터 직접 코드를 실행할 수 있습니다(디바이스가 자신의 플래시 메모리에 쓸 수 없는 경우가 있습니다.이것은 외부 툴로 행해집니다).편집/컴파일/실행 사이클에는 시뮬레이터에서 테스트하지 않는 한 실제 하드웨어의 플래시 재프로그래밍이 포함될 수 있습니다.)
코카콜라 머신, 라우터 등은 일반적으로 QNX, EMBOS 또는 운이 좋으면 RTlinux와 같은 실시간 OS를 사용합니다.대부분은 고액의 라이선스를 취득한 독자적인 OS이지만, C 컴파일러나 하드웨어용 드라이버 등을 탑재하고 있습니다.
http://www.segger.com/cms/embos.html
RTLinux
이것들은 임베디드 시스템이며, C나 어셈블리와 같은 매우 낮은 수준의 언어를 사용하여 프로그래밍됩니다.블루레이 DVD 플레이어나 무선 라우터 등 새로운 "일상 머신"은 Unix 기반 운영체제 상에서 코드를 실행하지만 일반적으로 이러한 시스템은 운영체제 없이 실행됩니다.
갱신하다
다른 사람들이 말하는 것처럼, 많은 현대식 임베디드 시스템은 또한 윈도우의 풍미를 작동시킵니다.응용 프로그램에 따라 다릅니다.또한 운영체제를 탑재한 보다 강력한 플랫폼에서 실행하거나 Blue-ray Player에서 Java를 실행해야 하는 경우, 기타 최종 사용자가 더 많은 기능을 필요로 하는 경우를 처리하는 경향이 있습니다.
마이크로컨트롤러를 쓰는데 8051이 고전적이죠.이들은 8비트 또는 16비트 코어로 운영체제를 사용하는 경우는 거의 없습니다.프로그래머는 온보드 주변기기를 초기화하고 인터럽트 핸들러를 구현하기 위해 코드를 작성합니다.사용되는 언어는 어셈블리와 C입니다.어려운 디버깅 작업에는 회로 내 에뮬레이터가 필요합니다.
32비트의 임베디드 코어(ARM은 100파운드의 고릴라)를 탑재하여 Linux 및 Java JVM의 임베디드 버전을 기동할 수 있기 때문에, 이 밖에도 많은 확장 여지가 있습니다.
데스크탑의 프로세서에 대해 생각해 봅시다.기계 명령어를 실행하는 것 뿐, 그 자체로는 「운영 체제」나 「프로그램」에 대해서는 그다지 염려하지 않습니다.
컴퓨터의 전원을 켜면 프로세서가 첫 번째 명령을 가리키고 실행이 시작됩니다.
데스크탑에서는, 「운영 체제」의 실행이 개시됩니다.단, 선택한 명령어 세트를 프로세서에서 실행할 수 없는 이유는 없습니다.(이 기능은 아직 화면에 출력하고 싶을 뿐만 아니라 OS에 있기 때문에 그다지 유용하지 않을 수 있습니다).동시에 프로세서가 올바른 일련의 신호를 출력하여 모니터에 그림을 그릴 수 있도록 기계 명령이 올바른 opcode로 구성되어 있다면 더욱 좋습니다.OS는 필요 없습니다.
데스크톱은 많은 작업을 수행하므로 일반적으로 OS의 추상화가 필요합니다.그러나 기본적으로 프로세서가 수행하는 것은 명령어 실행뿐입니다.
콜라 머신과 커피 머신에 탑재된 프로세서도 마찬가지입니다.명령만 실행하면 됩니다.
글쎄요, 기계 설명서를 조금씩 쓰는 건 지루해요.데스크톱과 마찬가지로 일반적으로 C로 코드를 작성하고, C는 기계 코드로 컴파일됩니다.그 기계 코드가 내장 프로세서에 로드되어 실행됩니다.
임베디드 시스템은 기능이 거의 없기 때문에 풀온 OS가 필요 없습니다.마이크로컨트롤러의 칩에 8핀 또는 16핀이 탑재되어 있는 경우가 있습니다.이는 일반 CPU 소켓에 있는 핀의 수와 비교됩니다.
따라서 워크플로우는 몇 가지 코드를 작성하고(예를 들어 C에서), 이를 데스크톱 머신에 컴파일합니다.그 컴파일러는 내장된 칩의 기계 코드를 생성합니다.그 후, 그 코드가 마이크로프로세서에 로드됩니다(이를 위해서는 특별한 하드웨어가 필요합니다).그런 다음 칩에 전원을 공급하면 명령이 실행됩니다.심플!
그건 매우 광범위한 질문이고 기계에 따라 많이 달라져요.이들 자판기의 대부분은 마이크로컨트롤러(8051, PIC, ARM7)에 의해 제어되며 OS가 거의 없으며, 있다면 FreeRTOS와 같은 RTOS일 것이라고 추측할 뿐입니다.
DVD/BluRay 플레이어나 휴대 전화와 같은 보다 복잡한 기계는 OMAP4와 같은 정교한 플랫폼 위에서 작동합니다.통상, Unix OS 는 이러한 OS 상에서 동작합니다.
특정 기능을 수행하는 대부분의 장치에는 "코드"가 포함되어 있지 않습니다.전자 부품의 속성을 통해 기능을 수행합니다.다양한 기능을 수행할 수 있거나 쉽게 업그레이드할 필요가 있는 보다 고도의 시스템에는 마이크로 컨트롤러와 일종의 "운영 체제"가 포함됩니다.기능에는 아직 한계가 있기 때문에 운영체제는 심플하고 특별히 설계되어 있습니다.한층 더 고도의 디바이스에는, 컴퓨터와 같은 것이 포함되어 있습니다.시스템의 다른 부분과 통신할 수 있는 보다 복잡한 운영 체제를 갖게 됩니다.마지막으로 스마트폰과 같은 기기에 도달합니다.이 기기는 사용자 수준의 코드를 실행할 수 있는 완전한 운영체제를 포함하고 있어 단순한 기기보다 훨씬 더 많은 사용자 입력을 가지고 있습니다.그러나 최신 프로세서조차 본질적으로 매우 큰 전기 회로입니다.CPU가 인식하는 명령마다 그 기능을 수행하기 위해 다른 회로가 사용됩니다.
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
Low-end microcontrollers found in everyday appliances typically do not run an operating system. They are chosen for low cost, and the main factors driving that cost are the number of pins on the chip (from a dozen to a couple hundred) and the amount of memory inside (from a couple kilobytes to a megabyte ROM, from a few bytes to a hundred kilobytes RAM).
As feature creep works its magic, it does happen that a microwave may need to multitask. In this case, the programmer recalls their operating systems course and implements message-passing, task scheduling, asynchronous I/O, etc as necessary!
Of course, for the sake of expedience, simplicity, code size, etc, features tend to be done in a rudimentary way. Often it depends how you analyze the program, to find generalized OS functionality within task-specific code. But it's a long way from a hard-coded task scheduler to an operating system, and when you have only a few kilobytes to work with, an off-the-shelf OS is not the solution.
Take a look at DigiKey, a popular electronic parts selection site, to learn about low-end MCUs. Here is their info on a very cheap MCU with an LCD controller, such as might be found in a coffee machine. It's easy enough to get the programming manual and everything.
The job of an operating system is to provided shared access to resources - CPU execution time, RAM, I/O etc. Most simple microcontroller based embedded systems have only one program running at a time, and they access (and manage) these resources themselves, hence they don't need an operating system.
Embedded systems are typically programmed in C, and sometimes in assembly for extreme timing or memory optimisation. Some embedded compilers allow you to intersperse assembly within a higher level language.
I recently came across a cigarette vending machine that ran Ubuntu (the machine was rebooting, so I could see the logo).
Take a look at Embedded Systems Magazine and Circuit Cellar
If you're googling around for general info, look for things like "embedded systems", "soc" (system-on-a-chip). I'd say a large portion of these types of devices run in low-level languages, such as C.
Fun fact: Java was originally conceived as a solution to embedded systems programming: http://en.wikipedia.org/wiki/Oak_(programming_language)
Most Kiosks, registers, drive-thru screens, and even high end coffee machines and microwaves actually run Windows XP or Linux, like the "Jura Impressa" series machines; you can SSH into them and brew coffee.
Here's a github script of a coffee machine cron job: https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb
Most Routers, newer ovens, newer refrigerators, cars, DVD players, various electronics, newer home automation products including light bulbs, run a version of ARM linux or embedded Linux.
Most cheaper devices, under $20, if they are newer, run on the ESP8266 or similar device (can run LUA or a reduced Node server for $2 in bulk - insanely cheap)
http://nodemcu.com/index_en.html
Using FPGA and embedded systems like 8051, Z80 or other embedded devices like PICC, AVR and Arduino are going to soon be replaced by all-in-one/SoC (System on Chip) systems like the ESP8266. They are simply too easy to program, and are a complete system on a chip that run their own web server; you just power them up, upload your source code and you have a networked server for $2.
I grew up coding PICC and AVR and 8051, and I'm sad to see them go, but I haven't touched anything other than ESP8266es in years because they are 1/10th the price and are an order of magnitude easier to work with. You can get them on development boards with battery packs and exploded pin layouts for $5 on ebay or $10 on adafruit.
I heard from an engineer that the Siemens Light-Rail Commuter Trains run on 386s.
ReferenceURL : https://stackoverflow.com/questions/5616237/how-are-everyday-machines-programmed
'programing' 카테고리의 다른 글
Java에서 현재 날짜/시간을 가져오는 방법 (0) | 2022.07.13 |
---|---|
nuxt 프로젝트에 store/index.js 파일이 없습니다. (0) | 2022.07.13 |
SSL 핸드쉐이크 경고: Java 1.7.0으로 업그레이드한 후 인식되지 않는_name 오류 (0) | 2022.07.13 |
복제된 라우터 링크는 자 라우터 뷰에 로드되어야 하지만 메인 라우터 뷰도 새로고침됩니다. (0) | 2022.07.13 |
nuxt vuex에서 정의되지 않은 커밋 (0) | 2022.07.13 |