
1JAVA作为一种编程语言:源代码可移植性
作为一种编程语言,JAVA提供了一种最简单同时也是人们最熟悉的可移植性–源代码移植。这意味着任意一个JAVA程序,不论它运行在何种CPU、 *** 作系统或JAVA编译器上,都将产生同样的结果。这并不是一个新的概念。人们使用C、C++也可以产生同样的效果。但是使用C或C++编程人们可以有太多的选择,在许多细节上它都没有严格定义,如:未初始化变量的值、对已释放的内存的存取、浮点运算的尾数值等等。所以除非你一开始就严格按照系统无关的概念来进行设计,否则这种可移植性只能是一种理论上的设想而不能形成实践。总之,尽管C和C++有严密的语法定义,它们的语意(symantics)定义还不是标准的。这种语意上的不统一使得同一段程序在不同的系统环境下会产生不同的结果。有时即使系统情况完全相同而仅仅由于编译器的设置不同也会产生令人意想不到的结果。而JAVA就不同了。它定义了严密的语意结构,而使编译器不承担这方面的工作。另外,JAVA对程序的行为的定义也比C和C++严格,如:它提供了内存自动回收功能(GarbageCollection),使程序不能访问越界内存;它对未初始化的变量提供确定值等等。它的这些特性能够减小在不同平台上运行的JAVA程序之间的差异,也使得JAVA具有即使没有JAVA虚拟机的存在的情况下比C和C++更好的平台无关性。然而,这些特点也有它不利的一面。JAVA设想运行于具有32位字节长度且每字节为8位的计算机上,这就使得那些8位字长的计算机和一些巨型机不能有效的运行JAVA程序。在这样的平台上就只能运行那些可移植的C和C++程序了。
2JAVA作为一个虚拟机:CPU可移植性
大多数编译器产生的目标代码只能运行在一种CPU上(如Intel的x86系列),即使那些能支持多种CPU的编译器也不能同时产生适合多种CPU的目标代码。如果你需要在三种CPU(如x86、SPARC和MIPS)上运行同一程序,就必须编译三次。
但JAVA编译器就不同了。JAVA编译器产生的目标代码(J-Code)是针对一种并不存在的CPU–JAVA虚拟机(JAVAVirtualMachine),而不是某一实际的CPU。JAVA虚拟机能掩盖不同CPU之间的差别,使J-Code能运行于任何具有JAVA虚拟机的机器上。
虚拟机的概念并不是JAVA所特有的:加州大学几年前就提出了PASCAL虚拟机的概念;广泛用于Unix服务器的Perl脚本也是产生与机器无关的中间代码用于执行。但针对Internet应用而设计的JAVA虚拟机的特别之处在于它能产生安全的不受病毒威胁的目标代码。正是由于Internet对安全特性的特别要求才使得JVM能够迅速被人们接受。当今主流的 *** 作系统如OS/2、MacOS、Windows95/NT都已经或很快提供对J-Code的支持。
作为一种虚拟的CPU,JAVA虚拟机对于源代码(SourceCode)来说是独立的。我们不仅可以用JAVA语言来生成J-Code,也可以用Ada95来生成。事实上,已经有了针对若干种源代码的J-Code编译器,包括Basic、Lisp和Forth。源代码一经转换成J-Code以后,JAVA虚拟机就能够执行而不区分它是由哪种源代码生成的。这样做的结果就是CPU可移植性。
将源程序编译为J-Code的好处在于可运行于各种机器上,而缺点是它不如本机代码运行的速度快。
3JAVA作为一种虚拟的 *** 作系统(OS)和图形用户界面(GUI): *** 作系统可移植性
即使经过重新编译,大多数的用C和C++编写的Windows程序也不能在Unix或Macintosh系统上运行。这是为什么呢因为程序员在编写Windows程序时使用了大量的WindowsAPI和中断调用,而Windows程序对系统功能的调用与Unix和Macintosh程序有很大的差别,所以除非将全套WindowsAPI移植到其它 *** 作系统上,否则重编译的程序仍不能运行。
JAVA采用了提供一套与平台无关的库函数(包括AWT、UTIL、LANG等等)的方法来解决这个问题。就象JVM提供了一个虚拟的CPU一样,JAVA库函数提供了一个虚拟的GUI环境。JAVA程序仅对JAVA库函数提出调用,而库函数对 *** 作系统功能的调用由各不同的虚拟机来完成。JAVA也在它的OS/GUI库中使用了一种“罕见名称符”(least-commom-denominator)来提供对某种特定 *** 作系统的功能调用,即此功能只在特定环境下生效而在其它 *** 作系统下则被忽略。这样做的好处在于可以针对某 *** 作系统生成拥有人们熟悉的界面的应用程序而同时此程序又能在其它系统下运行。缺点则是系统中的某些功能调用有很强的依赖性因而在JAVA的虚拟OS/API中难以实现。遇到这种情况,程序员就只能写不可移植的程序了。
总之,JAVA在可移植性方面的特点使它在Internet上具有广泛的应用前景。同时它本身具有的防病毒的能力也使它在需要高可靠性的应用中占有一席之地。
一般vb》文件》生成exe文件这种方法生成的软件都是只能在安装了vb的计算机上使用,如果想移到另一台机器,需要用
这个把生成的exe文件打包。这样其他机器就能安装了,不过据不完全测试,我的机器是win7的,我打包的软件只能在其他win7平台上安装,xp的就安装不了,win8的没测试过。
可移植性是指一个软件中的资料能否正常地导入或导出到其他软件的功能。比如像联系人列表、接收或发送过的邮件,这些资料内容十分庞大,而且非常重要,无论是我们重装系统还是升级原有软件,可移植性好的软件都因为减少了大量重复性录入而更容易得到用户的青睐。
方法一:使用程序安装监控软件监视程序在旧系统的安装过程,然后根据注册表和文件记录将程序移植到新系统,有些配置需根据新系统的不同作相应修改(要求较高)。
方法二:安装虚拟系统,比如vmware之类
方法/步骤
嵌入式 *** 作系统有分时 *** 作系统和实时 *** 作系统,如果 *** 作系统能够使计算机系统及时响应外部事件请求,并能控制所有实时设备和实时任务协调运行,且能在一个规定的时间内完成对事件的处理,怎么这种系统称为实时 *** 作系统。
如果系统必须在极其严格的时间内完成的任务叫做硬件的实时 *** 作系统,如果不是很严格的话就是软件的实时 *** 作系统。
前往官网下载最新版的FreeRTOS系统,然后解压缩到本地。有两个文件夹,FreeRTOS文件夹里面是 *** 作系统内核,FreeRTOS-Plus里面是一些中间件如文件系统,网络协议栈等。
值得一提的是,FreeRTOS的教学用书和API参考手册电子版均已免费提供,建议在现在安装FreeRTOS的同时也一并下载到本地,以供后期学习查阅。
FreeRTOS的主要特点如下:
1 支持抢占式调度,合作式调度和时间片调度
2 具有低功耗模式,称为tickless模式
3 FreeRTOS-MPU支持M3/M4/M7内核的MPU(内存保护单元)
4 典型的内核使用大小在4k~9k
5 支持消息队列、二值信号量、计数信号量、递归信号量和互斥信号量,可用于任务与任务之间的消息传递和同步,任务与终端间的消息传递和同步
6 任务数量不限,任务优先级数量不限
7 高效的软件定时器,不需要损耗额外的CPU时间,除非需要执行定时器任务
8 任务间直接的消息传递,速度较快
9 FreeRTOS的队列是其它通信和同步机制的基础
移植FreeRTOS之前,原有的工程(比如跑马灯,越简单越好)中不能有SysTick、PendSV和SVC三个系统中断的使用,因为FreeRTOS系统要使用这三个中断。
1 准备好简单工程的模板
2 在工程模板中创建FreeRTOS文件夹,并将解压后源码FreeRTOS文件夹中Source目录下的所有内容复制进来
3 在user目录下需要手动窗件FreeRTOSConfigh的配置文件,也可以从官方demo中拿来修改后使用,比如从下载的源码目录下的FreeRTOS/Demo/CORTEX_M4F_STM32F407ZG-SK中进行拷贝
4 将源码文件添加到MDK的工程目录中,其中heap_4c文件路径Source/portable/MemMang,portc的路径FreeRTOS/Source/portable/RVDS/ARM_CM4F,这是因为我们使用的M451是CM4F内核的
在工程中添加新的头文件搜索路径:
\FreeRTOS\include;
\FreeRTOS\portable\RVDS\ARM_CM4F
打开FreeRTOSConfigh配置文件,根据自己硬件配置进行修改
1 首先将文件开头的__ICCARM__修改为__CC_ARM,即把编译器从IAR改为RealView
2 将以下宏配置为0
configUSE_IDLE_HOOK
configUSE_TICK_HOOK
configCHECK_FOR_STACK_OVERFLOW
configUSE_MALLOC_FAILED_HOOK
3 #define configUSE_PREEMPTION 1 将会使能抢占式调度器
4 #define configCPU_CLOCK_HZ ( SystemCoreClock )设置系统主频(M451的系统主频为72MHz)
5 #define configTICK_RATE_HZ ( ( TickType_t ) 1000 )设置系统节拍为1kHz,即1ms
6 #define configMAX_PRIORITIES ( 5 )定义可供用户使用的最大优先级数为5,那么用户可以使用的优先级号是0,1,2,3,4
6 #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 30 1024 ) )定义堆大小,FreeRTOS内核,用户动态申请内存,任务栈等都需要这个空间
4 将工程整体重新编译一次,这样FreeRTOS基本移植结束了
编写测试程序来验证一致的FreeRTOS是否已经可以使用
1 在mainc中添加一下几个头文件
#include "FreeRTOSh"
#include "taskh"
#include "queueh"
#include "croutineh"
2 在main函数的开头,禁止全局中断(除了NMI和HardFault),具体方法是:__set_PRIMASK(1);这样做的好处是可以防止执行的中断服务程序中有FreeRTOS的API函数,保证系统正常启动,不受别的中断影响。在portc中的函数prvStartFirstTask中会重新开启全局中断
3 创建任务AppTaskCreate();
4 启动调度,开始执行任务vTaskStartScheduler();
烧写程序,运行,可以从串口看到正确的输出信息
只要你把项目文件下的bin->debug里面的exe文件拷贝出来,然后再给别人的电脑安装一个net framework,如果有数据库访问的话,你的数据库必须是服务器版的,而且你们在同一个网络中。其实光是部署的话,可以参考>
首先,你要保证你编译的程序使用的交叉编译链是开发板支持的,例如arm-linux-432,一般是在虚拟机下面的linux系统下的/etc/profile里面添加编译链路径;
接着,需要确保使用的内核是开发板目前使用的内核,一般MINI2440是使用linux-2630版本的,这个要在程序的makefile文件里面改;
还有,如果你使用静态编译方式文件会比较大,但是不用依赖库,如果是用动态编译,文件就比较小,但是依赖动态库,如果放到开发板上运行提示缺少动态库,就证明你没有把动态库放进开发板的/lib里面,可以用ldd指令查看需要哪些库;
最后,记住移植的方式可以使用NFS或者TFTP,U盘也可以,放到开发板上后必须在文件存放的当前目录下/可执行文件,或者把文件放入/bin或者/sbin下面,就可以直接可执行文件,不用加/
你可以在程序里面加些调试信息输出,例如printf,以此证明有执行。
以上就是关于简述java程序的可移植性全部的内容,包括:简述java程序的可移植性、求大神怎么把一个VB程序从一台电脑上移植到另外一台电脑上运行呢、程序的可移植是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)