程序运行环境的切换方法、装置、嵌入式设备及存储介质与流程

摘要: 本技术涉及计算机控制,尤其涉及程序运行环境的切换方法、程序运行环境的切换装置、嵌入式设备及存储介质。背景技术:1、在嵌入式系统中,引导程序向应用程序进行运行环境...
程序运行环境的切换方法、装置、嵌入式设备及存储介质与流程

本技术涉及计算机控制,尤其涉及程序运行环境的切换方法、程序运行环境的切换装置、嵌入式设备及存储介质。

背景技术:

1、在嵌入式系统中,引导程序向应用程序进行运行环境切换之前,需要对处理器内核状态、中断控制器、系统定时器及外设资源进行清理,以避免应用程序启动时受到引导程序所配置的硬件状态(即引导程序的运行环境)的影响。

2、现有技术引导程序向应用程序进行环境切换时,按照固定顺序依次执行关闭全局中断、设置向量表偏移、加载主栈指针并跳转等操作,存在以下缺陷:依赖中断完成的通信行为(如串口数据发送)在全局中断关闭后无法正常执行,导致跳转前的关键诊断信息丢失,使得故障无法追溯;有些寄存器例如系统定时器对应的寄存器,在关闭过程中存在计数归零与停止指令之间的竞态窗口,该竞态窗口内定时器归零所触发的挂起标志位在定时器停止后仍可能残留;例如处理器模式和内存保护单元各自的寄存器,引导程序运行过程中会修改上述寄存器的各种配置,但这些寄存器的各种配置在跳转前未被复位,存在残留配置。上述残留状态将导致应用程序在启动时遭遇非预期的中断响应、访问违例或指令执行异常。

3、可知,现有因诊断信息丢失或配置残留,使得应用程序无法在确定性、干净的运行环境下启动,致使应用程序启动失败或运行行为不可预测,应用程序跳转后运行可靠性低。

技术实现思路

1、本技术的主要目的在于提供一种程序运行环境的切换方法、程序运行环境的切换装置、嵌入式设备及存储介质,旨在解决现有技术引导程序向应用程序进行环境切换时,存在诊断信息丢失或配置残留的技术问题。

2、为实现上述目的,本技术提出一种程序运行环境的切换方法,应用于芯片,所述程序运行环境的切换方法包括:

3、在所述芯片内部的全局中断响应处于开启状态下,对所述芯片所具有的各个外设执行反初始化操作,并在所述反初始化操作完成后等待预设时长;

4、响应于所述预设时长结束,关闭所述全局中断响应,并对所述芯片中的目标寄存器执行复位清理操作;

5、在对所述目标寄存器执行复位清理操作之后,进行多层屏障指令的插入,并在插入的最后一个屏障指令执行后,跳转至待加载程序的启动入口地址,以切换至所述待加载程序的运行环境。

6、在一实施例中,所述对所述芯片所具有的各个外设执行反初始化操作的步骤包括:

7、基于预设的外设清理函数列表,依次调用所述芯片所具有的各个外设对应的外设清理函数,以对所述芯片所具有的各个外设执行反初始化操作。

8、在一实施例中,所述依次调用所述芯片所具有的各个外设对应的外设清理函数的步骤包括:

9、在执行当前外设对应的外设清理函数时,启动计时器监测当前外设清理函数的执行时长;

10、若所述执行时长超过预设时间阈值,则停止执行所述当前外设清理函数,并执行下一个外设对应的外设清理函数。

11、在一实施例中,所述目标寄存器包括:中断使能寄存器、中断挂起寄存器、处理器模式控制寄存器、内存保护单元控制寄存器、所述芯片中系统定时器的控制寄存器、重装载值寄存器和当前值寄存器以及所述芯片中系统控制块中的挂起清除寄存器;

12、所述对所述芯片中的目标寄存器执行复位清理操作的步骤依次包括:

13、向所述中断使能寄存器和所述中断挂起寄存器写入第一预设值,以禁用所有外设的中断功能并清除所有外设的中断挂起状态;

14、向所述控制寄存器、所述重装载值寄存器与所述当前值寄存器均写入第二预设值,以停止所述系统定时器的计数;

15、向所述挂起清除寄存器写入第三预设值,以清除所述系统定时器对应的第一挂起标志与所述系统控制块中可挂起系统调用对应的第二挂起标志;

