什么语言能直接控制硬件? C/C++吗?本人做java的。如果要做一个让计算机接受外部传感器(比如摄像机 ,

重力感应器,红外线,温度,湿度等等设备)的数据,根据数据业务逻辑来判断当前计算机该控制哪些硬件来做出相应的指令动作。比如:老奶奶倒在马路上,机器通过外部设备扫描发现前方有一个人,通过外部其他传感器发现此人生理状况(比如心脏跳动是否正常,身体是否受伤,是否昏迷等),来判断是否需要去救助或者直接定位事发地点通知医护人员来救助。如果判断老人只是摔倒的话,那么计算机做出直接救助的指令,控制硬件做出反应移动至老人的位置,并控制其他硬件(比如机器手等)帮助老人站起来。

这一系列指令需要哪些技术的支撑?底层一般由C/C++编写的驱动来控制硬件码?还是需要一套完整的底层框架技术,然后由应用层来实现具体的逻辑任务? 就像android一样底层由C/C++来编写,应用层由java或者其他语言来实现?

假如机器离目标有20米的距离,计算机怎么控制 移动硬件(比如轮子或者机械腿) 设备移动<20米?如果移动硬件是轮子(轮子的周长计算机已知)的话怎么控制无刷电机转多少圈? 如果是机械腿的话怎么控制步进电机转多少圈?(其中夹杂一些物理计算知识本人不太懂)。只求这一系列动作指令的软件架构详解!!求大神解惑,不懂编码的小白退散。。。。

是否能够直接访问硬件接口,关键是语言对应的实现和体系结构,而不是语言本身。
现在硬件提供的高级语言接口以及宿主操作系统(若有的话)基本都是基于C/C++的,而Java的实现一般需要背着一个庞大的运行时环境。如果能用Java实现操作系统或者相关接口,再让硬件厂商支持,那么至少理论上是可能的。当然,现实是不合算。
归结到语言的原因主要有两点:
1.抽象、实现的复杂性和性能问题。Java在这方面的抽象能力实在太弱了点——比如没有指针算术,没有内建显式内存分配和释放,没有能力直接映射确定地址空间的内存,不能直接支持处理机的调用约定等,会导致使用起来的不便。运行时的实现原理和复杂性制约性能的发挥。而C++其实也需要一些运行时来支持异常和RTTI,虽然禁用这些特性,把C++当C用,可以不太受影响。
2.习惯和旧的项目。因为传统,硬件厂商的接口主要是C/汇编,再次才是C++。(这也能说明为什么即便C++能当作C来用,C在这个领域明显更主流。)
ISO C/C++允许没有操作系统支持的独立实现(freestanding implementation)。在这类环境中,硬件提供的接口可以包装为设备的控制寄存器、I/O寄存器等专用存储的状态,映射至volatile限定类型的对象中,使用volatile指针访问(诸如(volatile unsigned int*)0x12345678)。通过读写这些对象,被操作的设备就可以和主存或特定设备内存硬件共享存储的内容或发送/接受控制信息。之后这些保持的这些状态由设备中的控制芯片等按需进行一系列处理(如编解码、计算电机转速之类),最终转换为特定的电平信号,用于控制各种设备中各个部件的行为:接通或关闭电源、接受传感器信号、打开无线电、驱动伺服电路等。
在有操作系统支持的宿主实现(hosted implementation)中,操作系统一般会提供硬件抽象层(HAL)来对上述接口进行若干公共的抽象和封装,并在此基础上提供自身的API供厂商编写驱动程序。这样的好处很明显,能复用某些设备控制程序的底层实现(例如做成动态库)以便于分发和维护,并能一定程度上保证驱动程序之间以及和操作系统其它部分相互隔离(这样驱动程序bug时系统宕机危险比独立实现的可能小一点,当然因为往往特权等级过高还是比一般程序危险)。具体的接口视具体的系统而定,如POSIX系统的ioctl系统调用、Windows DDK提供的NT内核驱动和WDM驱动API等。
一般来说,上面硬件部分、某些最底层的接口和专用的驱动程序是硬件厂商自己做的,HAL、驱动开发框架和某些通用的设备驱动程序是操作系统厂商提供的,这些基本上用的都是C/C++。剩下的逻辑则全部是上层的应用开发者实现的,只要能调用到底层提供的API,不限于C/C++,Java或者C#什么的都没问题。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-03
C++ C 都可以 似乎大家都这样说的 不过是是菜鸟 刚开始学c++ 目的和你一样
第2个回答  2013-04-03
一般用串口通信对外设硬件进行控制本回答被提问者采纳
第3个回答  2013-04-03
这个在网上可以看得到啊!

