일상적인 기계는 어떻게 프로그래밍됩니까?


147

일상의 기계 (어플라이언스, 디지털 시계 등과 같은 컴퓨터 및 모바일 장치는 그렇게 많이 사용되지 않음)는 어떻게 프로그래밍됩니까? 코카콜라 자동 판매기의 프로그래밍에는 어떤 코드가 있습니까? 커피 메이커가 미리 프로그램 된 시간을 어떻게 받아들이고 나중에 시간이 지나면 커피 포트를 끓이기 시작합니까?

이러한 종류의 컴퓨터에는 운영 체제가 있습니까? 아니면 더 기본적인 것입니까? 어셈블리, C 또는 다른 언어로 작성 되었습니까?

그리고 가능한 경우 소스 코드를 사용하여 이러한 운영 체제 또는 기본 코드 시스템을 나열하는 리소스를 찾고 싶습니다. 누군가 그러한 자원을 알고 있다면 (검색하면 아무것도 얻지 못합니다) 환상적입니다.


12
환상적인 질문! 나는 똑같은 것을 스스로 궁금해했다.
Jonathan Sterling

7
"내장 시스템"에서 검색 / 연구를 수행하십시오 (태그도 추가했습니다).
mu는 너무 짧습니다

가까운 투표 InRe : 그것에 대해 때문에 나는 프로그래머를위한 자료로이 표시되지 않는 프로그램 . 반면에 전자 전문가 SE 사이트에서는 전문가가 더 많기 때문에 간단합니다. 물론 대답은 위의 모든 것 중 일부입니다. 하나의 답변을 얻으려면 더 작은 수업을 선택해야합니다.
dmckee --- 전 운영자 고양이

최소 3 가지 엔지니어링 분야와 그 사이의 많은 음영을 다루는 매우 광범위한 질문입니다.
Jodrell

FWIW, Arduino (~ $ 30) arduino.cc 와 같은 마이크로 컨트롤러 플랫폼을 사용하는 것이 좋습니다 .
steamer25

답변:


47

당신이 말하는 대부분의 C는 종종 사치품이없는 임베디드 기반 시스템입니다. 전통적인 의미의 소프트웨어는 없습니다. 대부분의 경우 소프트웨어는 C, 어셈블리 또는 머신 코드로 작성됩니다. C 및 ASM에서는 해당 플랫폼에 사용할 컴파일러를 작성해야합니다. 머신 코드는 바이너리 w / oa 컴파일러로 작성됩니다.

커피 포트와 가장 간단한 시스템에는 운영 체제가 없습니다. 그들은 단순히 메모리의 시작 주소에서로드하고 코드를 거기에 넣습니다. 이러한 시스템은 종종 시스템의 하드 드라이브 역할을하는 EEPROMS에 "코드"를 기록합니다. 프롬을 태운 후 코드를 조이고 칩을 버리고 칩 의 코드를 다시 태운 다음 다시 시작하십시오. 고급 디바이스가 테스트, 배포 등을보다 쉽게하기 위해 사용하는 최신 칩 FPGA가 있지만 그것들은 동일합니다.

코카콜라 기계, 라우터 등은 일반적으로 QNX, EMBOS와 같은 실시간 OS를 사용하거나 운이 좋으면 때때로 RTlinux를 사용합니다. 이들 중 대부분은 많은 돈으로 라이센스를 취득한 독점 OS이지만 C 컴파일러, 하드웨어와 함께 작동하는 드라이버 등이 있습니다.

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


35
바이너리로 코딩하는 사람들? 어셈블러는 너무 멍청하게 작성하기가 쉽지 않습니다. 이것에 대한 소스가 있습니까? 또한이 답변은 모든 시스템에 코드를 실행하는 마이크로 프로세서가 포함되어 있다는 잘못된 인상을줍니다. 마이크로 컨트롤러와 EEPROM (디버깅 및 업그레이드가 더 쉬워 짐)이 저렴 해짐에 따라 인기가 높아지고 있지만, 매우 저렴한 시스템이나 지난 20 년 동안 크게 바뀌지 않은 시스템에는 여전히 가치가 없습니다. 예를 들어, 일부 디지털 시계.
BlueRaja-대니 Pflughoeft

