电子装置及其程序更新方法

文档序号:6511703阅读:158来源:国知局
专利名称:电子装置及其程序更新方法
技术领域
本发明涉及一电子装置及其程序更新方法,特别涉及一在程序所包含的一子模块中的固定地址设置多个中继函式以分别对应该子模块所包含的多个函数的地址,使得该程序的一子模块可以单独更新而不需与其余子模块一起连结及下载的电子装置及其程序更新的方法。
背景技术
一般来说,目前电子装置如手机或其它便携式电子装置所使用的程序往往包含分别存于存储器中的各区块中的多个子模块(sub-module);各子模块又各自包含多个函数(function),其中各个函数的程序代码长度不一,在程序中的进入点(entry point)地址也不固定。而当欲更新该程序的某一子模块所包含的一函数时,更新后的函数的程序代码长度可能又有所改变,这将使得位于该更新后的函数之后的其它函数的进入点地址也发生变动。因此若仅以更新后的该子模块替换原子模块,会使得执行该程序而需呼叫该经更新的子模块所包含的各函数时,将连结至错误的地址而导致执行失败。
请参阅图1。图1为一已知的电子装置的存储器100的示意图。110为程序所包含的各子模块经连结后产生的执行码(target image),共包含N个子模块,其中各子模块存储于存储器100内的各区固定位置。121为程序执行码110所包含的第一子模块,共包含多个函数1211、1212与1213,依序存于存储器100中。假设子模块121所包含的函数1的进入点地址为0x1100,函数2的进入点地址为0x1200,而函数3的进入点地址为0x1300;其中函数1与函数2的数据长度皆为0x100字节(bytes)。当欲更新子模块1所包含的函数1时,假设更新后的函数1的数据长度增加为0x180字节,则函数2、函数3及后续的其它函数的进入点地址皆会因而被影响而更动。请参阅图2。图2为依已知技术更新后的第一子模块221的示意图。根据上述,更新后的函数1的数据长度由0x100字节增长为0x180字节;因此函数2与函数3的进入点地址分别改变为0x1280与0x1380,后续其它函数的进入点地址也将跟着改变。由此可知,虽然只有第一子模块的一个函数的程序代码经过更新,但在已知技术中,该更新后的子模块必须与其余所有未更新的子模块全部一起重新连结(re-link)而产生新的执行码,再将该连结后所产生的执行码下载至该电子装置上,才能使得程序中各处需要呼叫执行该子模块所包含的函数的程序代码能连结到该被呼叫的函数的正确进入点地址。否则,当程序110欲呼叫函数2时,其仍会到地址0x1200去呼叫函数2,而函数2却已因函数1的长度加长而改到地址0x1280,因此程序110将找不到函数2而执行失败。因此,不论所欲更新的程序代码占总程序篇幅为何,已知中皆需要将完整的程序全部重新连结后再全部下载至电子装置中,而这不论是对于一般的使用者或是正在产品研发测试过程中的工程师来说,都将形成很大的时间成本的负担。

发明内容
因此本发明的主要目的在于提供一电子装置以及其程序更新方法,在程序所包含的一子模块中的固定地址设置多个中继函式以分别对应该子模块所包含的多个函数的地址,使得该程序的一子模块可以单独更新而不需与全部程序一起连结及下载,以克服上述已知技术中的问题。
本发明披露了一程序更新方法,适用于一电子装置内的一程序的更新,其中该程序具有多个子模块。该方法包括选择一第一子模块;设定多个中继函式于该第一子模块内,该多个中继函式分别对应于该第一子模块内所包含多个函数的地址;以及呼叫该多个函数中的一第一函数时,是由该多个中继函式中选择一第一中继函式以取得该第一函数的地址,执行该第一函数。
本发明还披露了一电子装置。该电子装置包括一存储器,分割为多个存储区块;以及一程序,具有多个子模块,每一子模块对应存储于该多个存储区块,任一子模块具有多个中继函式与多个函数,其中该多个中继函式分别对应于该多个函数的地址;其中,呼叫该多个函数中的一第一函数时,由该多个中继函式中选择一第一中继函式以取得该第一函数的地址,执行该第一函数。


