Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4463117
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: 嵌入式

2011-06-16 22:39:41

    M3处理器支持两种处理器的工作模式,还支持两级特权操作

    两种工作模式: 处理模式 handler mode
                  线程模式 thread mode。
    引入两个模式的本意,在于区别普通应用程序代码和异常服务程序,包括中断服务程序代码

    M3的特权分级 : 特权级  用户级,这可以提供一种存储器访问的保护机制,这也是一个基本的安全模型。

    当处理器运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级,但是异常服务程序必须在特权模式下执行。复位后,处理器默认进入线程模式,特权级访问。在特权级下,程序可以访问所有的存储器空间(除非被MPU设置禁用) ,并且可以执行所有指令。

                      特权级            用户级
                  -----------------------------------
异常程序代码      |    处理模式    |  x错误的用法   |
                  -----------------------------------
主应用程序代码    |    线程模式    |   线程模式     |


    特权等级和栈指针的选择均有CONTROL负责,当CONTROL[0]=0=选择特权级,在异常处理的始末,只发生了处理器模式的转换
    从 线程模式(特权级) -->处理模式(特权级)---> 线程模式(特权级)

   但若CONTROL[0]=1, 线程模式+用户级,则在中断响应的始末,处理器模式和特权等级都要发生变化
    从 线程模式(用户级) --> 处理模式(特权级) --> 线程模式(用户级)


    CONTROL[0]只有在特权级下才能访问。用户级的程序若想进入特权级,通常都是使用一条系统服务呼叫指令SVC System Service Call来触发SVC异常,该异常的服务程序可以视具体情况而修改CONTROL[0]





阅读(2503) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~