6
이것은 단순히 너무 강력하게 언급됩니다. 대상에서 컴파일러를 호스팅 할 필요는 없습니다. 크로스 컴파일러는 임베디드 프로그래밍에서 매우 일반적입니다.
dmckee --- 전 운영자 고양이

12
QNX를 실행하는 코크스 머신? WTF-그것은 또 다른 종류의 콜라입니다! 그리고 현재 대량 판매되는 모든 단일 플랫폼에 대한 C 컴파일러가 있습니다. 아무도 어셈블리를 작성하고 싶지 않다면 C가 부족하면 큰 장애가 될 것입니다. (일부 컴파일러는 그다지 좋지 않습니다 .)
Potatoswatter

8
또한 EEPROM은 정의에 따라 100000 회 이상 다시 작성할 수 있습니다. 추 기형 메모리는 더 이상 사용되지 않습니다. 오늘날 모든 인기있는 마이크로 컨트롤러에는 플래시가 있습니다. FPGA는 저가형 MCU와는 완전히 다른 시장입니다… 당신은 당신이 무슨 말을하고 있는지 전혀 모릅니다.
Potatoswatter

7
꽤 복잡한 자동 판매기에서 일하는 친구가 있습니다. 여기에는 셀룰러 라디오가 있고, 재고를 모니터링하고, 온도를 추적하고, 재무 수치를보고하고, 모든 데이터를 집계하기 위해 서버로 HTTP 호출을 다시 보내 모든 시스템에서 추적 할 수 있습니다. 그렇습니다.이 브랜드의 브랜드는 임베디드 OS를 사용하고 있습니다. 나는 그들이 C를 사용하여 RTLinux를 사용하고 있다고 생각합니다. 그렇기 때문에 낮은 자판기조차도 임베디드 OS를 보장하기에 충분히 복잡해지고 있습니다.
chubbsondubs

29

그들은 마이크로 컨트롤러를 사용 하며 8051 은 고전입니다. 이들은 8 비트 또는 16 비트 코어이며 운영 체제가 거의 없습니다. 프로그래머는 코드를 작성하여 온보드 주변 장치를 초기화하고 인터럽트 처리기를 구현합니다. 사용되는 언어는 어셈블리와 C입니다. 힘든 디버깅 작업에는 회로 내 에뮬레이터가 필요합니다.

임베디드 버전의 Linux 및 / 또는 Java JVM을 부팅하는 32 비트 임베디드 코어 (ARM은 100 파운드 고릴라)를 사용하여 이보다 더 많은 공간이 있습니다.


5
그것은 오히려 작은 고릴라입니다,하지만 난 전력 제약 조건이 포함 된 유인원과 다소 중요하다 생각)
Piskvor 건물 왼쪽

감사합니다! 당신의 대답은 나에게 유용했고 나는 당신에게 공감대를주었습니다.
Josh Leitzel

ARM 칩도 1 달러 미만의 가격, 2x2mm의 풋 프린트로 저가에 진입하고 있습니다.
domen

24

이들은 임베디드 시스템 이며 C 또는 어셈블리와 같은 매우 낮은 수준의 언어를 사용하여 프로그래밍됩니다. 일반적으로 이러한 시스템은 운영 체제없이 실행되지만 블루 레이 DVD 플레이어 및 무선 라우터와 같은 일부 최신 "매일의 컴퓨터"는 UNIX 기반 운영 체제에서 코드를 실행합니다.


최신 정보