16、向所述处理器模式控制寄存器写入所述第二预设值,以调整所述芯片中处理器运行权限等级并选择使用主堆栈指针;

17、向所述内存保护单元控制寄存器写入所述第二预设值,以禁用所述内存保护单元。

18、在一实施例中,所述目标寄存器还包括缓存控制寄存器;所述对所述芯片中的目标寄存器执行复位清理操作的步骤还包括:

19、对所述芯片中的缓存进行数据清理操作,并向所述缓存控制寄存器写入所述第二预设值以禁用所述缓存。

20、在一实施例中,所述在对所述目标寄存器执行复位清理操作之后,进行多层屏障指令的插入的步骤包括:

21、在对所述目标寄存器执行复位清理操作之后,插入第一屏障指令;

22、在所述第一屏障指令执行后且在所述芯片中写入待加载程序的向量表起始地址后,插入第二屏障指令;

23、在所述第二屏障指令执行后且为所述待加载程序配置运行所需的堆栈空间后,插入第三屏障指令。

24、在一实施例中,所述在所述芯片中写入待加载程序的向量表起始地址的步骤包括:

25、将所述待加载程序的向量表起始地址写入所述芯片中的向量表偏移寄存器;

26、所述为所述待加载程序配置运行所需的堆栈空间的步骤包括:

27、从所述待加载程序的向量表中读取堆栈起始地址并写入所述芯片中的主堆栈指针。

28、此外,为实现上述目的,本技术还提出一种程序运行环境的切换装置,应用于芯片,所述程序运行环境的切换装置包括:

29、反初始化模块,用于在所述芯片内部的全局中断响应处于开启状态下,对所述芯片所具有的各个外设执行反初始化操作,并在所述反初始化操作完成后等待预设时长;

30、关中断模块,用于响应于所述预设时长结束,关闭所述全局中断响应,并对所述芯片中的目标寄存器执行复位清理操作;

31、跳转模块,用于在对所述目标寄存器执行复位清理操作之后,进行多层屏障指令的插入,并在插入的最后一个屏障指令执行后,跳转至待加载程序的启动入口地址,以切换至所述待加载程序的运行环境。

32、此外,为实现上述目的,本技术还提出一种嵌入式设备,所述嵌入式设备包括:芯片,所述芯片集成有存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序配置为实现如上文所述的程序运行环境的切换方法的步骤。

33、此外,为实现上述目的,本技术还提出一种存储介质,所述存储介质为计算机可读存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上文所述的程序运行环境的切换方法的步骤。

34、此外,为实现上述目的,本技术还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如上文所述的程序运行环境的切换方法的步骤。

35、本技术提出的一个或多个技术方案,至少具有以下技术效果:

36、本技术通过在全局中断保持开启的状态下对各外设执行反初始化操作,使得各外设的清理过程能够正常依赖中断完成通信行为,并在反初始化操作完成后等待预设时长以确保通信数据的最后字节已完整输出,从而在关中断之前保留了诊断信息的输出通道,避免了关键诊断信息因全局中断关闭而丢失,使得故障现场可追溯。

37、通过在关闭全局中断后对芯片中的目标寄存器执行复位清理操作,将引导程序运行过程中所修改的各类配置一并归零复位,例如,对目标寄存器中与系统定时器对应的寄存器进行复位清理操作,从而消除了系统定时器关闭过程中计数归零与停止指令之间的竞态窗口,避免挂起标志位残留导致应用程序启动时遭遇非预期的中断响应;例如,对目标寄存器中与处理器模式和内存保护单元对应的寄存器进行复位清理,则消除了引导程序运行环境中的残留配置,避免应用程序启动时因残留配置而遭遇访问违例或指令执行异常。

38、通过在目标寄存器复位清理完成后插入多层屏障指令,利用屏障指令对芯片内部流水线和写缓冲器的同步约束作用,确保各目标寄存器的复位清理操作在跳转前已完成,避免了因芯片内部流水线和写缓冲器导致的写入操作滞后于后续跳转指令执行的情况,从而保证应用程序获得确定的、干净的启动环境。

39、通过本技术的技术方案,使得应用程序能够在引导程序所配置的硬件状态被完全清理后的确定运行环境下启动,有效避免了因诊断信息缺失导致的故障无法追溯,以及因残留配置导致的非预期中断响应、访问违例或指令执行异常,提升了应用程序跳转后的运行可靠性。