日常机器(不像家用电器,数字手表等那样的计算机和移动设备)如何编程?可口可乐自动售货机的编程中使用哪种代码?我的咖啡机如何接受预先设定的时间,然后在几小时后开始冲泡一壶咖啡?
这些机器内部是否装有操作系统,还是更基本的东西?它们是用Assembly,C还是其他某种语言编写的?
而且,我真的很想找到一些列出这些操作系统或基础代码系统的资源,甚至在可能的情况下甚至还带有源代码。如果有人知道这样的资源(搜索对我没有任何帮助),那就太好了。
日常机器(不像家用电器,数字手表等那样的计算机和移动设备)如何编程?可口可乐自动售货机的编程中使用哪种代码?我的咖啡机如何接受预先设定的时间,然后在几小时后开始冲泡一壶咖啡?
这些机器内部是否装有操作系统,还是更基本的东西?它们是用Assembly,C还是其他某种语言编写的?
而且,我真的很想找到一些列出这些操作系统或基础代码系统的资源,甚至在可能的情况下甚至还带有源代码。如果有人知道这样的资源(搜索对我没有任何帮助),那就太好了。
Answers:
您所谈论的大多数都是基于嵌入式的系统,其中C常常是奢侈的。他们没有传统意义上的软件。大多数时候,软件是用C,汇编语言甚至机器代码编写的。C和ASM要求编写编译器以将其用于该平台。机器代码被编写为二进制w / oa编译器。
您的咖啡壶和类似的最简单的系统都没有操作系统。它们只是从内存中的起始地址加载,然后将代码放在此处。通常,这些系统会将其“代码”刻录到EEPROMS中,作为系统的硬盘驱动器。烧掉舞会后,拧紧代码,扔掉筹码,重新烧写芯片上的代码,然后重新开始。高端设备使用了更新的FPGA FPGA来简化测试,部署等工作,但这是一回事。
可口可乐机器,路由器等通常使用实时操作系统,例如QNX,EMBOS,或者如果幸运的话有时使用RTlinux。其中大多数是您需要大量许可的专有OS,但它们具有C编译器,与硬件一起使用的驱动程序等。
http://www.segger.com/cms/embos.html
实时Linux
他们使用微控制器,8051是经典的一种。这些是8位或16位内核,很少有操作系统。程序员编写代码以初始化板载外围设备并实现中断处理程序。使用的语言是汇编语言和C语言。艰巨的调试工作需要在线仿真器。
除此以外,还有很多增长空间,它们具有引导嵌入式版本的Linux和/或Java JVM的32位嵌入式内核(ARM是100磅重的大猩猩)。
这些是嵌入式系统,将使用非常底层的语言(例如C或汇编语言)进行编程。通常,这样的系统将在没有操作系统的情况下运行,尽管诸如蓝光DVD播放器和无线路由器之类的一些较新的“日常机器”的确会在基于unix的操作系统之上运行其代码。
按照其他人的说法,许多现代嵌入式系统也运行着各种窗口。这取决于应用程序。同样,在许多领域中,存在一种趋势,即可以在具有操作系统的更强大的平台上运行,以处理诸如需要运行Java的蓝光播放器之类的情况,以及最终用户需要更多功能的其他情况。
让我们考虑一下台式机中的处理器。它所做的只是运行机器指令,而它本身并不真正关心“操作系统”或“程序”。
您打开计算机,处理器指向第一条指令,然后开始执行。
在您的桌面上,它开始执行“操作系统”。但是没有理由不能让处理器执行您选择的任何指令集。(这可能不是很有用,因为您仍然希望将结果输出到屏幕上,并且该功能驻留在OS中。)同时,如果您的机器指令由正确的操作码组成,以便处理器可以输出正确的信号顺序以在监视器上绘制图片效果更好。无需操作系统。
台式机需要做很多事情,因此我们通常需要对操作系统进行抽象。但从根本上讲,处理器所要做的就是执行指令。
可乐机和咖啡机中的处理器也是如此。它所做的只是执行指令。
好吧,一点一点地编写机器指令是很乏味的。因此,与台式机一样,我们通常使用C语言编写代码,然后将其编译为机器代码。该机器代码被加载到嵌入式处理器上并运行。
嵌入式系统做得很少,因此不需要完整的操作系统。与常规CPU插槽中的几十个引脚相比,微控制器的芯片上可能具有8或16个引脚。
因此,工作流程是编写一些代码(例如,用C语言编写),然后在台式机上进行编译。该编译器为嵌入式芯片生成机器代码。然后,将该代码加载到微处理器上(并且您需要特殊的硬件来执行此操作。)然后,给芯片供电并开始执行指令。简单!
许多执行特定功能的设备不包含任何“代码”。它们通过其电子组件的特性来执行其功能。可以执行许多不同功能或需要轻松升级的更高级的系统将包含微控制器和某种“操作系统”。由于这些功能仍存在某些限制,因此操作系统将非常简单且经过专门设计。变得更加先进,该设备将包含类似于计算机的内容。它将有一个更复杂的操作系统,可以与系统的不同部分进行通信。最后,您将获得诸如智能手机之类的设备,这些设备包含一个完整的操作系统,可以运行用户级代码,并且比简单的设备具有更多的用户输入。然而,即使是现代处理器,本质上也是非常大的电路。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
这是一个非常广泛的问题,它在很大程度上取决于机器。我只能猜测,这些自动售货机中的大多数都是由微控制器控制的(8051,PIC,ARM7,等等),很少有操作系统,如果有的话,那将是某种RTOS,例如FreeRTOS。
诸如DVD / BluRay播放器或移动电话之类的更复杂的机器运行在诸如OMAP4之类的复杂平台之上。通常在它们上运行Unix OS。
日常电器中使用的低端微控制器通常不运行操作系统。选择它们是为了降低成本,而导致成本上升的主要因素是芯片上的引脚数量(从十几个到几百个)以及内部存储器的数量(从几千字节到一个兆字节的ROM,从几个个字节到100 KB RAM)。
当特征蠕变发挥其神奇作用时,确实发生了微波可能需要执行多任务的情况。在这种情况下,程序员可以回顾他们的操作系统课程,并根据需要实现消息传递,任务调度,异步I / O等!
当然,为了方便,简单,代码大小等,功能往往以基本方式完成。通常,这取决于您如何分析程序,以在特定于任务的代码中找到通用的OS功能。但是,从硬编码的任务计划程序到操作系统,这是一条很长的路要走,而当您只有几千字节的数据需要处理时,现成的OS 并不是解决方案。
查看流行的电子零件选择网站DigiKey,以了解低端MCU。这是他们有关非常便宜的带有LCD控制器的MCU的信息,例如在咖啡机中可能会找到的信息。轻松获取编程手册和所有内容。
如果您四处寻找一般信息,请查找“嵌入式系统”,“ soc”(片上系统)之类的东西。我会说这些类型的设备中的很大一部分都以低级语言(例如C)运行。
有趣的事实:Java最初被认为是嵌入式系统编程的一种解决方案:http : //en.wikipedia.org/wiki/Oak_( programming_language )
实际上,大多数自助服务亭,收银机,直通式屏幕,甚至高端咖啡机和微波炉都运行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之类的其他嵌入式设备将很快被ESP8266等多合一/ SoC(片上系统)系统取代。它们太容易编程了,并且是运行在自己的Web服务器上的完整的片上系统。您只需打开它们的电源,上传源代码,便有了2美元的联网服务器。
我长大了编码PICC和AVR和8051,我悲伤地看到他们走了,但我还没有碰到比ESP8266es以外的任何多年,因为他们是1/10的价格,是一个数量级,更容易与工作。您可以将它们放在带有电池组和爆炸式引脚布局的开发板上,在ebay上价格为5美元,在adafruit上价格为10美元。