다른 사람들의 말과 함께 많은 현대식 임베디드 시스템도 풍미있는 창문을 운영합니다. 응용 프로그램에 따라 다릅니다. 또한 많은 공간에서 운영 체제를 갖춘 더 강력한 플랫폼에서 실행하고 Java를 실행해야하는 Blue-ray 플레이어와 같은 경우를 처리하고 최종 사용자가 더 많은 기능을 원하는 다른 인스턴스를 처리하는 경향이 있습니다.


명확히하기 위해 Bluray는 Java를 사용합니다.
Andrew Marshall

6
그러나 실제 플레이어는 Linux를 실행하고 C / C ++로 작성되었습니다.
Justin Ethier

금전 등록기 및 가스 펌프 등은 실행중인 작업 (일부 브랜드), 슬프게도 현재 실행중인 일부 (식료품 점 또는 기타 자체 점검 라인)입니다. 당신이 당신의 가스를 펌핑하는 동안 TV 쇼가 당신을 비난하고, 그렇지 않은 경우 화면에서 외로움을 춤추는 욕구는 더 많은 마력을 이끌어 냈습니다. 마찬가지로 2 축 그래버가있는 코크스 및 워터 머신.
old_timer

@Justin, 물론 물론 Java는 작동 할 수있는 무언가 위에 앉아 있어야합니다. 내 요점은 자바와 같은 고급 언어를 사용한다는 것입니다.
Andrew Marshall

@Andrew : 블루 레이의 Java 인터프리터는 어떤 운영 체제에서 실행됩니까? 그리고 그 운영 체제는 어떤 언어로 작성됩니까?
Gunther Piez

18

데스크탑의 프로세서에 대해 생각해 봅시다. 머신 명령을 실행하는 것 자체만으로 "운영 체제"또는 "프로그램"에 대해서는 전혀 신경 쓰지 않습니다.

컴퓨터를 켜고 프로세서가 첫 번째 명령을 가리키고 실행을 시작합니다.

데스크탑에서 "운영 체제"실행을 시작합니다. 그러나 프로세서가 선택한 명령 세트를 실행할 수없는 이유는 없습니다. (여전히 화면에 결과를 출력하고 그 기능이 OS에 상주하기 때문에이 기능은 유용하지 않을 수 있습니다.) 동시에 기계 명령어가 올바른 opcode로 구성되어 프로세서가 출력되도록하는 경우 모니터에 그림을 그리는 올바른 신호 순서가 더 좋습니다. OS가 필요하지 않습니다.

데스크탑은 우리가 일반적으로 OS 추상화를 필요로하는 많은 일을 합니다. 그러나 핵심은 프로세서가 명령을 실행하는 것입니다.

콜라 머신 및 커피 머신의 프로세서와 동일합니다. 명령을 실행하기 만하면됩니다.

글쎄, 비트별로 기계 명령을 작성하는 것은 지루합니다. 따라서 데스크톱과 마찬가지로 일반적으로 C로 코드를 작성한 다음 머신 코드로 컴파일합니다. 해당 기계 코드는 내장 프로세서에로드되어 실행됩니다.

임베디드 시스템은 운영 체제가 불필요 할 정도로 작습니다 . 마이크로 컨트롤러는 일반 CPU 소켓의 핀 수에 비해 칩에 8 개 또는 16 개의 핀이있을 수 있습니다.

따라서 워크 플로는 일부 코드 (예 : C)를 작성하여 데스크톱 컴퓨터에서 컴파일합니다. 이 컴파일러는 임베디드 칩에 대한 머신 코드를 생성합니다. 그런 다음 해당 코드가 마이크로 프로세서에로드됩니다 (이 작업을 수행하려면 특별한 하드웨어가 필요합니다). 그러면 칩에 전원이 공급되고 명령어 실행이 시작됩니다. 단순한!


2
정말 고맙습니다! 내가 또 다른 최선의 대답을 선택할 수 있다면 그것은 당신의 것이었을 것입니다. 나는 그것이 매우 유용하다는 것을 알았습니다. +1
Josh Leitzel

