日常机器如何编程?


147

日常机器(不像家用电器,数字手表等那样的计算机和移动设备)如何编程?可口可乐自动售货机的编程中使用哪种代码?我的咖啡机如何接受预先设定的时间,然后在几小时后开始冲泡一壶咖啡?

这些机器内部是否装有操作系统,还是更基本的东西?它们是用Assembly,C还是其他某种语言编写的?

而且,我真的很想找到一些列出这些操作系统或基础代码系统的资源,甚至在可能的情况下甚至还带有源代码。如果有人知道这样的资源(搜索对我没有任何帮助),那就太好了。


12
很棒的问题!我自己一直在想同样的事情。
乔纳森·斯特林

7
在“嵌入式​​系统”上进行一些搜索/研究(我甚至为您添加了标签)。
亩太短了,

温馨提示:我不认为这对Programmers至关重要,因为它与编程有关。另一方面,它可能在电子SE网站上做得很好,这很简单,因为会有更多的专家。答案当然是上述所有条件中的一部分。您需要选择一个较小的班级才能得到一个答案。
dmckee ---前主持人小猫,

它的问题非常广泛,涉及至少3个工程学科以及介于两者之间的许多阴影。
Jodrell

FWIW,您可能对使用诸如Arduino(〜$ 30)arduino.cc之类的微控制器平台感兴趣
steamer25 2011年

Answers:


47

您所谈论的大多数都是基于嵌入式的系统,其中C常常是奢侈的。他们没有传统意义上的软件。大多数时候,软件是用C,汇编语言甚至机器代码编写的。C和ASM要求编写编译器以将其用于该平台。机器代码被编写为二进制w / oa编译器。

您的咖啡壶和类似的最简单的系统都没有操作系统。它们只是从内存中的起始地址加载,然后将代码放在此处。通常,这些系统会将其“代码”刻录到EEPROMS中,作为系统的硬盘驱动器。烧掉舞会后,拧紧代码,扔掉筹码,重新烧写芯片上的代码,然后重新开始。高端设备使用了更新的FPGA FPGA来简化测试,部署等工作,但这是一回事。

可口可乐机器,路由器等通常使用实时操作系统,例如QNX,EMBOS,或者如果幸运的话有时使用RTlinux。其中大多数是您需要大量许可的专有OS,但它们具有C编译器,与硬件一起使用的驱动程序等。

http://www.qnx.com/

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

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

实时Linux


35
人们用二进制编码吗?汇编器的编写是如此愚蠢,我很难相信。你有这个来源吗?同样,这个答案给人一种错误的印象,即所有系统都包含一个运行代码的微处理器。尽管随着微控制器和EEPROM(使调试和升级变得更加容易)变得越来越便宜,这种方法变得越来越流行,但是对于非常便宜的系统或在过去20年中变化不大的系统来说,仍然不值得这样做。例如,一些数字手表。
BlueRaja-Danny Pflughoeft 2011年

6
简而言之,这太过强烈了。您无需将编译器托管在目标计算机上。交叉编译器在嵌入式编程中非常常见。
dmckee ---前主持人小猫,

12
运行QNX的可乐机?WTF-那是另一种可乐!是的,当前批量销售的每个平台都有一个C编译器。没有人愿意编写汇编,缺少C将会是一个巨大的障碍。(当然,有些编译器不是很好。)
Potatoswatter 2011年

8
同样,根据定义,EEPROM可以重写100000+次。一次写入的记忆已过时;当今所有流行的微控制器都具有Flash。FPGA是与低端MCU完全不同的市场……您不知道自己在说什么。
Potatoswatter 2011年

7
我有一个在复杂的自动贩卖机上工作的朋友。它们具有蜂窝无线电,监视库存,跟踪温度,报告财务数据,并将HTTP调用发送回服务器以汇总所有这些数据,以便您可以跨所有计算机进行跟踪。是的,这些品牌的机器都在使用嵌入式操作系统。我认为他们使用的是使用C的RTLinux。因此,是的,即使是低价销售的机器也变得足够复杂,足以保证嵌入式OS。
chubbsondubs 2011年

