您的位置 首页 FPGA

JNI技能如安在嵌入式软件开发中使用?

嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式软

嵌入式体系是以运用为中心、以计算机技能为根底、软件硬件可裁剪、习惯运用体系对功用、可靠性、本钱、体积、功耗严格要求的专用计算机体系。嵌入式软件的根本体系结构包括嵌入式实时操作体系RTOS(RealTime operating Systerrl)、嵌入式设备驱动程序、嵌入式运用程序编程接口(中间件)和嵌入式运用程序。

现阶段,计算机运用的遍及、互联网技能的有用以及纳米微电子技能的打破,正有力推进着21世纪的工业生产、商业活动、科学实验和家庭生活等范畴自动化和信息化进程。全进程自动化产品制作、大范围电子商务活动、高度协同科学实验以及现代化家居生活,为嵌入式产品造就了簇新而巨大的商机。除了交流信息高速公路的交换机、路由器和调制解调器,构建计算机集成制作体系(CIMS)所需的数据传输体系DCS(Data Communication System)和机器人以及规划较大的家用轿车电子体系,最有产值效益和时代特征的嵌入式产品应数因特网上的信息家电(information appliances),如网络可视电话、网络游戏机、电子商务、商务通(PDA)、移动电话以及多媒体产品(如电视机顶盒、DVD播放机、电子阅读机)。

众所周知,“一次编程,处处运用”的Java软件概念本来便是针对网上嵌入式小设备提出的,几经周折,现在SUN公司已推出了J2ME(Java 2 P1atform Micro Edition)针对信息家电的Java版别,其技能日趋老练,开端投入运用。SUN公司Java虚拟机(JVM)技能的有序敞开,使得Java软件真实完成跨渠道运转,即Java运用小程序能够在带有JVM的任何硬软件体系上履行。加上Java言语自身所具有的安全性、可靠性和可移植性等特色,对完成减肥上网的信息家电等网络设备非常有利,一起对嵌入式设备特别是上网设备软件编程技能发生了很大的影响。

1 Java的功能问题及几种处理方案

Java程序也有其自身的缺陷,那便是其功率问题。因为Java是一种介于解说型和编译型之间的言语,其对内存的办理是经过JVM虚拟机来完成的,相同的程序,假如用编译型言语C来完成,其运转速度一般要比Java快得多。因而,进步Java的功能就显得非常重要。

迄今为止,人们为进步Java的运转速度而做出的许多尽力,首要会集在程序规划的办法和形式挑选方面。可是因为算法和规划形式的优化是通用的,对Java 有用的优化算法和规划形式,对其他编译言语也根本适用,因而不能从根本上改动Java程序与编译型言语在履行功率方面的差异。

别的,JIT(Just In Time,及时编译)技能也是一个比较好的思维。它的根本原理是,首要,经过Java编译器把Java源代码编译成与渠道无关的二进制字节码。然后,在 Java程序真实履行之前,体系经过JIT编译器把Java的字节码编译为本地化机器码。最终,体系履行本地化机器码,不必对字节码进行解说。这样做的长处是,大大进步了Java程序的功能,缩短了加载程序的时刻;一起,因为编译的成果并不在程序运转期间保存,因而也节省了存储空间。缺陷是,因为JIT编译器对一切的代码都想优化,因而相同也占用了许多时刻。

动态优化技能即提早编译为机器码的技能(dynamicopttmization,ahead of time technology)是进步Java功能的另一个测验。动态优化技能充分运用了Java源码编译、字节码编译、动态编译和静态编译的技能。其输入是 Java的源码或字节码。而输出是经过高度优化的可履行代码和动态库(WindoW中是.dil文件,UNIX中是同享库.a.so文件)。其长处是能大大进步程序的功能,缺陷是破坏了Java的可移植性,也对Java的安全带来了必定的危险。

2 JNI技能

实际上,有一种一般被忽视的技能能够在很大程度上处理这个难题,那便是JNI(Java Native Interface,Java本地化办法)。图1是JNI技能完成的一般进程。

(1)编写Java类代码

其间,需求JNI完成的办法应当用native要害字声明。在该类中,用System.1oadLibrary()办法加载需求的动态链接库。要害代码如下:

//Compute.java

public class Compute{

public native double comp (double params);

static{

//调用动态链接库

System.loadLibrary(“mathlib”);

}

(2)编译成字节代码

在这个进程中,因为采用了native要害字声明,Java编译器会忽视没有代码体的JNI办法部分。

(3)生成相关JNI办法的头文件

这个进程的完成一般是经过运用jlavah-jni * class生成的,也能够手艺生成该文件;可是因为Java虚拟机是依据必定的命名标准完成对JNI办法的调用,所以手艺编写头文件需求特别当心。

上述文件发生的头文件部分代码如下:

//Compute.h

;

extern“C”{

JNIEXPORT jdoubleJNICALL Java_Compute_comp(JNI-Env *, jobject, jdoubleArray);

;

JNI函数称号分为三部分:首要是Java要害字,供Java虚拟机辨认;然后是调用者类称号(全限制的类名,其间用下划线替代称号分隔符);最终是对应的办法称号,各段称号之间用下划线切割。

JNI函数的参数也由三部分组成:首要是JNIEnv *,是一个指向JNI运转环境的指针;第二个参数随本地办法是静态还对错静态而有所不同逐个非静态本地办法的第二个参数是对目标的引证,而静态本地办法的第二个参数是对其Java类的引证;其他的参数对应一般Java办法的参数,参数类型需求依据必定规矩进行映射。

(4)编写相应办法的完成代码

在编码进程中,需求留意变量的长度问题,例如Java的整型变量长度为32位,而C言语为16位,所以要细心核对变量类型映射表,避免在传值进程中出现问题。

(5)将JNI完成代码编译成动态链接库

编译进程是运用C/C++编译器完成的,当要运用生成的动态链接库时,调用者类中需求显式调用该链接库。

经过上述处理,根本上完成了一个包括本地化办法的Java类的开发。

3 依据JNI的嵌入式手机软件开发实例

下面经过一个实例来描绘运用JNI技能在手机上操作摄像头,捕捉视频并存储图片的进程。

(1)活动/状况图

图2为捕捉视频并存储图片的活动/状况图

依据图2的活动/状况,详细的对应进程如下:

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/147511.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部