日常机器是如何编程的?

日常机器(不是电脑和移动设备,而是家用电器、数字手表等)是如何编程的?可口可乐自动售货机的程序里有什么样的代码?我的咖啡机是如何接受一个预先设定好的时间,并在几个小时后开始煮咖啡的呢?

这些类型的机器里面有操作系统吗,还是有更基本的东西?它们是用汇编语言、 C 语言还是其他语言编写的?

而且,我真的很想找到一些资源,列出这些操作系统或底层代码系统,甚至可能与源代码,如果可能的话。如果有人知道这样一个资源(搜索没有给我带来任何结果) ,那就太好了。

14067 次浏览

这些都是 嵌入式系统,并将使用一个非常低级的语言,如 C 或汇编编程。一般来说,这样的系统将在没有操作系统的情况下运行,尽管一些较新的“日常机器”,如蓝光 DVD 播放器和无线路由器确实在基于 unix 的操作系统上运行它们的代码。


更新

与其他人所说的一样,许多现代嵌入式系统也运行一种窗口。这取决于应用程序。此外,在许多领域都有一种趋势,即运行在更强大的操作系统平台上,以处理诸如需要运行 Java 的 Blue-ray 播放器等情况,以及终端用户希望获得更多功能的其他实例。

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

除此之外还有很大的发展空间,32位嵌入式内核(ARM 是100磅重的大猩猩)可以启动嵌入式版本的 Linux 和/或 Java JVM。

如果你在谷歌上搜索一般信息,看看像“嵌入式系统”,“ soc”(系统单晶片)这样的东西。我认为这些类型的设备大部分都运行在低级语言中,比如 C。

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

这是一个非常宽泛的问题,它在很大程度上取决于机器。我只能猜测,这些自动售货机的大多数是由微控制器(8051,PIC,ARM7,以名称的一些最常用的)和很少有一个操作系统,如果有任何,它将是某种实时操作系统,如 FreeRTOS

更复杂的机器,如 DVD/BluRay 播放器或移动电话运行在 OMAP4等复杂平台之上。通常 Unix 操作系统都是在它们上面运行的。

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

嵌入式系统通常用 C 语言编程,有时也用汇编语言进行极端的定时或内存优化。一些嵌入式编译器允许您在更高级别的语言中散布汇编。

你所说的大部分都是嵌入式系统,其中 C 是一种奢侈品,可能是不可用的。这种软件通常不像你在台式机或手机上使用的那种在操作系统下运行的独立程序,特别是如果设计者选择使用的芯片被描述为“微控制器”的话。

大多数情况下,软件是用 C 或汇编语言编写的。C 语言需要为该平台编写一个编译器(如果不能很好地优化,可能会产生臃肿或低效的代码) ,但是一个简单的汇编器只需要一次将文本转换为一行机器代码,并且容易编写。(如果供应商希望任何人购买他们的微控制器,他们会确保至少有一个汇编程序存在,以使开发具有吸引力,通常也是一个 C 编译器,尽管有时没有优化。)

你的咖啡壶和大多数像那样的简单系统都没有操作系统。它们只是从内存中的起始地址加载,然后将代码放在那里。通常,这些系统将它们的“代码”刻录到作为系统硬盘驱动器的 EEPROMS 中。或者根据 EEPROM/flash 的类型,代码可以直接从 flash 运行,而不必首先加载到 RAM 中。(设备可能无法写入自己的闪存; 这是通过外部工具完成的。编辑/编译/运行周期可能包括对实际硬件的 flash 进行重新编程,如果不是在模拟器中进行测试的话。)

可口可乐机器,路由器等通常使用实时操作系统,如 QNX,EMBOS,或有时 RTlinux,如果你幸运的话。其中大部分都是你花了很多钱才获得许可的专有操作系统,但是它们都有 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

许多执行特定功能的设备不包含任何“代码”。它们通过其电子元件的特性来履行其功能。更先进的系统,可以执行许多不同的功能或需要易于升级,将包含一个微控制器和某种“操作系统”。由于它们的功能仍然有一些限制,因此操作系统将是简单和专门设计的。更先进的是,该设备将包含类似于计算机的东西。它将有一个更复杂的操作系统,可以与系统的不同部分进行通信。最后,您可以访问智能手机等设备,它们包含一个完整的操作系统,可以运行用户级代码,并且比较简单的设备具有更多的用户输入。然而,即使是现代处理器本质上也是非常大的电路。中央处理器识别的每条指令都会导致使用不同的电路来执行该功能。

下面是一些你可能感兴趣的维基百科网页:

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

让我们考虑一下桌面中的处理器。它所做的只是运行机器指令,并且它自己并不真正关心“操作系统”或“程序”。

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

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

台式机做了很多 东西,所以我们通常需要对操作系统进行抽象。但在它的核心,所有的处理器做的是执行指令。

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

一点一点地编写机器指令是很乏味的。因此,就像桌面一样,我们通常用 C 编写代码,然后将 C 编译成机器代码。该机器代码被加载到嵌入式处理器上并运行。

嵌入式系统做 太少了,他们不需要完整的操作系统。一个微控制器可能有8个或16个引脚的芯片-相比之下,在您的常规 CPU 插座引脚的分数。

所以工作流程就是编写一些代码(比如说,用 C 语言) ,然后在你的桌面机器上编译它。该编译器为嵌入式芯片生成机器代码。然后,这些代码被加载到微处理器上(需要特殊的硬件来完成这项工作)然后你启动芯片,它开始执行指令。很简单!

日常电器中的低端微控制器通常不运行操作系统。他们选择低成本,主要因素驱动的成本是芯片上的引脚数量(从12到几百)和内存量(从几千字节到一兆字节 ROM,从几个字节到100千字节 RAM)。

随着特征蠕变的发挥它的魔力,确实发生了微波炉可能需要多任务。在这种情况下,程序员会回忆他们的操作系统过程,并根据需要实现消息传递、任务调度、异步 I/O 等等!

当然,为了方便、简单、代码大小等等,特性往往是以基本的方式完成的。这通常取决于您如何分析程序,以便在特定于任务的代码中找到通用的 OS 功能。但是从硬编码的任务调度器到操作系统还有很长的路要走,当您只有几千字节可以使用时,现成的操作系统就是 没有解决方案。

看看 DigiKey,一个流行的电子零件选择网站,了解低端 MCU。给你是他们的信息在一个非常便宜的单片机与液晶显示器控制器,如可能发现在咖啡机。拿到编程手册和其他东西很容易。

最近我偶然发现了一台运行 Ubuntu 的自动售烟机(机器正在重启,所以我可以看到它的标志)。

我听一个工程师说,西门子轻轨通勤列车运行在386。

大多数售货亭、注册机、免下车餐厅的显示屏,甚至高端咖啡机和微波炉实际上都运行 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 和嵌入式系统,如8051,Z80或其他嵌入式设备,如 PICC,AVR 和 Arduino 将很快取代所有在一体化/SoC (系统芯片)系统,如 ESP8266。它们只是太容易编程,是一个完整的系统,在芯片上运行自己的网络服务器; 你只需启动它们,上传你的源代码,你就有了一个网络服务器,只需2美元。

我从小编写 PICC、 AVR 和8051,看到它们消失我很难过,但是我已经很多年没有碰过除了 ESP8266之外的任何东西了,因为它们的价格只有 ESP8266的十分之一,而且使用起来更加方便数量级。你可以在易趣上花5美元或者在 adafruit 上花10美元就可以买到带电池组和爆炸引脚布局的开发板。