什么语言能直接控制硬件? C\/C++吗?本人做java的。如果要做一个让计 ...
是否能够直接访问硬件接口,关键是语言对应的实现和体系结构,而不是语言本身。现在硬件提供的高级语言接口以及宿主操作系统(若有的话)基本都是基于C\/C++的,而Java的实现一般需要背着一个庞大的运行时环境。如果能用Java实现操作系统或者相关接口,再让硬件厂商支持,那么至少理论上是可能的。当然,现实是...

汇编语言编程几乎不能移植,而C\/C++等就容易移植 有点搞不明白?
汇编语言,和机器语言一样,是直接控制硬件的。每种CPU,都有自己的机器语言,所以汇编不能移植。C语言,并不直接控制硬件。在不同的机器上,有相应的编译软件,可以把C,编译成自己系统的机器语言。容易移植的关键:C语言是不直接控制硬件的。

java为什么不能直接控制硬件?问题有点深,高手进。
java是不能直接控制硬件,java帮助开发者隐藏了硬件,软件的不同导致的兼容性问题,这也导致了开发者无法直接操作硬件。意思就是java寄生在操作系统上,做了一个虚拟机,所有装了java runtime的jvm都是一样的。这个jvm提供的API都是一样,硬件的不同不能在代码上产生改变,所以就是不能直接访问硬件咯。

Basic,C,C++,Java语言不同的优势与缺点?
例如:允许直接访问内存地址,进行各种位运算,能通过中断调用直接控制各种硬件设备等等。上述这些属于机器语言特征,因此C既有高级语言特征又具有机器语 言特征。7.C编译系统生成的目标代码质量高,程序执行效率高。8.程序可移植性强。9.语言的通用性较强。C++包含了整个C,因此也继承了C的全部特征和优...

java、 C\/ C++、 PHP、 Python这些语言有什么区别和联系?
C\/C++理论上说可以做任何开发,只要有合适的硬件驱动和API,特点是效率高,基本上是编译语言里面效率最高的。除非你的系统中连C\/C++编译器都不具备。某些系统当中C++编译器是不具备的,但是C一般都具备。目前而言,C语言主要用来开发底层模块(比如驱动,解码器,算法实现),服务应用(比如web服务器)和...

c语言相关的几个问题
3.c是面向过程的,c++是面向对象的。 回答者: znzhang - 门吏 三级 2009-5-9 21:501.没有。不会。除非人们不再用计算机编程。只要还在用计算机,就会有人用C语言编程的,虽然现在大部分人认为面向对象的JAVA或者其它的比C语言容易上手的,可是如果你学过了C语言,再去学其它的软件,就会发现有了C语言的基础,...

编程语言的种类(常见的编程语言)
面向对象:Python,Java,C++等 面向过程:C,Pascal,basic编程分哪几种? 编程有几种类型? 编程语言的种类繁多,总的来说分为机器语言、汇编语言以及高级语言三大类。 机械语言(machinelanguage):计算机可直接识别、运行的二进制代码,执行速度快,资源占用少,但可读性不强,编程复杂; 汇编语言(assemblylanguage):一种用于电...

游戏编程用什么语言
包括图形引擎,音频引擎,碰撞引擎,艺术资源管理,脚本引擎等等。基础语言C\/C++,这个是必选项那要提高些效率是不是还得会点汇编语言。一些东西需要重复性的工作来做,我们是不是应该会点脚本语言?至少不用重复的去干某一件事情。基础的讲完了,高大上的东西是不是也得搞搞,不是搞搞是要精通。Direc...

我学过C,C++(为了学别的语言),C#,JAVA到底哪个好?
我认为是C#好。有以下几点:C#语言自C\/C++演变而来。但是,它现代、简单、完全面向对象和类型安全。如果您是C\/C++程序员,学习曲线将会很平坦。许多C#语句直接借用您所喜爱的语言,包括表达式和操作符。假如不仔细看,简直会把它当成C++。关于C#最重要的一点:它是现代的编程语言。它简化和现代化了C++...

计算机语言的分类及之间的联系与区别
这种语言的程序执行时效率高,可以脱离开发环境独立运行,但如果要移植必须修改源程序,或者针对不同的平台采用不同的编译器进行重新编译。现在的多是高级语言,如c,c++,Pascal,LISP等都是编译型的。2.解释型是指用专门的解释器将某种高级语言源程序逐条解释成特定平台的机器码指令并立即执行,解释一句...

相似回答