本发明属于otp芯片的技术领域,特别涉及otp芯片汇编程序的打补丁方法。
背景技术:
otp芯片是mcu的一种存储器类型,意思是一次性可编程:程序烧入ic后,一般情况下是不可再次更改。otp芯片相比市面上常用的mtp芯片和flash芯片成本低,因此otp芯片大批量应用于消费类电子产品上,且都是一次性写入程序,所以出货量相当大。但是当已经烧录的otp芯片程序出现bug时,基本上整批otp芯片都要报废,不仅造成芯片费用损失,严重的可能造成整个pcba板费用或整个消费电子产品费用赔偿。otp芯片汇编程序二次打补丁的方法可以尽可能减小otp芯片汇编程序出现bug时的损失,甚至可以完全避免不必要的经济损失。
如专利申请201310157498.8公开了一种在线补丁的激活方法、装置及系统,其中,所述方法包括:定位补丁函数的地址和待打补丁函数的入口地址;基于所述补丁函数的地址和所述待打补丁函数的入口地址,在中间区写入用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;将待打补丁函数入口位置处的指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过中间区中指令的执行跳转到所述补丁函数执行。通过本发明实施例,从而提高应用软件在线补丁激活时的安全性和可靠性。
然而,上述专利申请是通过中间区实现跳转补丁激活,能够适用于在线激活,但是对于otp芯片,特别是otp芯片中的汇编程序没有处理办法,因此,亟需一种方法能够解决otp芯片汇编程序的补丁问题,以提高otp芯片的运行稳定性和可靠性,避免不必要的经济损失。
技术实现要素:
基于此,因此本发明的首要目地是提供一种otp芯片汇编程序二次打补丁方法,该方法能够解决otp芯片汇编程序中的补丁问题,提高otp芯片的运行稳定性和可靠性,避免不必要的经济损失。
本发明的另一个目地在于提供一种otp芯片汇编程序二次打补丁方法,该方法能够充分利用otp芯片,节约芯片,避免芯片的浪费,也减少了维护费用。
为实现上述目的,本发明的技术方案为:
一种otp芯片汇编程序二次打补丁方法,其特征在于该方法包括如下步骤:
101:找出程序bug区域跳转指令行中最适合跳转的指令行。
102:从程序bug区域跳转指令行跳到程序初始入口和中断入口中间空白地址(后面称为地址1),通过地址1再进行跳转,跳至程序剩余空白rom的地址处(后面称为地址2)打程序补丁。
103:作废的程序行全部写成空指令。
所述步骤101中,所述找出程序bug区域跳转指令行中最适合跳转的指令行,其目的是找出bug区域程序中跳转指令后面紧跟着的跳转地址数据能否满足第1次跳转的要求。
第1次跳转地址要为:001h/002h/003h或001h/002h/003h/004h/005h/006h/007h,因为一般mcu程序初始入口地址为000h,中断入口地址为004h或008h,所以两入口地址中间的空白地址为001h/002h/003h或001h/002h/003h/004h/005h/006h/007h,只要在程序bug区域跳转指令后紧跟的地址数据能直接覆盖成001h/002h/003h或001h/002h/003h/004h/005h/006h/007h即可。
所述步骤102中,所述从程序bug区域跳转指令行跳到程序初始入口和中断入口中间空白地址(后面称地址1)处,通过地址1再进行跳转,跳至芯片剩余空白rom地址处(后面称为地址2),相当于从程序bug处的跳转指令行先跳到地址1处,再从地址1处写入跳转指令,跳转到地址2处(地址2的数据可根据hex档可反汇编看得出来),然后在地址2处写补丁程序,补丁程序写完后,再跳回bug程序后面的程序区。
所述步骤103中,所述作废的程序行全部写成空指令,因为在程序bug区域跳转指令行第一次跳转时,bug程序跳转到地址1处的前面或后面有部分程序需要作废时,要把作废的程序写成空指令,这样才不影响整个程序的执行。
本发明通过对已烧录的otp芯片汇编程序进行二次打补丁,修正了程序中的bug,提高otp芯片的运行稳定性和可靠性,不仅可以节约芯片,避免芯片的浪费,而且也能避免芯片量产时上板(已焊接到pcb板上)otp芯片因为拆御带来的返工费用,减少维护费用。
附图说明
图1是具有bug的程序示意图。
图2是bug程序行第一个跳转行跳转地址为099h的示意图。
图3是本发明所实施把跳转地址从099h变更为001h的示意图。
图4是本发明所实施程序从001h地址再次跳转到03f0h地址的示意图。
图5是本发明所实施在03f0h地址写入补丁程序的示意图。
图6是本发明所实施从补丁程序处跳回bug程序后面程序区的示意图。
图7是本发明所实施把作废的程序行写成空指令的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
为本发明所实现的otp芯片汇编程序二次打补丁方法,包括如下步骤:
101:找出程序bug区域跳转指令行中最适合跳转的指令行。
102:从程序bug区域跳转指令行跳到程序初始入口和中断入口中间空白地址(后面称为地址1),通过地址1再进行跳转,跳至程序剩余空白rom的地址处(后面称为地址2)打程序补丁。
103:作废的程序行全部写成空指令。
图1所示,图中显示,278~283行的程序有bug,在图2右侧的反汇编窗口中可以看到,程序bug区域中,最近的一个goto跳转指令行为281行,其跳转地址数据为099h,099h的二进制数为000010011001b,它可以被覆盖为001h(二进制数字1可以写成0),满足跳转地址1(001h/002h/003h或001h/002h/003h/004h/005h/006h/007h)的要求。
依照本发明的方法,结合图3所示,把bug程序区域中跳转指令的地址099h,写成了001h的地址,即gotocheck_no_short_001,如图3右侧红框所示,goto001h。当bug程序区的goto指令行跳到程序初始入口地址000h和中断入口地址004h中间的001h地址后,再结合图4所示,程序又从001h地址再跳到地址203f0h地址。
如图5所示,在03f0h的地址处写入真正打补丁的程序,图5左侧红圈为程序修改的参数值,补丁程序完成后,如图6所示,再跳回bug程序区后面的程序,继续接着往下执行程序。
当补丁程序写完后,如图7所示,再把bug程序行282~284行以及287行,用空指令覆盖掉,这样otp芯片的汇编程序二次补丁就完成了。若程序281行的goto指令后紧跟跳转地址数据不满足地址1的要求,可以继续往下找最近一个符合跳转地址1的goto指令,再跳转到地址2处,在地址2补丁程序中把bug程序区最终第一个有效goto跳转指令行前面或后面的有效程序都编辑进来,再跳转回去即可。
因此,本发明通过对已烧录的otp芯片汇编程序进行二次打补丁,修正了程序中的bug,提高otp芯片的运行稳定性和可靠性,不仅可以节约芯片,避免芯片的浪费,而且也能避免芯片量产时上板(已焊接到pcb板上)otp芯片因为拆御带来的返工费用,减少维护费用。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。