如何编程日常机器?

Jos*_*zel 145 c embedded microcontroller assembly operating-system

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

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

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

chu*_*ubs 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的

  • 人们用二进制编码?汇编程序编写起来非常简单,我觉得很难相信.你有这个来源吗?此外,这个答案给人的错觉是所有系统都包含一个运行代码的微处理器.虽然随着微控制器和EEPROM(使调试和升级变得更容易)变得更加便宜,这变得越来越流行,但对于非常便宜的系统或过去20年来没有太大变化的系统来说,它仍然不值得.例如,一些数字手表. (35认同)
  • 一台运行QNX的焦炭机?WTF - 那是另一种可乐!是的,目前正在批量发售的每个平台都有一个C编译器.没有人想写集会,缺乏C将是一个巨大的障碍.(有些编译器不是很好*,被授予.) (12认同)
  • 此外,根据定义,EEPROM可以重写100000次以上.一次写入的记忆已经过时; 今天所有流行的微控制器都有Flash.FPGA是一个与低端MCU完全不同的市场......你不知道你在谈论什么. (8认同)
  • 我有一个朋友在自动售货机上工作很复杂.他们拥有移动无线电,监控库存,跟踪温度,报告财务数据,并将HTTP呼叫发送回服务器以汇总所有这些数据,以便您可以跟踪所有机器.是的,这些品牌的机器正在使用嵌入式操作系统.我认为他们正在使用C语言使用RTLinux.所以即使是低价自动售货机也变得非常复杂,足以保证嵌入式操作系统. (7认同)
  • 这个说得太强烈了.您无需在目标上托管编译器.交叉编译器在嵌入式编程中非常常见. (6认同)

Han*_*ant 29

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

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

  • 这是一个相当小的大猩猩,但我认为力量限制对于嵌入的大猩猩来说非常重要;) (5认同)

Jus*_*ier 24

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


更新

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

  • 也许,但是实际的玩家运行Linux并且是用C/C++编写的 (6认同)

pou*_*def 18

让我们考虑桌面上的处理器.它所做的就是运行机器指令,并且它本身并不关心"操作系统"或"程序".

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

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

桌面做了这么多东西,我们一般需要一个操作系统的抽象.但在其核心,所有处理器都执行指令.

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

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

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

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

  • 非常感谢!如果我能选择另一个最好的答案,那就是你的.我发现它非常有用.+1 (2认同)

ugh*_*fhw 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


Thi*_*oso 7

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

更复杂的机器,如DVD /蓝光播放器或手机,运行在软件平台之上,如OMAP4.通常在它们上运行Unix OS.


Pot*_*ter 7

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

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

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

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


Nic*_*rge 5

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

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