本发明涉及一种基于hcs12单片机的bootloader程序调试方法及系统。
背景技术:
bootloader程序提供了一种不通过仿真器下载程序的方式。bootloader程序负责初始化硬件,在不拆开机壳的情况下实现应用程序远程加载。
程序下载过程为:
1)bootloader程序通过仿真器下载到单片机;
2)应用程序根据特定的接口通过bootloader程序加载到单片机;
bootloader程序与应用程序共用一张中断向量表,中断服务程序在bootloader程序中偏移到应用程序位置,造成应用程序中断向量不完整无法直接独立仿真;同时添加中断服务程序需要先在bootloader程序添加中断偏移代码,造成升级应用程序时不断修改bootloader程序,发挥不出bootloader程序的优势。
上述方案存在以下问题:
方案中应用程序不能直接调试,需要更改中断服务程序地址才能仿真调试;当需要升级应用程序的中断服务程序时需要同时更改bootloader程序。
技术实现要素:
本发明的目的就是为了解决上述问题,提供一种基于hcs12单片机的bootloader程序调试方法及系统,它具有应用程序与bootloader程序可以直接仿真调试,应用程序调试完以后不需做任何修改直接通过bootloader方式下载的优点。
为了实现上述目的,本发明采用如下技术方案:
基于hcs12单片机的bootloader程序调试方法,包括:
步骤(1):bootloader程序的中断向量表作为第一中断向量表,应用程序的中断向量表作为第二中断向量表;
步骤(2):通过bootloader程序将应用程序加载到单片机,将两张中断向量表根据地址整合形成新的中断向量表,从而实现两张中断向量表的地址覆盖;
步骤(3):hcs12单片机上电运行,运行bootloader程序的启动程序;
步骤(4):bootloader程序判断自身是否需要加载新的应用程序;然后,运行新的应用程序的主程序;
步骤(5):如果外部硬件中断到来,则直接运行应用程序的中断服务程序。
进一步的,所述步骤(2)的步骤为:
步骤(21):第二中断向量表指向地址为第一偏移地址,第一偏移地址在hcs12单片机的的flash未分页区;
步骤(22):第一中断向量表指向第一偏移地址加上n个字节的地址;从第一偏移地址加上n个字节的地址开始;其中,n≥4;
步骤(23):通过bootloader程序将应用程序加载到单片机时,实现两张中断向量表的地址覆盖,新的中断向量表指向应用程序的中断服务程序。
进一步的,步骤(2)应用程序可以独立仿真调试,仿真调试成功后,不需更改,直接通过bootloader程序加载到单片机即可运行。
进一步的,所述步骤(4)的步骤为:bootloader程序的启动程序判断自身是否需要加载新的应用程序;若需要进入步骤(41);若不需要进入步骤(42);
步骤(41):启动程序自动运行,完成新的应用程序的下载,然后,运行新的应用程序的主程序;
步骤(42):跳转到应用程序的启动程序,然后开始启动应用程序的主程序。
进一步的,所述步骤(41)的启动程序自动运行,完成新的应用程序的下载之后,运行新的应用程序的主程序之前,需要执行如下步骤:
应用程序编译后生成的s19文件在通过bootloader程序加载时,将s19文件中的程序加载地址为ff80、ffa0、ffc0、ffe0的四行程序删除。
基于hcs12单片机的bootloader程序调试系统,包括:
初始化单元:bootloader程序的中断向量表作为第一中断向量表,应用程序的中断向量表作为第二中断向量表;
整合单元:通过bootloader程序将应用程序加载到单片机,将两张中断向量表根据地址整合形成新的中断向量表,从而实现两张中断向量表的地址覆盖;
上电运行单元:hcs12单片机上电运行,运行bootloader程序的启动程序;
判断单元:bootloader程序判断自身是否需要加载新的应用程序;然后,运行新的应用程序的主程序
中断执行单元:如果外部硬件中断到来,则直接运行应用程序的中断服务程序。
进一步的,所述整合单元包括:
第一地址指向模块:第二中断向量表指向地址为第一偏移地址,第一偏移地址在hcs12单片机的的flash未分页区;
第二地址指向模块:第一中断向量表指向第一偏移地址加上n(n>=4)个字节的地址;从第一偏移地址加上n个字节的地址开始;
地址覆盖模块:通过bootloader程序将应用程序加载到单片机时,实现两张中断向量表的地址覆盖,新的中断向量表指向应用程序的中断服务程序。
进一步的,所述整合单元应用程序可以独立仿真调试,仿真调试成功后,不需更改,直接通过bootloader程序加载到单片机即可运行。
进一步的,所述判断单元:bootloader程序的启动程序判断自身是否需要加载新的应用程序;若需要,则启动程序自动运行,完成新的应用程序的下载,然后,运行新的应用程序的主程序;若不需要,则跳转到应用程序的启动程序,然后开始启动应用程序的主程序。
进一步的,启动程序自动运行,完成新的应用程序的下载之后,运行新的应用程序的主程序之前,需要执行如下步骤:
应用程序编译后生成的s19文件在通过bootloader程序加载时,将s19文件中的程序加载地址为ff80、ffa0、ffc0、ffe0的四行程序删除。
本发明的有益效果:
1)应用程序与bootloader程序可以直接仿真调试,应用程序调试完以后不需做任何修改直接通过bootloader方式下载。
2)应用程序可以直接添加中断服务程序,不需要在bootloader程序中进行地址偏移,以后程序升级只需修改应用程序,bootloader程序不再修改。
hcs12单片机bootloader程序与应用程序的中断地址覆盖到flash未分页区,实现应用程序独立仿真和随意添加中断服务程序。
附图说明
图1为bootloader中断向量表;
图2为应用程序中断向量表;
图3为加载应用程序后的中断;
图4为复位后程序运行流程图。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
本方法中,bootloader程序与应用程序各用一张完整的中断向量表,这样两个程序都能独立仿真;同时通过bootloader程序将应用程序加载到单片机中时,两张中断向量表实现地址覆盖,整合成一张完整的中断向量表。
应用程序中断向量表指向地址从0x4000开始,为hcs12单片机flash未分页区,
bootloader中断向量表指向地址0x4000处空出4个字节,从0x4004开始;
通过bootloader加载应用程序时,实现地址覆盖,中断向量表直接指向应用程序中断服务程序。
应用程序编译后生成的s19文件在通过bootloader程序加载时,将s19文件中的程序加载地址为ff80、ffa0、ffc0、ffe0的四行程序删除。
两张独立的中断向量表如图1,图2所示。加载应用程序后的中断向量表如图3所示。
当用bootloader方式下载程序时,两张独立的中断向量表通过地址覆盖会合为一张,如图3所示,整个程序运行流程图如图4所示。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。