大家好,今天小编关注到一个比较有意思的话题,就是关于java语言硬件控制的问题,于是小编就整理了4个相关介绍Java语言硬件控制的解答,让我们一起看看吧。
为什么不能直接操作硬件?
j***a是:源代码-->字节码-->JVM-->操作系统->硬件(你少了一个)j***a是不能直接控制硬件,j***a帮助开发者隐藏了硬件,软件的不同导致的兼容性问题,这也导致了开发者无法直接操作硬件。意思就是j***a寄生在操作系统上,做了一个虚拟机,所有装了j***a runtime的jvm都是一样的。这个jvm提供的API都是一样,硬件的不同不能在代码上产生改变,所以就是不能直接访问硬件咯。
安卓系统为什么要用j***a语言写?可以用C语言写程序吗?
这就要看安卓的系统体系结构了,安卓系统内核是基于Linux kernel上,中间层是多以J***a 实现,并且***用特殊的Dalvik 虚拟机,Dalvik虚拟机是一种“暂存器型态”的J***a虚拟机。所以应用程序是j***a语言编写的。任何语言都有优缺点,j***a适合网络编程和应用层程序编写,C语言适合底层硬件控制。
C语言是如何控制硬件的?
C语言的应用编程在单片机的领域占了很大一部分,使用的比较多的51单片机和STM32单片机都可以使用MDK软件编写固件。
单片机烧写了固件后可以点亮LED灯,可以驱动ADC检测电压,也可以驱动蜂鸣器发声,这就是简单地控制硬件。稍微复杂一点的,可以驱动NRF2401进行无线的连接,也可以使用ESP8266这类wifi芯片连接网络。
接下来,简单地讲讲如何使用C语言控制硬件。
简单的模块可以直接使用高低电平来控制,比如红外线发射模块,当你在驱动引脚上的电压达到3.3v,就能发出红外线;然后将电平设置为0v,红外线发射就停止了。
一般而言,单片机的引脚输出电压能够达到3.3v,也是可以点亮红外线LED,但是可能会导致电流不稳定的问题,所以一般会使用一个三极管接在引脚和LED之间放大电流的驱动能力。
从原理来说,通过加在LED上的电平不停的变化,并且严格按照一定的时间设置为高电平,然后变更为低电平,如此的反复循环,那就能够发出一段红外线控制码。只要手速够快,时间够精准完全能够控制家里的电视机、空调。
上面说到纯手工控制模块遥控电视机、空调,但是实际上谁有这样的手速呢,即便有这样的手速那开关也受不了这样的操作频率。
第一步,首先通过一个硬件载体,比如单片机或者CPU芯片
第二步,编写C语言代码
第四步,准备一个下载器,比如JT***
第五步,将编译好的2进制代码通过下载器下载到硬件载体中。
第六步,C语言程序就可以控制硬件了
C语言只是一种逻辑程序,其中的语法只是为了方便人们去如何设计,因为C语言的用途有很多,也可以用来开发软件,这就跟硬件的关系没那么大了。
所谓的控制其实是间接控制。C语言逻辑程序代码片段通过软件编译器编译成硬件能够识别的0和1的逻辑片段。
无论硬件系统有多么复杂,硬件能够识别的也只有0和1。而芯片就是由很多的门电路所组成,而最基本的门电路控制就是通过置0或者置1控制。
想要了解更详细的知识点,可以找一些最基础的数字电路书籍看一下。
c语言要先转成机器语言,就是一串01组成的代码,然后烧录到芯片中,芯片通电后会自动读取这窜0101的代码,物理表现对应的就是一串高低频信号,通过高低电信号驱动芯片中的开关控制硬件,比如读到0就点亮灯,读到1就关闭灯。
如果有配套的编译器,J***A语言可不可以编写单片机程序呢?
是的,如果你能做出像gcj那样的编译器,绝对可以!但是可能会限制一些动态特性,比如动态加载类,比如反射,比如包的扫描。。。所以需要虚拟机[_a***_]时支持的特性都不能用!
回答里多是不怎么懂j***a的前端小程序员,对j***a理解太狭隘,J***a最初的设计就是用于嵌入式的(当J***a还叫Oak的时候,它是用于超前于时代很多的*7(Star-7)PDA项目),J***a SE Embedded、J***a ME(其中例如Blu-ray Disc J***a(BD-J))、J***aCard、Sun SPOT是几种不同层面的嵌入式J***a开发技术。有兴趣的可以去了解。
实际上嵌入式系统用j***a写软件很广泛和常见的,会把jvm一起刷到固件运行,比如身边的安卓电视,机顶盒还有车载的大屏影音***设备(常见的MTK+Android方案)都是典型的Android+J***a的应用。
此外商场饭店用于扫码的POS机,甚至有时你看到商场内展示和楼层信息的显示屏幕,这些也属于使用嵌入式Linux+Android+J***a的应用。
嵌入式Linux+Android系统+J***a软件的应用在影音***方向目前可以说成为主流。实现影音图像类应用
通常单片机用J***a的不多,一般用C或C++。但也有的单片机可以用J***a,这样的单片机需要集成JVM,如freeRTS就可以使用J***a。现在arm核的单片机在大量应用,ARM不仅可以支持J***a,还可以运行多种操作系统。
而J***a起源,就是用于电视机、电话、闹钟、烤面包机等家用电器的控制和通信。可是它诞生的太早了,后来在发展中改变了自身的主要应用方向。
事实上,目前的J***a语言没有办法运行在单片机上。J***a语言不是一种编译型语言,是一种字节码解释型语言。J***a代码的运行除了需要一个J***a虚拟机,还需要一大堆相关的基本库。以arm处理器为例,arm 32位版本的J***a虚拟机运行时占用内存空间为190M字节,基本库和你的代码运行空间还不包括在内。如果一个处理器被称为单片机,内存一般以KB计算,有些高级单片机有1M或2M内存已经不得了了。这里内存容量是指RAM,不是闪存。这个评估还是把单片机字长,操作系统,指令系统给忽略的情况下做出的。说到J***a的本质,就是运行在哪里,就要把编译器安装到哪里的累赘语言。此外,由于J***a使用了动态内存自动回收机制,使得这种语言不可能应用于***紧缺型处理器。
J***a最初设计的初衷是通过网络来控制微波炉等单片机设备做演示,所以当初设计成跨平台,并发展出了j2se、j2me、applet以及后面的j2ee,j2me就是移动端的方案,也就是为单片机准备的,现在官方网站应该还有单片机版本的虚拟机环境下载,J***a发展的今天表面看只有j2se和j2ee,其实Android系统就是J***a的单片机方案,google把sun公司的J***a班底挖过去重构的,但是Google给他换了个名,在官方场合是不承认这是J***a扩展的!
到此,以上就是小编对于j***a语言硬件控制的问题就介绍到这了,希望介绍关于j***a语言硬件控制的4点解答对大家有用。