최신 프로세서는 놀랍게도 운영 체제에 대해 많은 관심을 가지고 있습니다. 메모리 관리 장치 , 권한있는 명령 및 모드하드웨어 가상화 같은 기능을 제공합니다 . 최신 운영 체제는 이러한 기능 중 일부에 의존합니다. 이것이 작은 마이크로 컨트롤러에서 리눅스를 ( 쉽게 ) 실행할 수없는 이유 입니다.
Mira Weller

12

특정 기능을 수행하는 많은 장치에는 "코드"가 없습니다. 전자 부품의 특성을 통해 기능을 수행합니다. 다양한 기능을 수행하거나 쉽게 업그레이드 할 수 있어야하는 고급 시스템에는 마이크로 컨트롤러와 일종의 "운영 체제"가 포함됩니다. 이것들은 여전히 ​​기능에 한계가 있기 때문에 운영 체제는 간단하고 특별하게 설계됩니다. 더 발전함에 따라 장치에는 컴퓨터와 비슷한 것이 포함됩니다. 시스템의 다른 부분과 통신 할 수있는보다 복잡한 운영 체제를 갖습니다. 마지막으로, 스마트 폰과 같은 장치에는 사용자 수준 코드를 실행할 수있는 전체 운영 체제가 포함되어 있으며 간단한 장치보다 사용자 입력이 훨씬 많습니다. 하나, 최신 프로세서조차도 본질적으로 매우 큰 전기 회로입니다. CPU가 인식하는 모든 명령은 다른 회로를 사용하여 해당 기능을 수행합니다.

관심이있을만한 Wikipedia 페이지는 다음과 같습니다.

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


이것은 잘못이다. 저비용 칩 비용의 주요 요인은 실리콘을 운반하는 패키지입니다. 이러한 이유로 수십 개의 게이트에 도달하면 이산 논리를 마이크로 컨트롤러로 대체하는 것이 더 저렴합니다. MCU 유비쿼터스는 이산 게이트 비용을 증가시켜 균형을 바꾸었다. 또한 대부분의 저가형 MCU는 어떤 종류의 운영 체제도 실행하지 않습니다.
Potatoswatter

7

그것은 매우 광범위한 질문이며 기계에 따라 크게 다릅니다. 나는이 자동 판매기의 대부분이 마이크로 컨트롤러 (8051, PIC, ARM7, 가장 많이 사용되는 이름을 지정 함)에 의해 제어되고 거의 OS가 없으며 추측 할 수있는 RTOS가 있다고 추측 할 수 있습니다. FreeRTOS .

DVD / BluRay 플레이어 또는 휴대폰과 같은보다 복잡한 시스템은 OMAP4 와 같은 복잡한 플랫폼에서 실행됩니다 . 일반적으로 Unix OS가 실행됩니다.


답변 주셔서 감사합니다! +1
Josh Leitzel

7

일상적인 기기에서 사용되는 저가형 마이크로 컨트롤러는 일반적으로 운영 체제를 실행하지 않습니다. 그것들은 저렴한 비용으로 선택되며, 그 비용을 발생시키는 주요 요인은 칩의 핀 수 (수십에서 수백까지)와 내부의 메모리 양 (몇 킬로바이트에서 메가 바이트 ROM까지)입니다. 바이트에서 백 킬로바이트 RAM까지).

기능 크리프가 마법을 발휘함에 따라 전자 레인지가 멀티 태스킹해야 할 수도 있습니다. 이 경우 프로그래머는 운영 체제 과정을 리콜하고 필요에 따라 메시지 전달, 작업 예약, 비동기 I / O 등을 구현합니다!

물론, 편의성, 단순성, 코드 크기 등을 위해 기능은 기본적인 방식으로 수행되는 경향이 있습니다. 작업 별 코드 내에서 일반화 된 OS 기능을 찾기 위해 프로그램을 분석하는 방법에 따라 다릅니다. 그러나 하드 코딩 된 작업 스케줄러에서 운영 체제에 이르기까지 먼 길이며, 몇 킬로바이트 만 작업 할 때는 상용 OS가 해결책 이 아닙니다 .

