本发明涉及本发明属于集成电路芯片的安全性设计领域,尤其涉及一种程序调用方法。
背景技术:
芯片上都会集成许多功能,要使用这些功能就需要对芯片的外设寄存器进行读写。也就是说程序想要实现芯片各种各样的功能就离不开对这些外设寄存器的访问。由于程序的缺陷或者工作环境的干扰,程序有可能会出现没有意料到的对外设寄存器的错误访问,从而产生没有意料到的结果。通常cortex-m的芯片供应商提供的驱动程序库都是让用户程序运行在特权级访问模式,即用户程序可以直接访问外设寄存器。因为程序处在特权级访问模式可以直接访问外设寄存器,当程序跑飞时,也可以直接操作外设寄存器。这样有可能会导致对系统安全性和稳定性有关键作用的外设被误操作。为解决此类问题,使用cortex-m3设备时可以利用mpu模块的保护功能。cortex-m芯片有mpu模块可以将外设寄存器设置为不同的访问权限。如将外设寄存器设置为特权级模式下可以访问,非特权级模式下禁止访问。在此种情况下用户程序就会因为处在非特权级访问模式下无法操作外设寄存器。
现有的cortex-m的芯片厂商都是通过直接提交驱动程序库的方式。用户程序运行在线程模式且处于特权模式访问等级。需要操作外设寄存器时直接调用芯片厂商提供的驱动程序库,从而达到操作硬件的目的。
现有方式一直是处于线程模式特权级,用户程序执行的整个过程都是处于特权级访问等级,芯片厂商提供的驱动程序库可以供用户调用,用户程序可以通过驱动程序库来操作硬件。当程序跑飞或者用户使用其它方式直接操作外设寄存器时可能导致关系的外设影响整个系统的安全性和稳定性。
因此,提供一种更稳定可靠程序调用方法是本领域技术人员亟待解决的问题。
技术实现要素:
针对所述技术的不足,本发明要解决的问题,提供一种更稳定更可靠的程序调用方法。
为实现上述目的,本发明通过以下方案来实现。
一种程序调用方法,应用于采用cortex-m类型的芯片内核的芯片中,所述芯片带有存储保护单元;其中,所述芯片内核连接一设置于所述芯片内的寄存器,通过所述芯片中的所述存储保护单元可将所述寄存器设置为处于一特定访问模式下,于所述特定访问模式下,所述芯片内核只有在具有特权访问权限时才能对所述外设寄存器进行访问;
所述寄存器内保存有寄存器数据;
所述芯片内核具有处理模式和线程模式两种工作模式,于所述处理模式下,所述芯片内核具有所述特权访问权限,于所述线程模式下,所述芯片内核具有所述特权访问权限和非特权访问权限;
所述芯片内核初始处于所述线程模式下;
所述程序调用方法具体包括:
步骤s1,用户在运行用户程序之前,通过相应的驱动程序使能所述芯片中的所述存储保护单元,以将所述寄存器设置为处于所述特定访问模式下,同时将所述芯片内核设置为处于所述线程模式下,以及具有所述非特权访问权限;
步骤s2,当用户需要通过所述用户程序访问所述外设寄存器中的所述寄存器数据时,所述芯片内核通过一服务请求程序进入所述处理模式,并被允许访问所述寄存器;
步骤s3,当用户完成对所述寄存器的访问后,所述芯片内核被切换回所述线程模式,继续执行所述用户程序,并在用户需要通过所述用户程序访问所述寄存器中的寄存器数据时返回所述步骤s2。
优选的,该一种程序调用方法,其中,所述寄存器设有操作硬件的接口,所述寄存器通过所述接口与所述芯片内核连接,所述芯片内核通过所述接口对所述寄存器写入和读取所述寄存器数据来达到操作硬件的目的。
优选的,该一种程序调用方法,其中,所述接口被设置为一驱动程序库;
所述芯片内核通过调用所述驱动程序库中的驱动程序来对所述寄存器写入和读取所述寄存器数据。
优选的,该一种程序调用方法,其中,所述步骤s2中,所述芯片内核通过所述服务请求程序,采用系统服务调用的方式调用所述驱动程序库中的驱动程序来对所述寄存器写入和读取所述寄存器数据。
优选的,该一种程序调用方法,其中,在所述线程模式下,所述芯片被允许从所述特权访问权限转换成所述非特权访问权限,并且被拒绝从所述非特权权限转换成所述特权访问权限。
一种芯片管理系统,适用于采用cortex-m类型的芯片内核的芯片,所述芯片内设置有存储保护单元;其中,所述芯片内核连接一寄存器;
通过所述存储保护单元可将所述寄存器设置为处于一特定访问模式下,于所述特定访问模式下,所述芯片内核只有在具有特权访问权限时才能对所述寄存器进行访问;
所述寄存器内保存有程序开发的寄存器数据;
所述芯片内核具有处理模式和线程模式两种工作模式,于所述处理模式下,所述芯片内核具有所述特权访问权限,于所述线程模式下,所述芯片内核具有所述特权访问权限和非特权访问权限;
所述芯片初始处于所述线程模式下;
所述芯片管理系统包括:
使能单元,连接所述存储保护单元,在用户启动用户程序之前,通过所述使能单元使能所述存储保护单元,以将所述外设寄存器设置为处于所述特定访问模式下,并且通过所述芯片内部设置的寄存器将所述芯片配置为处于所述非特权访问权限;
切换单元,当用户需要通过所述用户程序访问所述外设寄存器的寄存器数据时,所述切换单元通过一服务请求程序将所述芯片内核切换至所述处理模式,所述芯片内核被允许访问所述寄存器,以及
当用户完成对所述寄存器的访问后,所述切换单元将所述芯片内核切换回所述线程模式,所述芯片继续执行所述用户程序。
优选的,该一种芯片管理系统,其中,所述寄存器设有操作硬件的接口,所述寄存器通过所述接口与所述芯片内核连接,所述芯片内核通过所述接口对所述寄存器写入和读取所述寄存器数据来达到操作硬件的目的。
优选的,该一种芯片管理系统,其中,所述接口被设置为一驱动程序库;
所述芯片内核通过所述服务请求程序,采用系统服务调用的方式调用所述驱动程序库中的驱动程序来对所述寄存器写入和读取所述寄存器数据。
优选的,该一种芯片管理系统,其中,在所述线程模式下,所述芯片内核被允许从所述特权访问权限转换成所述非特权访问权限,并且被拒绝从所述非特权权限转换成所述特权访问权限。
一种芯片,其中,采用上述的程序调用方法进行工作。
一种芯片,其中,包括上述的芯片管理系统。
本发明的优点在于:
本发明可在用户使用cortex-m内核的芯片进行程序开发时,使用该方法可以缩短用户的开发时间,提高用户程序的稳定性、可靠性。用户程序无法直接操作外设寄存器,而是通过发起svc服务间接操作外设寄存器,操作外设寄存器的具体代码无需用户完成,可以避免用户操作外设寄存器时出错,用户无需了解芯片外设寄存器的具体细节,缩短开发时间,嵌入式产品的工作环境非常复杂,在异常恶劣的环境下可能导致程序运行异常,此方式可保证程序不会误操作对系统非常关键的外设寄存器,提高系统的安全性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1是本发明一种程序调用方法实施例的流程图;
图2是本发明一种芯片管理系统实施例的结构示意图;
图3是本发明一种程序调用方法实施例的流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。
本发明较佳的实施例中,根据现有技术存在的问题,现提供一种程序调用方法,应用于采用cortex-m类型内核的芯片中,具体可适用于cortex-m3内核的芯片中,同样可以适用于cortex-m4或者m7内核的芯片中,上述芯片中设置有用于对寄存器进行管理的存储保护单元(mpu)。
本发明的较佳的实施例中,该芯片中的芯片内核连接一寄存器,通过芯片中的存储保护单元11可将寄存器设置为处于一特定访问模式下,于特定访问模式下,芯片内核只有在具有特权访问权限时才能对寄存器进行访问;
寄存器内保存有程序开发的寄存器数据;
芯片内核具有处理模式和线程模式两种工作模式,于处理模式下,芯片内核具有特权访问权限,于线程模式下,芯片内核具有特权访问权限和非特权访问权限;
芯片内核初始处于线程模式下;
如图1所示,程序调用方法具体包括:
步骤s1,用户在运行用户程序之前,通过相应的驱动程序使能芯片中的存储保护单元,以将寄存器设置为处于特定访问模式下,同时将芯片内核设置为处于线程模式下,以及具有非特权访问权限;
步骤s2,当用户需要通过用户程序访问外设寄存器中的寄存器数据时,芯片内核通过一服务请求程序进入处理模式,并被允许访问寄存器;
步骤s3,当用户完成对寄存器的访问后,芯片内核被切换回线程模式,继续执行用户程序,并在用户需要通过用户程序访问寄存器中的寄存器数据时返回步骤s2。
具体地,本实施例中,上述寄存器初始被存储保护单元设定为只支持特权访问权限。在用户需要运行用户程序之前,该用户程序的驱动程序会对芯片内核的运行环境进行配置,配置过程中会将芯片内核设置为处于线程模式下,并且将芯片内核设置为非特权访问权限,随后再运行用户程序,此时芯片内核就不被允许访问上述寄存器。
当用户程序想要访问寄存器内部的寄存器数据时,用户程序需要首先向一个服务请求程序提出请求,并通过该服务请求程序将芯片内核切换至处理模式,以使得芯片内核处于特权访问权限下,此时芯片内核才能够被允许访问寄存器。上述服务请求程序可以采用系统服务调用(svc)的方式实现。
当用户程序完成对寄存器的访问之后,再将芯片内核切换回线程模式,此时因为使用的是之前的配置环境,因此芯片内核自然处于非特权访问权限下,无需重新设置权限。
本发明较佳的实施例中,寄存器设有操作硬件的接口,寄存器通过接口与芯片内核连接,芯片内核通过接口对寄存器写入和读取寄存器数据来达到操作硬件的目的。
本发明较佳的实施例中,接口被设置为一驱动程序库;
芯片内核通过调用驱动程序库中的驱动程序来对寄存器写入和读取寄存器数据。
本发明较佳的实施例中,步骤s2中,当芯片处于处理模式下时,芯片通过服务请求程序,采用svc调用的方式调用驱动程序库中的驱动程序来对寄存器写入和读取寄存器数据。。
本发明较佳的实施例中,在线程模式下,芯片内核被允许从特权访问权限转换成非特权访问权限,同时被拒绝从非特权访问权限转换成特权访问权限,从而避免芯片内核在线程模式下误访问寄存器。
本发明的较佳的实施例中,基于上文中所述的芯片管理方法,还提供一种芯片管理系统,适用于采用cortex-m类型的芯片内核的芯片,该芯片内核连接一寄存器,该芯片中还设置一用于对寄存器进行控制的存储保护单元(mpu);
如图2中所示,通过存储保护单元11可将寄存器设置为处于一特定访问模式下,于特定访问模式下,芯片内核只有在具有特权访问权限时才能对寄存器进行访问;
寄存器内保存有程序开发的寄存器数据;
芯片内核具有处理模式和线程模式两种工作模式,于处理模式下,芯片内核具有特权访问权限,于线程模式下,芯片内核具有特权访问权限和非特权访问权限;
芯片内核初始处于线程模式下;
具体地,如图2所示,芯片管理系统1包括:
使能单元12,连接存储保护单元11,在用户启动用户程序之前,通过使能单元12使能存储保护单元11,以将寄存器设置为处于特定访问模式下,并同时将芯片内核配置为处于非特权访问权限;
切换单元13,当用户需要通过用户程序访问寄存器的寄存器数据时,切换单元通过一服务请求程序将芯片内核切换至处理模式,芯片内核被允许访问寄存器,以及
当用户完成对寄存器的访问后,切换单元13将芯片内核切换回线程模式,芯片继续执行用户程序。
本发明较佳的实施例中,寄存器设有操作硬件的接口,寄存器通过接口与芯片内核连接,芯片内核通过接口对寄存器写入和读取寄存器数据来达到操作硬件的目的。
本发明较佳的实施例中,接口被设置为一驱动程序库;
芯片内核通过服务请求程序,采用系统服务调用的方式调用驱动程序库中的驱动程序来对寄存器写入和读取寄存器数据。
本发明较佳的实施例中,在线程模式下,芯片内核被允许从特权访问权限转换成非特权访问权限,并且被拒绝从非特权权限转换成特权访问权限。
本发明较佳的实施例中,还提供一种芯片,该芯片采用如上文中所述的程序调用方法进行工作。
本发明较佳的实施例中,还提供一种芯片,该芯片中包括如上文中所述的芯片管理系统。
具体地,如图3所示,本实施例中,在执行用户程序代码前,先使能mpu、进入非特权线程模式,再调用用户程序。用户程序在运行时无法直接操作寄存器,只能间接的通过发起svc调用,然后由svc处理程序完成操作寄存器的任务。
本发明的有益效果在于:
本发明可在用户使用cortex-m类型内核的芯片进行程序开发时,使用该方法可以缩短用户的开发时间,提高用户程序的稳定性、可靠性,用户程序无法直接操作寄存器,而是通过发起svc服务间接操作寄存器,操作寄存器的具体代码无需用户完成,可以避免用户操作寄存器时出错,用户无需了解芯片寄存器的具体细节,缩短开发时间,此方式可保证程序不会误操作对系统非常关键的寄存器,提高系统的安全性。
以上所述仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。