一种非解释型的动态下载运行方法技术

技术编号:4322874 阅读:244 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种非解释型的动态下载运行方法,该方法包括定义一个函数指针作为预定程序的任务入口函数、以及将预定程序中的驱动函数指针初始值设置成对应驱动函数的地址等步骤。本发明专利技术使预定程序能直接获得各底层设备的驱动函数地址,不再需要设备初始化过程直接调用驱动函数地址,从而使下载的预定程序作为原程序的一个部件或进程直接运行。

【技术实现步骤摘要】

本专利技术涉及程序运行,更具体地说,涉及。
技术介绍
在很多时候,需要动态下载程序并进行运行,例如从TS流中或者从网络上下载一个游戏程序到机顶盒中进行运行。这种需求在支持多进程调度的操作系统上,可以把游戏独立开发成一个可运行文件,把其下载到设备中后当作一个新进程进行调度执行就可实现。然而对于相当部分不支持多进程调度的嵌入式操作系统, 一般只有使用解释器来解释运行,例如Java虚拟机或JavaScript解释器。然而,这种方法存在着成本高、效率低的缺点。 嵌入式系统由于其短小精悍,一般不支持多进程调度,而是采用单进程多线程的模式来进行多任务工作。这样在单进程运行过程中,在不中断现有进程运行的情况下,就无法对下载得到的程序进行调度而使其运行起来。已有技术解决动态程序运行的方法有如下两种 1、使用多个独立运行的系统来实现该功能,即整个系统中存在多个独立运行系统,在A系统中下载代码到特定位置构成B系统,然后终止A系统启动B系统运行。这样就实现了程序动态下载运行了。这里下载而来的程序不能当作原来程序的一个部件运行,而是和原来程序平级关系,只能用其完全替换原来程序运行。 2、开发的程序代码需要在特定虚拟机或解释器上运行,这就必须在原有系统中嵌入虚拟机或解释器,在下载下来后要运行时,由虚拟机或解释器对程序进行翻译解释运行,这是目前动态下载游戏运行所使用的唯一方法。 然而,以上两种方法都存在各自的缺点 1、对于第一种,每个下载来的程序是个完整独立的进程代码,这样就存在着大量的重复代码(如硬件驱动代码等),这大大提高了对程序存储器空间的要求。而且各个程序不能并行运行,A程序在运行B程序就无法运行,这样许多功能是无法通过这种方式来实现。比如游戏的下载运行,用户一般是需要在看电视时通过选择需要下载的游戏来进行下载,下载完后能不影响继续看电视而启动游戏运行。这里由于需要把游戏运行当作原来程序的一个部件(或者一个线程)运行才能实现,原来程序仍然运行实现播发节目功能的同时,游戏线程启动游戏运行。 2,对于第二种,把虚拟机当作原来程序的一个线程在后台运行,当有需要时就对下载来的游戏数据进行解释运行。它具有通用性强的特点,却存在着很大的缺陷第一就是运行效率低下,第二就是虚拟机或者解释器本身代码量巨大,而大大增大了代码空间,第三是如果重头开发游戏运行描述方法进而开发相应的虚拟机或者解释器,难度太大成本太高;而使用现有的Java和JavaScript等解释器技术又面临着大量专利或版权问题,需要交纳大量授权使用费,大大提高了产品成本。
技术实现思路
本专利技术要解决的技术问题在于,针对现有技术的上述下载的程序不能并行运行以及需要特定的解释器来运行的缺陷,提供。 本专利技术解决其技术问题所采用的技术方案是构造一种非解释型的动态下载运行方法,包括以下步骤 Sl、使预定程序作为主程序的一个线程运行,并定义一个函数指针作为预定程序 的任务入口函数; S2、从对主程序进行编译联接时形成的各函数地址分配文件中,获取可能需要调 用的各驱动函数所在地址; S3、基于预定程序的驱动函数类型,定义相应的驱动函数指针,加入各设备的初始 化函数及驱动函数,组成完整的预定程序代码进行测试; S4、删除各设备的初始化函数及驱动函数,将预定程序中的驱动函数指针初始值 设置成对应驱动函数的地址; S5、进行预定程序代码部分的编译联接,正确配置编译联接参数,使生成的主代码 和预定程序代码在地址上没有重叠区域; S6、将预定程序代码的起始放置地址、主函数入口地址和必要信息以及完整的预 定程序目标代码打包; S7、下载打包的文件后,提取起始放置地址和预定主函数入口地址,将预定程序代码旋转到指定的内存地址上,启动预定程序的线程来运行下载的预定程序。 在本专利技术所述的动态下载运行方法中,所述驱动函数的地址是整数值。 在本专利技术所述的动态下载运行方法中,所述预定程序的起始放置地址和主函数入口地址是从预定程序代码的各函数地址分配文件中获取的。 在本专利技术所述的动态下载运行方法中,所述预定程序是运行过程中要调用到系统 硬件资源的程序,或者是要调用到底层驱动的程序。 在本专利技术所述的动态下载运行方法中,所述预定程序为游戏程序。 实施本专利技术的非解释型的动态下载运行方法,具有以下有益效果本专利技术使预定程序能直接获得各底层设备的驱动函数地址,不再需要设备初始化过程直接调用驱动函数地址,从而使下载的预定程序作为原程序的一个部件或进程直接运行。附图说明 下面将结合附图及实施例对本专利技术作进一步说明,附图中 图1是本专利技术的非解释型的动态下载运行方法的一个实施例的流程图。具体实施例方式为了使本专利技术所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用 以解释本专利技术,并不用于限定本专利技术。 下载运行可直接运行的代码,具有代码量少、运行效率高等特点。通过分析现有技 术,在此以游戏为例,可以把游戏部分代码编译联接成可直接运行的目标代码。本专利技术的核心恩在于,使预定程序能直接获得各底层设备的驱动函数地址,不再需要设备初始化过程直接调用驱动函数地址,从而使下载的预定程序作为原程序的一个部件或进程直接运行。 游戏程序代码除了游戏算法代码外,还需要调用必要的底层驱动函数,如需调用遥控器按键信息获得函数来获得用户当前选择操作信息,如调用显示设备的各种显示画图驱动函数来把游戏各界面呈现给用户。 如果游戏程序不包含这些函数,那么就无法获得各函数代码地址而进行调用,实际上在编译过程就会因为缺少符号而编译不过。把这些函数加入到游戏程序中,显然这些设备的初始化函数也必须加入到游戏程序中。依此类推,这样就形成了一个完整独立的代码系统了,由于各设备初始过程不能被调用两次,这样就必然无法两个程序同时平行运行。 分析整个过程,主程序代码已存在了各底层设备驱动函数,并且是经过正确初始化过程可以直接调用的,如果游戏程序中能获得这些驱动函数地址,那么就可以不再需要设备初始化过程而直接调用了 。图1是本专利技术的非解释型的动态下载运行方法的一个实施例的流程图。 在步骤101,在开发主程序时,设计预定程序作为其一个线程(任务或组件)运行,再定义一个函数指针变量作为任务入口函数,以后运行的游戏就是该函数指针所指向的代码。 在步骤102,在开发完主程序后,进行编译联接时,查看形成的各函数地址分配文件(即map文件,各嵌入式编译工具都提供该功能),记录下游戏可能需要调用的各驱动函数所在地址。 在步骤103,在游戏部分开发时,就其所需的各驱动函数,按各自函数类型定义相应的驱动函数指针,再加入各设备初始化函数、驱动函数等等形成一个完整的游戏程序代码。并使各驱动函数指针指向相应的驱动函数,在游戏代码中通过各驱动函数指针来调用所需驱动函数,这样可进行游戏部分的正常开发测试。 在步骤104,开发测试游戏部分代码正确无误后,把其中的各设备初始化函数及其驱动函数等代码全部删除,查看其所要下载到的主程序的函数地址分配文件(即map文件),找到所需的各驱动函数地址(该驱动函数地址是一个整数值),然后把游戏中各对应的驱动函数指针初始值设置成各对应驱动函数的地址。 在步骤105,进行对游戏代码部分的编译联本文档来自技高网
...

【技术保护点】
一种非解释型的动态下载运行方法,其特征在于,包括以下步骤:S1、使预定程序作为主程序的一个线程运行,并定义一个函数指针作为预定程序的任务入口函数;S2、从对主程序进行编译联接时形成的各函数地址分配文件中,获取可能需要调用的各驱动函数所在地址;S3、基于预定程序的驱动函数类型,定义相应的驱动函数指针,加入各设备的初始化函数及驱动函数,组成完整的预定程序代码进行测试;S4、删除各设备的初始化函数及驱动函数,将预定程序中的驱动函数指针初始值设置成对应驱动函数的地址;S5、进行预定程序代码部分的编译联接,正确配置编译联接参数,使生成的主代码和预定程序代码在地址上没有重叠区域;S6、将预定程序代码的起始放置地址、主函数入口地址和必要信息以及完整的预定程序目标代码打包;S7、下载打包的文件后,提取起始放置地址和预定主函数入口地址,将预定程序代码旋转到指定的内存地址上,启动预定程序的线程来运行下载的预定程序。

【技术特征摘要】

【专利技术属性】
技术研发人员:彭文剑
申请(专利权)人:康佳集团股份有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1