저가형 MCU에 대해 알아 보려면 널리 사용되는 전자 부품 선택 사이트 인 DigiKey를 살펴보십시오. 다음 은 커피 머신에서 볼 수있는 LCD 컨트롤러가있는 매우 저렴한 MCU에 대한 정보입니다. 프로그래밍 매뉴얼과 모든 것을 쉽게 얻을 수 있습니다.


5

운영 체제의 작업은 CPU 실행 시간, RAM, I / O 등 리소스에 대한 공유 액세스를 제공하는 것입니다. 대부분의 간단한 마이크로 컨트롤러 기반 임베디드 시스템에는 한 번에 하나의 프로그램 만 실행되며 이러한 리소스 자체에 액세스 (및 관리)합니다. 따라서 운영 체제가 필요하지 않습니다.

임베디드 시스템은 일반적으로 C로 프로그래밍되며 때로는 극단적 인 타이밍 또는 메모리 최적화를 위해 어셈블리로 프로그래밍됩니다. 일부 임베디드 컴파일러를 사용하면 고급 언어 내에서 어셈블리를 산재 할 수 있습니다.


4

나는 최근에 우분투를 실행하는 담배 자판기를 발견했습니다 (기계가 재부팅되어 로고를 볼 수있었습니다).



1

일반적인 정보를 찾으려면 "내장 시스템", "soc"(system-on-a-chip)과 같은 것을 찾으십시오. 이러한 유형의 장치 중 대부분은 C와 같은 저수준 언어로 실행됩니다.

재미있는 사실 : Java는 원래 임베디드 시스템 프로그래밍에 대한 솔루션으로 고안되었습니다 : http://en.wikipedia.org/wiki/Oak_(programming_language )


감사합니다. 더 자세히 조사하겠습니다! +1
Josh Leitzel

1

대부분의 키오스크, 레지스터, 드라이브 스루 스크린 및 고급 커피 머신 및 전자 레인지는 실제로 "Jura Impressa"시리즈 머신과 같은 Windows XP 또는 Linux를 실행합니다. SSH를 통해 커피를 추출 할 수 있습니다.

커피 머신 크론 작업의 github 스크립트는 다음과 같습니다. https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb

대부분의 라우터, 최신 오븐, 최신 냉장고, 자동차, DVD 플레이어, 다양한 전자 제품, 전구를 포함한 최신 홈 오토메이션 제품은 ARM Linux 또는 임베디드 Linux 버전을 실행합니다.

최신형 인 경우 20 달러 미만의 가장 저렴한 장치는 ESP8266 또는 이와 유사한 장치에서 실행됩니다 (LUA 또는 축소 된 노드 서버를 2 달러에 대량으로 운영 할 수 있음).

http://nodemcu.com/index_en.html

FPGA와 8051, Z80과 같은 임베디드 시스템을 사용하거나 PICC, AVR 및 Arduino와 같은 다른 임베디드 디바이스는 곧 ESP8266과 같은 올인원 / SoC (System on Chip) 시스템으로 대체 될 예정입니다. 그것들은 단순히 프로그래밍하기가 너무 쉽고 자체 웹 서버를 실행하는 칩상의 완전한 시스템입니다. 전원을 켜고 소스 코드를 업로드하면 2 달러에 네트워크 서버가 제공됩니다.

나는 PICC와 AVR, 8051을 코딩하면서 자랐고, 그들이가는 것을보고 슬 sad지만, 가격의 1/10에 불과하고 작업하기가 훨씬 쉬우므로 몇 년 동안 ESP8266es 이외의 것을 만지지 않았습니다. . 배터리 팩과 분해 핀 레이아웃이있는 개발 보드에서 ebay에 5 달러, adafruit에 10 달러에 구입할 수 있습니다.


-2

엔지니어로부터 지멘스 경전철 통근 열차가 386 대를 운행한다고 들었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.