29

他们使用微控制器,8051是经典的一种。这些是8位或16位内核,很少有操作系统。程序员编写代码以初始化板载外围设备并实现中断处理程序。使用的语言是汇编语言和C语言。艰巨的调试工作需要在线仿真器。

除此以外,还有很多增长空间,它们具有引导嵌入式版本的Linux和/或Java JVM的32位嵌入式内核(ARM是100磅重的大猩猩)。


5
那是一只很小的大猩猩,但是我猜想功率限制对于嵌入类人猿来说非常重要;)
Piskvor离开了建筑物2011年

谢谢!您的回答对我很有用,我给了您好评。
Josh Leitzel

ARM芯片也正在进入低端市场……价格低于1美元,占地2x2毫米。
domen

24

这些是嵌入式系统,将使用非常底层的语言(例如C或汇编语言)进行编程。通常,这样的系统将在没有操作系统的情况下运行,尽管诸如蓝光DVD播放器和无线路由器之类的一些较新的“日常机器”的确会在基于unix的操作系统之上运行其代码。


更新资料

按照其他人的说法,许多现代嵌入式系统也运行着各种窗口。这取决于应用程序。同样,在许多领域中,存在一种趋势,即可以在具有操作系统的更强大的平台上运行,以处理诸如需要运行Java的蓝光播放器之类的情况,以及最终用户需要更多功能的其他情况。


为了澄清,Bluray使用Java。
安德鲁·马歇尔

6
也许吧,但是实际的玩家运行Linux并用C / C ++编写
Justin Ethier

收银机,加油泵等运行的是dos(某些品牌),而现在不幸的是其中一些运行的窗口(杂货店或其他自助结账线)。当您抽气时,对电视节目的渴望在您身上刺耳,而在电视屏幕上跳舞时,对鲍尼的舞动却增加了马力。同样,带有两轴抓取器的炼焦机和水机。
old_timer 2011年

@Justin,当然可以,Java需要放在某些东西上才能起作用。我的观点是,它(相对而言)利用了Java之类的高级语言。
安德鲁·马歇尔

@Andrew:蓝光下的Java解释器在什么操作系统上运行?该操作系统用什么语言编写?
冈瑟·皮埃兹

18

让我们考虑一下台式机中的处理器。它所做的只是运行机器指令,而它本身并不真正关心“操作系统”或“程序”。

您打开计算机,处理器指向第一条指令,然后开始执行。

在您的桌面上,它开始执行“操作系统”。但是没有理由不能让处理器执行您选择的任何指令集。(这可能不是很有用,因为您仍然希望将结果输出到屏幕上,并且该功能驻留在OS中。)同时,如果您的机器指令由正确的操作码组成,以便处理器可以输出正确的信号顺序以在监视器上绘制图片效果更好。无需操作系统。

台式机需要做很多事情,因此我们通常需要对操作系统进行抽象。但从根本上讲,处理器所要做的就是执行指令。

可乐机和咖啡机中的处理器也是如此。它所做的只是执行指令。

好吧,一点一点地编写机器指令是很乏味的。因此,与台式机一样,我们通常使用C语言编写代码,然后将其编译为机器代码。该机器代码被加载到嵌入式处理器上并运行。

嵌入式系统做得很少,因此不需要完整的操作系统。与常规CPU插槽中的几十个引脚相比,微控制器的芯片上可能具有8或16个引脚。

因此,工作流程是编写一些代码(例如,用C语言编写),然后在台式机上进行编译。该编译器为嵌入式芯片生成机器代码。然后,将该代码加载到微处理器上(并且您需要特殊的硬件来执行此操作。)然后,给芯片供电并开始执行指令。简单!


2
非常感谢!如果我可以选择另一个最佳答案,那将是您的。我发现它非常有用。+1
Josh Leitzel

令人惊讶的是,现代处理器非常关心操作系统。它们提供的功能包括内存管理单元特权指令和模式以及硬件虚拟化。现代操作系统取决于其中一些功能。这就是为什么您不能(轻松)在小型微控制器上运行linux 的原因。
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 2011年

