如何编程日常机器?

时间:2011-04-11 02:32:02

标签: c operating-system microcontroller embedded assembly

日常机器(不是电脑,手表等电脑和移动设备)是如何编程的?什么样的代码可用于可口可乐自动售货机的编程?我的咖啡机如何接受预先设定的时间,并在几小时后开始冲泡一壶咖啡?

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

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

13 个答案:

答案 0 :(得分:46)

您所谈论的大部分内容都是基于嵌入式的系统,其中C是一种奢侈品,往往是不可用的。他们没有传统意义上的软件。大多数情况下,软件是用C语言,汇编语言甚至机器码编写的。 C和ASM要求编写编译器以将其用于该平台。机器代码以编译器的二进制形式编写。

您的咖啡壶和大多数简单系统都没有操作系统。它们只是从内存中的起始地址加载,然后将代码放在那里。这些系统通常将其“代码”刻录到EEPROM中,充当系统的硬盘驱动器。烧掉舞会后拧紧代码,抛弃芯片重新启动芯片上的代码,然后重新开始。高端设备使用更新的芯片FPGA来进行测试,部署等更容易,但它们是相同的。

可口可乐机器,路由器等通常使用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的

答案 1 :(得分:29)

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

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

答案 2 :(得分:24)

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

<小时/> 更新

与其他人所说的一样,许多现代嵌入式系统也运行着各种各样的窗户。这取决于应用程序。此外,在一个功能更强大的操作系统平台上运行许多空间的趋势,以处理需要运行Java的蓝光播放器等案例,以及最终用户需要更多功能的其他实例。

答案 3 :(得分:18)

让我们考虑桌面上的处理器。它只是运行机器指令,并且本身并不关心“操作系统”或“程序”。

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

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

桌面做了很多东西,我们通常需要抽象操作系统。但在其核心,所有处理器都执行指令。

可口可乐机器和咖啡机中的处理器相同。它只是执行指令。

嗯,逐位编写机器指令很繁琐。因此,就像桌面一样,我们通常用C编写代码,然后编译成机器代码。该机器代码被加载到嵌入式处理器上并运行。

嵌入式系统 这么少,他们不需要全面的操作系统。微控制器可能在芯片上有8个或16个引脚 - 与常规CPU插槽中的几十个引脚相比。

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

答案 4 :(得分:12)

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

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

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

答案 5 :(得分:7)

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

更复杂的机器,如DVD / BluRay播放器或手机,运行在软化平台之上,例如OMAP4。通常在它们上运行Unix OS。

答案 6 :(得分:7)

日常设备中的低端微控制器通常不运行操作系统。选择它们是为了降低成本,推动成本的主要因素是芯片上的引脚数量(从十几个到几百个)和内部存储量(从几千字节到一兆字节ROM,从少数几个字节到100千字节RAM。。

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

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

看一下流行的电子零件选择网站DigiKey,了解低端MCU。 Here是他们在一台非常便宜的带有LCD控制器的MCU上的信息,例如可能在咖啡机中找到的。获得编程手册和一切都很容易。

答案 7 :(得分:5)

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

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

答案 8 :(得分:4)

我最近遇到了一台运行Ubuntu的卷烟自动售货机(机器正在重启,所以我可以看到徽标)。

答案 9 :(得分:2)

答案 10 :(得分:1)

如果您正在搜索一般信息,请查找“嵌入式系统”,“soc”(片上系统)等内容。我要说这些类型的设备中有很大一部分是用低级语言运行的,比如C。

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

答案 11 :(得分: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或减少节点服务器2美元 - 非常便宜)

http://nodemcu.com/index_en.html

使用FPGA和嵌入式系统,如8051,Z80或其他嵌入式设备,如PICC,AVR和Arduino,很快将被ESP8266等一体化/ SoC(片上系统)系统所取代。它们太容易编程,并且是运行自己的Web服务器的完整系统芯片;你只需启动它们,上传你的源代码就可以获得2美元的网络服务器。

我长大了编码PICC和AVR和8051,我悲伤地看到他们走了,但我还没有碰到比ESP8266es以外的任何多年,因为他们是1/10的价格是更加的简单命令跟...共事。您可以在开发板上使用电池组和爆炸针布局,在ebay上花5美元或在adafruit上花10美元。

答案 12 :(得分:-2)

我从工程师那里听说西门子轻轨通勤列车在386s运行。