图1为一已知的电子装置的存储器的示意图。
图2为已知技术的更新后的第一子模块的示意图。
图3为本发明的电子装置的存储器的示意图。
图4为本发明的更新后的第一子模块的示意图。
图5为本发明的程序更新方法的流程图。
附图符号说明100,300 存储器110,310 程序执行码121,122,123,221,321,322,323,421 子模块1211,1212,1213,2211,2212,2213 函数3211,3212,3213,4211,4212,421332111,32121,32131,42111,42121,42131 中继函式500,510,520,530,540,550,560步骤具体实施方式
在本发明中,我们在各子模块中采用了多个中继函式(stub function)以分别对应于该子模块所包含的多个函数,使得程序在呼叫一函数时先呼叫该函数所对应的中继函式,再根据该中继函式所记录的函数的进入点地址,呼叫该函数。其中该中继函式仅用来记录相对应的函数的进入点地址,因此数据长度为固定,所以在各子模块中,即使函数内容被更新,该更新后函数所相对应的中继函式的进入点仍得以保持固定,因而能解决已知技术中的问题,不需将整个程序都重新连结后产生的执行码下载至电子装置中,大幅节省了连结(link)与下载程序代码的时间。
请参阅图3。图3为本发明的电子装置的存储器300的示意图。310为程序所包含的各子模块经连结后产生的执行码(target image),共包含N个子模块。与已知技术相同,本发明的程序310的各子模块存储于存储器300内的固定位置。321为程序执行码310所包含的第一子模块,共包含多个函数3211、3212与3213,以及相对应的中继函式32111、32121与32131。如图3所示,中继函式1、中继函式2与中继函式3分别为与函数1、函数2与函数3相对应的中继函式,用来存储函数1、函数2与函数3的进入点地址。如图3所示,中继函式1、中继函式2与中继函式3的进入点分别为0x1000、0x1010与0x1020,而函数1、函数2与函数3的进入点则分别为0x1100、0x1200与0x1300。在本发明中,当执行程序310而呼叫第一子模块321所包含的函数2时,先呼叫与该函数2相对应的中继函式2,再由中继函式2根据其所记录的函数2的进入点地址去呼叫函数2。当欲更新第一子模块321所包含的函数1时,假设更新后的函数1的数据长度增加为0x180字节,则函数2、函数3及后续的其它函数的地址同样会如已知般被影响而更动。
请参阅图4。图4为本发明的更新后的第一子模块421的示意图。根据上述,更新后的函数1的数据长度由0x100字节增长为0x180字节;因此函数2与函数3的进入点分别改变为0x1280与0x1380,整个第一子模块的总数据长度也因而改变。然而,与已知技术不同的是,在本发明中,当更新第一子模块的函数1而重新连结(re-link)第一子模块时,中继函式2与中继函式3中所记录的函数2与函数3的进入点地址也会一并被更新。而中继函式本身因为仅记录其所对应的函数的进入点地址,故其数据长度不变,亦即中继函式本身的进入点地址不变;在图4的例子中,即中继函式1、中继函式2与中继函式3的进入点地址分别固定在0x1000、0x1010与0x1020,与图3中的更新前的第一子模块321相同。因此,在本发明中,仅需将被更新的第一子模块421本身重新连结后即可下载至电子装置300的存储器310中,而不需将整个程序包括其它未更新的子模块一起连结后再下载。当执行程序而需呼叫第一子模块421所包含的函数2时,其是先于0x1010呼叫中继函式2,再根据中继函式2中所记录的函数2的进入点地址0x1280正确呼叫函数2。由此可见,本发明利用中继函式的技术以对应记录各函数的进入点地址,而且中继函式本身的进入点地址为固定,不会因为函数的更新或函数数据长度的变动而改变,使得执行程序时可于固定的进入点地址连结到中继函式,再通过该中继函式正确呼叫各函数。
请参阅图5。图5为本发明的程序更新方法的流程图。
步骤500开始;步骤510选择一第一子模块;步骤520设定多个中继函式于该第一子模块内,该多个中继函式分别对应于该第一子模块内所包含多个函数的地址;步骤530更新该第一子模块所包含的一第一函数;步骤540重新连结(re-link)该第一子模块;步骤550更新该第一子模块内所包含的中继函式所记录的各函数的地址;步骤560结束。
其中步骤550为步骤540执行重新连结该第一子模块时会自动执行的流程。而当执行本发明所更新的程序代码时,将包含于执行程序的多个子模块中的一第三子模块时,以该第三子模块呼叫该第一函数。
本发明在各子模块内利用了多个中继函式以分别记录对应的函数的进入点位置,而中继函式本身的进入点地址与数据长度维持固定,因此使得程序所包含的一子模块被更新时,其它未更新的子模块不需要一起重新连结后一起重新下载,而仅需连结该被更新的子模块即可更新该被更新的子模块的各中继函式中所记录的函数的地址,再下载该被更新的子模块至电子装置中,即能正确地呼叫与执行该被更新的子模块所包含的各函数。本发明的优点为大幅节省使用者或程序开发者于更新程序时,连结与下载程序代码的时间,使得如更新电子装置的输入法,增加游戏程序,更新手机屏幕驱动程序或更新电子装置的接口版本等更有效率。除此之外,本发明的方法可与已知已存在的程序撰写方法兼容。举例来说,当需更新一依已知的方法撰写而成的程序时,本发明不需要更新该程序的每一子模块而加入多个与函数相对应的中继函式,而仅需将待更新的子模块改写为本发明的格式,即在固定地址存储中继函式以记录相对应的函数的位置,即可正确地在执行该程序时呼叫各函数。由此可见本发明已以一有效率而简洁地方式,革新了电子装置所使用的程序的更新方法,缩短了连结与下载程序代码的时间,方便使用者更新程序并且使得程序开发者能更有效率地进行研发。
以上所述仅为本发明的较佳实施例,凡依本发明的权利要求所做的均等变化与修饰,皆应属本发明的涵盖范围。
权利要求
1.一种程序更新方法,适用于一电子装置内的一程序的更新,该程序具有多个子模块,其方法包含选择一第一子模块;设定多个中继函式于该第一子模块内,该多个中继函式分别对应于该第一子模块内所包含多个函数的地址;以及呼叫该多个函数中的一第一函数时,是由该多个中继函式中选择一第一中继函式以取得该第一函数的一地址,根据该地址执行该第一函数。
2.如权利要求1所述的方法,该电子装置还包括一存储器用以存放该程序,该方法还包含存放该第一子模块于该存储器的一第一存储区块,该多个中继函式存储于该第一存储区块中的固定地址。
3.如权利要求2所述的方法,该第一存储区块具有固定尺寸且大于该第一子模块的尺寸。
4.如权利要求3所述的方法,还包含选择一第二子模块用以更新该第一子模块,该第二子模块小于该第一存储区块;以该第二子模块取代该第一子模块;以及连结该第二子模块。
5.如权利要求4所述的方法,该方法还包含于该第一存储区块起始处存储该第二子模块的该多个中继函式。
6.如权利要求2所述的方法,于该第一存储区块起始处存储该多个中继函式,以及于该多个中继函式后存放该多个函数。
7.如权利要求1所述的方法,该电子装置还包括一存储器用以存放该程序,该方法还包含分割该存储器为多个存储区块;以及存放该多个子模块于对应的该多个存储区块,任一存储区块大于对应的该子模块。
8.如权利要求1所述的方法,该方法还包含设定一第二子模块具有多个中继函式与该多个函数,该多个中继函式分别对应于该第二子模块内所包含多个函数的地址;以及以该第二子模块更新该第一子模块。
9.如权利要求1所述的方法,该方法还包含自多个子模块中执行一第三子模块,该第三子模块呼叫该第一函数。
10.一种电子装置,其包含一存储器,分割为多个存储区块;以及一程序,具有多个子模块,每一子模块对应存储于该多个存储区块,任一子模块具有多个中继函式与多个函数,其中该多个中继函式分别对应于该多个函数的地址;其中,呼叫该多个函数中的一第一函数时,是由该多个中继函式中选择一第一中继函式以取得该第一函数的一地址,依据该地址执行该第一函数。
11.如权利要求10所述的电子装置,其中该程序的一第一子模块存放该于该存储器的一第一存储区块,该第一模块的多个中继函式存储于该第一存储区块中的固定地址。
12.如权利要求11所述的电子装置,其中该第一存储区块具有固定尺寸且大于该第一子模块的尺寸。
13.如权利要求12所述的电子装置,该电子装置使用一第二子模块用以更新该第一子模块,其中该第二子模块具有多个中继函式与多个函数,该多个中继函式分别对应于该第二子模块内所包含多个函数的地址,以及该第二子模块小于该第一存储区块。
14.如权利要求13所述的电子装置,其中该第二子模块的多个中继函式存储于该第一存储区块起始处。
15.如权利要求11所述的电子装置,其中该多个中继函式存储于该第一存储区块起始处,以及该多个函数存储于该多个中继函式后。
16.如权利要求11所述的电子装置,其中该多个存储区块中的任一存储区块的尺寸大于所对应的该子模块的尺寸。
17.如权利要求11所述的电子装置,其中该程序的多个子模块中的一第三子模块可呼叫该第一函数。
全文摘要
本发明提供一电子装置及其程序更新方法。该电子装置包括一存储器;以及一程序,具有多个子模块,其中任一子模块具有多个中继函式与多个函数,该多个中继函式分别对应于该多个函数的地址。该程序更新方法包括设定多个中继函式于一第一子模块以分别对应于该第一子模块所包含多个函数的地址;以及呼叫该多个函数中的一第一函数时,是由该多个中继函式中选择一第一中继函式以取得该第一函数的地址,执行该第一函数。
文档编号G06F9/445GK1801089SQ200510003958
公开日2006年7月12日 申请日期2005年1月5日 优先权日2005年1月5日
发明者李务诚 申请人:明基电通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1