7

这是一个非常广泛的问题,它在很大程度上取决于机器。我只能猜测,这些自动售货机中的大多数都是由微控制器控制的(8051,PIC,ARM7,等等),很少有操作系统,如果有的话,那将是某种RTOS,例如FreeRTOS

诸如DVD / BluRay播放器或移动电话之类的更复杂的机器运行在诸如OMAP4之类的复杂平台之上。通常在它们上运行Unix OS。


谢谢您的回答!+1
Josh Leitzel

7

日常电器中使用的低端微控制器通常不运行操作系统。选择它们是为了降低成本,而导致成本上升的主要因素是芯片上的引脚数量(从十几个到几百个)以及内部存储器的数量(从几千字节到一个兆字节的ROM,从几个个字节到100 KB RAM)。

当特征蠕变发挥其神奇作用时,确实发生了微波可能需要执行多任务的情况。在这种情况下,程序员可以回顾他们的操作系统课程,并根据需要实现消息传递,任务调度,异步I / O等!

当然,为了方便,简单,代码大小等,功能往往以基本方式完成。通常,这取决于您如何分析程序,以在特定于任务的代码中找到通用的OS功能。但是,从硬编码的任务计划程序到操作系统,这是一条很长的路要走,而当您只有几千字节的数据需要处理时,现成的OS 并不是解决方案。

查看流行的电子零件选择网站DigiKey,以了解低端MCU。是他们有关非常便宜的带有LCD控制器的MCU的信息,例如在咖啡机中可能会找到的信息。轻松获取编程手册和所有内容。


5

操作系统的工作是提供对资源的共享访问权限-CPU执行时间,RAM,I / O等。大多数基于微控制器的简单嵌入式系统一次只运行一个程序,并且它们自己访问(管理)这些资源。 ,因此他们不需要操作系统。

嵌入式系统通常使用C语言编程,有时使用汇编语言编程,以实现极端的时序或内存优化。一些嵌入式编译器使您可以在更高级的语言中散布汇编。


4

我最近遇到了运行Ubuntu的自动贩卖机(该机器正在重新启动,所以我可以看到徽标)。



1

如果您四处寻找一般信息,请查找“嵌入式系统”,“ soc”(片上系统)之类的东西。我会说这些类型的设备中的很大一部分都以低级语言(例如C)运行。

有趣的事实:Java最初被认为是嵌入式系统编程的一种解决方案:http : //en.wikipedia.org/wiki/Oak_( programming_language )


谢谢,我一定会进一步研究!+1
Josh Leitzel

1

实际上,大多数自助服务亭,收银机,直通式屏幕,甚至高端咖啡机和微波炉都运行Windows XP或Linux,例如“ Jura Impressa”系列机器。您可以SSH进入它们并冲泡咖啡。

这是咖啡机Cron作业的github脚本:https : //github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb

大多数路由器,更新的烤箱,更新的冰箱,汽车,DVD播放器,各种电子产品,更新的家庭自动化产品(包括灯泡)都运行ARM linux或嵌入式Linux版本。

最便宜的设备(不到20美元,如果是较新的设备)则在ESP8266或类似设备上运行(可以运行LUA或精简的Node服务器,批量价格为2美元-非常便宜)

http://nodemcu.com/index_en.html

使用FPGA和诸如805​​1,Z80之类的嵌入式系统或诸如PICC,AVR和Arduino之类的其他嵌入式设备将很快被ESP8266等多合一/ SoC(片上系统)系统取代。它们太容易编程了,并且是运行在自己的Web服务器上的完整的片上系统。您只需打开它们的电源,上传源代码,便有了2美元的联网服务器。

我长大了编码PICC和AVR和8051,我悲伤地看到他们走了,但我还没有碰到比ESP8266es以外的任何多年,因为他们是1/10的价格,是一个数量级,更容易与工作。您可以将它们放在带有电池组和爆炸式引脚布局的开发板上,在ebay上价格为5美元,在adafruit上价格为10美元。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.