发明内容
本发明的实施例提供一种掩膜智能卡的功能扩展方法及智能卡,能够实现掩膜智能卡程序的修改、升级等功能扩展。
为达到上述目的,本发明的实施例采用如下技术方案:
一种掩膜智能卡的功能扩展方法,该掩膜智能卡包括只读存储器、随机存储器和非易失性可擦除存储器;所述只读存储器中存储智能卡的工程文件,该工程文件具有多个功能函数;所述方法包括:
所述只读存储器中的程序通过存储在所述非易失性可擦除存储器中的函数调用表调用存储在所述非易失性可擦除存储器中的补丁函数,其中,所述函数调用表定义的相应函数调用关系指向所述补丁函数。
一种掩膜智能卡,包括只读存储器、随机存储器和非易失性可擦除存储器;其特征在于,
所述只读存储器,用于存储智能卡的工程文件,该工程文件具有多个功能函数;
所述非易失性可擦除存储器,用于存储函数调用表和补丁函数,以便于所述只读存储器中的程序通过存储在所述非易失性可擦除存储器中的函数调用表调用存储在所述非易失性可擦除存储器中的补丁函数,其中,所述函数调用表定义的相应函数调用关系指向所述补丁函数。
一种掩膜智能卡,包括:
补丁函数模块,用于存储补丁函数;
函数调用表模块,用于存储函数调用表,所述函数调用表中定义的函数用于跳转到所述补丁函数模块;
程序执行模块,用于调用所述函数调用表模块,以跳转到所述补丁函数模块,运行所述补丁函数模块定义的补丁函数。
本发明实施例提供的掩膜智能卡的功能扩展方法及智能卡,掩膜智能卡包括只读存储器、随机存储器和非易失性可擦除存储器;其中只读存储器存储智能卡的工程文件,该工程文件具有多个功能函数;进一步地,只读存储器中的程序通过存储在非易失性可擦除存储器中的函数调用表调用存储在非易失性可擦除存储器中的补丁函数,此时,函数调用表定义的相应函数调用关系指向所述补丁函数。这样一来,只读存储器中的程序运行顺序发生了改变,函数调用不再是直接调用其自身中存储的功能函数,而是通过非易失性可擦除存储器中的函数调用表调用存储在非易失性可擦除存储器中的补丁函数。由于补丁函数可以针对相应功能函数进行了修改或升级,因此智能卡运行补丁函数,即实现了对原工程文件的修改、升级等扩展处理,从而降低了智能卡生产厂商的生产成本。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的掩膜智能卡的功能扩展方法,如图1所示,该掩膜智能卡包括只读存储器101、随机存储器(图中未表示)和非易失性可擦除存储器102。
只读存储器101中存储智能卡的工程文件,该工程文件具有多个功能函数1011,本实施提供的方法包括:
如图1所示,只读存储器101中的程序通过存储在非易失性可擦除存储器102中的函数调用表1021调用存储非易失性可擦除存储器102中的补丁函数1022,其中,函数调用表1021定义的相应函数调用关系指向补丁函数1022。
本发明实施例提供的掩膜智能卡的功能扩展方法,掩膜智能卡包括只读存储器、随机存储器和非易失性可擦除存储器;其中只读存储器存储智能卡的工程文件,该工程文件具有多个功能函数;进一步地,只读存储器中的程序通过存储在非易失性可擦除存储器中的函数调用表调用存储在非易失性可擦除存储器中的补丁函数,此时,函数调用表定义的相应函数调用关系指向所述补丁函数。这样一来,只读存储器中的程序运行顺序发生了改变,函数调用不再是直接调用其自身中存储的功能函数,而是通过非易失性可擦除存储器中的函数调用表调用存储在非易失性可擦除存储器中的补丁函数。由于补丁函数可以针对相应功能函数进行了修改或升级,因此智能卡运行补丁函数,即实现了对原工程文件的修改、升级等扩展处理,从而降低了智能卡生产厂商的生产成本。
本发明另一实施例提供的掩膜智能卡的功能扩展方法,示例性的,非易失性可擦除存储器采用的是EEPROM(电可擦可编程只读存储器),当然也可以采用其他的电子元件,如闪存等。
本实施例掩膜智能卡包括只读存储器ROM、随机存储器RAM和EEPROM;其中ROM中存储有智能卡的工程文件,该工程文件具有多个功能函数。如图2所示,其方法步骤包括:
S201、智能卡生产厂商确定可以进行功能扩展的功能函数后,在智能卡设计、生产时切断ROM中的程序直接调用本ROM中的该功能函数的函数调用关系。即切断原有函数调用关系,是智能卡生成厂商在生产过程中预先写进ROM中的。
如图3所示,假设函数a()是可以进行功能扩展的功能函数,原来ROM中的工程文件的程序可以直接调用该ROM中的功能函数a(),现在将ROM中的功能函数a()重新命名为a1()或其他名字,这样ROM中的程序就无法直接调用功能函数a1()了。
需要说明的是,S201并不对本发明实施例的方案构成限制。例如,假设函数b()是可以进行功能扩展的功能函数,而ROM中并不存在该函数b(),而把该函数b()直接保存在EEPROM中,由于ROM与EEPROM是统一编址,则原来ROM中的工程文件的程序可以直接调用EEPROM中的功能函数b(),而不必在ROM中切断原有函数的调用关系。
S202、在EEPROM中加入函数调用表,并建立该函数调用表与ROM中的程序之间的函数调用关系。
EEPROM中的函数调用表中定义有多个跳转函数,每个跳转函数都用于实现函数跳转。具体的,函数调用表可以为用汇编语言写成的函数定义代码。该函数调用表定义的跳转函数可以与ROM中程序所要调用的确定可进行功能扩展的函数相对应。这里,使用汇编语言是由于这样写成的函数,代码量小,编译运行所需的资源少,不会对智能卡的使用造成时延影响。
可以根据需要,选择需要通过EEPROM进行跳转的函数,即对有可能通过打补丁实现修改、升级的函数设置这种利用函数调用表的跳转机制。
如图4所示,ROM中的程序要调用函数a(),由于上一步骤S201,在ROM中已经没有对应的功能函数了,而地址空间统一编址的EEPROM的函数调用表中定义了跳转函数a(),则ROM中的程序会调用EEPROM中函数调用表的跳转函数a()。
EEPROM中函数调用表的跳转函数a()的功能是实现函数跳转,如果此时ROM中的功能函数a1()不需要进行修改、升级等扩展处理,则函数调用表中的跳转函数a()使程序跳转到ROM的a1(),即跳转函数a()定义的调用关系指向a1()。
程序通过函数调用表跳转到a1(),与原来程序的直接函数调用,函数调用的上下文环境并未发生变化,并不影响程序的正常执行。
示例的,函数调用表中的跳转函数a()可以用汇编语言写成:
PUBLIC a??
RSEG FILTER_locateObjectInMemory_ADDR
a??PROC FAR
EJMP a1??
ENDP
在本实施例中,函数调用表中的跳转函数的内容是只有一句用于函数跳转的汇编语句。这样,一方面可以有效减少函数调用表的代码量,另一方面在函数调用时,只是增加了一个时钟周期的时钟影响,可以提高处理速度。
需要说明的是,在本实施例中,函数调用表是用低级语言,如汇编语言写成的,但并不限于此,也可以利用其他语言,如C语言等写成。
再有,对于ROM中确定不需进行功能扩展的函数而言,仍旧保持原有的程序运行顺序,即不切断该类函数的原有调用关系,函数调用表中也不进行相应定义,这样可以节约EEPROM中的资源。
S203、编写功能函数的补丁函数,将补丁函数下载到EEPROM中。同时,将该功能函数在函数调用表中对应的跳转函数的跳转修改为跳转到该补丁函数,即跳转函数定义的函数调用关系指向该补丁函数。
具体的,假设需要对ROM中的功能函数a1()进行修改或升级等扩展处理,编写了对应的补丁函数b()。将补丁函数b()下载到EEPROM中后,修改函数a1()在函数调用表中对应的跳转函数a()的跳转语句,使跳转函数a()的内容从跳转到函数a1(),改为跳转到函数b(),即跳转函数a()定义的调用关系指向b(),如图5所示。
示例的,函数调用表中的跳转函数a()可以改为:
PUBLIC a??
RSEG FILTER_locateObjectInMemory_ADDR
a??PROC FAR
EJMP b??
ENDP
这样,ROM中的程序运行到需要调用函数a()时,会调用EEPROM中的函数调用表的跳转函数a(),并通过该跳转函数a()跳转到存储于EEPROM中的补丁函数b(),从而实现了对原功能函数a1()的修改或升级等扩展处理。
本发明实施例提供的掩膜智能卡的功能扩展方法,掩膜智能卡包括ROM、RAM和EEPROM;其中ROM中存储有智能卡的工程文件,该工程文件具有多个功能函数;进一步地,ROM中的程序通过存储在EEPROM中的函数调用表调用存储在该ROM中的功能函数,或是调用存储在EEPROM中的补丁函数。这样一来,ROM中的程序运行顺序发生了改变,函数调用不再是直接调用,而是通过EEPROM的函数调用表进行调用,通过函数调用表中的函数跳转,可以跳转到ROM中的功能函数,也可以跳转到EEPROM中的补丁函数。由于补丁函数可以针对相应功能函数进行了修改或升级,因此智能卡运行补丁函数,即实现了对原工程文件的修改、升级等扩展处理,从而降低了智能卡生产厂商的生产成本。
此外,本发明实施例中,函数调用表中定义的函数可以与ROM中确定的可以进行功能扩展的所有功能函数相对应,这样可以利用函数调用表保留对这些功能函数的扩展机制,等到实际应用中需要进行功能扩展时可以迅速实施,有利于厂商产品的平滑升级。
再有,本实施例中通过EEPROM中的函数调用表进行函数调用,实现起来简单易行,代码量小,且处理速度较快。
本发明实施例提供的掩膜智能卡60,如图6所示,包括只读存储器601、随机存储器602和非易失性可擦除存储器603。
其中,只读存储器601,用于存储智能卡的工程文件,该工程文件具有多个功能函数。
非易失性可擦除存储器603,用于存储函数调用表和补丁函数,以便于只读存储器601中的程序通过存储在非易失性可擦除存储器603中的函数调用表调用存储在非易失性可擦除存储器603中的补丁函数,其中,函数调用表定义的相应函数调用关系指向该补丁函数。
本发明实施例提供的掩膜智能卡,掩膜智能卡包括只读存储器、随机存储器和非易失性可擦除存储器;其中只读存储器用于存储智能卡的工程文件,该工程文件具有多个功能函数。非易失性可擦除存储器用于存储函数调用表和补丁函数,以便于只读存储器中的程序通过存储在非易失性可擦除存储器中的函数调用表调用存储在非易失性可擦除存储器中的补丁函数,此时,函数调用表定义的相应函数调用关系指向该补丁函数。这样一来,只读存储器中的程序运行顺序发生了改变,函数调用不再是直接调用其自身中存储的功能函数,而是通过非易失性可擦除存储器中的函数调用表调用存储在非易失性可擦除存储器中的补丁函数。由于补丁函数可以针对相应功能函数进行了修改或升级,因此智能卡运行补丁函数,即实现了对原工程文件的修改、升级等扩展处理,从而降低了智能卡生产厂商的生产成本。
本发明实施例提供的掩膜智能卡70,如图7所示,包括:
补丁函数模块701,用于存储补丁函数。
函数调用表模块702,用于存储函数调用表,该函数调用表中定义的函数用于跳转到补丁函数模块701。
程序执行模块703,用于调用函数调用表模块702,以跳转到补丁函数模块701,运行该补丁函数模块701定义的补丁函数。
本发明实施例提供的掩膜智能卡,掩膜智能卡包括:用于存储补丁函数的补丁函数模块;用于存储函数调用表的函数调用表模块,该函数调用表中定义的函数用于跳转到补丁函数模块;和程序执行模块,该程序执行模块调用函数调用表模块跳转到补丁函数模块,运行该补丁函数模块定义的补丁函数。这样一来,掩膜智能卡中的程序运行顺序发生了改变,可以通过函数调用表模块调用补丁函数模块中的补丁函数。由于补丁函数可以针对相应功能函数进行了修改或升级,因此智能卡运行补丁函数,即实现了对原工程文件的修改、升级等扩展处理,从而降低了智能卡生产厂商的生产成本。
进一步地,如图8所示,所述掩膜智能卡70还包括:
功能函数模块704,用于存储功能函数。
该函数调用表模块702,用于存储函数调用表,该函数调用表定义的函数还用于跳转到该功能函数模块704。
该程序执行模块703,用于调用函数调用表模块702,以跳转到功能函数模块704,运行该功能函数模块704定义的功能函数。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。