当ARM芯片启动或复位时,会进入默认的模式——异常模式。在异常模式下,所有中断请求都会被忽略,CPU开始执行重置向量处的代码。此时,CPU会将程序计数器(PC)指向内存地址0x0000_0000,开始执行启动代码。此后,CPU会在执行启动代码时进入特权模式,处理一些系统初始化工作。而当在特权模式下需要执行用户代码时,会切换到用户模式。
ARM芯片有多种特权级别,包括特权模式(privileged mode)、用户模式(user mode)和系统模式(system mode)。特权模式具有最高的特权级别,允许访问操作系统内核和其他系统资源。而用户模式则只允许访问分配给它们的资源。在用户模式下,程序无法直接访问系统资源,例如底层硬件、内存和寄存器。这有助于防止非法访问系统资源。
在ARM芯片启动时,程序会进入特权模式进行系统初始化工作,直到操作系统可以在用户模式下运行。当需要在用户模式下执行应用程序时,需要使用相应的系统调用(例如Linux的fork()和exec()函数)显式地切换到用户模式。在内核向应用程序返回控制权时,又会切回到特权模式。
另外,当处理器出现故障或错误时,也可能会从特权模式转换到用户模式。这种情况下,ARM处理器会将处理器模式(CPSR寄存器的低5位)设置为用户模式,以防止错误代码对系统造成损害。此时,用户程序可以进行一些基本的操作,例如重新启动设备或打印错误日志。
ARM芯片启动时会默认进入异常模式,之后会进入特权模式进行系统初始化工作。当需要执行用户程序时,需要显式地切换到用户模式。在特权模式下出现故障或错误时,也可能会切换到用户模式。用户模式只允许程序访问分配给其的资源,确保系统的安全和稳定。