9178|23

62

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32特权级访问的问题 [复制链接]



MRS     R0, PRIMASK
CPSID   I
这两个指令应该是在特权级下才能访问的吧,在用户级下使用的话,产生BusFault的
但是,我在移植ucosii操作系统的时候,在任务切换时,切换到用户级 PSP下运行,运行到关中断函数时,以上两代码处不产生总线中断,也没产生别的异常。
是不是我在调试模式下的原因,还是我的处理器的故障,你们有没有遇到这种问题呢
谢谢各位!
此帖出自stm32/stm8论坛

最新回复

                                 我最初的问题,我在前面的 cm3内核权威指南中找到了论述,我也联系了该书的翻译者,他测试说在LPC1768上,用户级下 ,对特殊功能寄存器的访问也是如同NOP指令,也许是原文(英文版就有缺陷吧) (《The Defi nitive Guide to the ARM Cortex-M3》    Joseph Yiu   P37) In the user access level (Thread mode), access to the System Control Space, or SCS—a part of the memory region for confi guration registers and debugging components—is blocked. Furthermore, instructions that access special registers (such as MSR, except when accessing APSR) cannot be used. If a program running at the user access level tries to access SCS or special registers, a fault exception will occur. 对MOVT这个指令,在LPC1768执行时正常的,而在stm32上它就相当于NOP了。有些不明白,相同 的内核,相同的指令集,不同 的效果。  详情 回复 发表于 2010-7-9 20:06
点赞 关注
 

回复
举报

58

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 特权级和用户级跟使用MSP还是PSP是两回事,特权级和用户级都是既可以使用MSP也可以使用PSP。ucosii的官方移植版本是整个代码都运行在特权级。
此帖出自stm32/stm8论坛
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢楼上的回答,我也知道ucosii的官方移植版本是整个代码都运行在特权级。
在任务切换的时候,切换到了用户级+PSP下了,这个是可以实现的,切换时在PendSV的例程中实现的,我加入了   
MRS     R0, CONTROL
    ORR     R0, R0, #0x01                                      ;//用户级      
    MSR     CONTROL, R0
就切换到用户级了,切换到用户级后,在执行 OS_ENTER_CRITICAL()时,没有出现异常,代码可以执行,但不修改特殊寄存器,也就是没执行效果。
我不知道是我板子的问题呢,还是有别的什么问题,还是我的理解有问题。
此帖出自stm32/stm8论坛
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 


我在论坛中找到了以下答案:
在特权状态下才能执行的指令称为特权指令,由特权指令完成的操作当然叫特权操作了。例如x86,在用户状态下执行io指令只相当与nop指令,如果程序运行在用户态,要执行特权操作只有请求操作系统协助才能完成。
   在单片机中,ARM就有特权指令,例如操作cpsr和spsr的指令,用户态执行这些指令也相当于nop。不过,很多人写程序时并不使用用户态,而是直接让程序运行在特权态,所以就感觉不出来。另外,很多嵌入式操作系统也不切换处理器状态,例如ucosii。
    无论哪一种操作系统,特权保护都是依靠硬件才能实现的,包括windows,因为操作系统并不能拒绝用户程序执行任何一种指令,但是cpu可以根据工作状态选择性地拒绝某些指令的执行。
    楼上学习时要注意哪些功能是cpu提供的,哪些功能是操作系统提供的。
https://bbs.eeworld.com.cn/icview-21795-1-1.html的三楼
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
在cm3内核权威指南中
(第三章,操作模式这节中)
在线程模式+用户级下,对系统控制空间(SCS)的访问将被阻止——该空间包含了配
置寄存器s 以及调试组件的寄存器s除此之外,还禁止使用MSR 访问刚才讲到的特殊功能寄存器——除了APSR 有例外。谁若是以身试法,则将fault 伺候。

(还用第七章异常  总线Flault小节中)
哪些因素会导致AHB 回复一个错误信号?
AHB 回复的错误信号会触发总线fault,诱因可以是:
z 企图访问无效的存储器 region。常见于访问的地址没有相对应的存储器。
z 设备还没有作好传送数据的准备。比如,在尚未初始化SDRAM 控制器的
时候试图访问SDRAM。
z 在企图启动一次数据传送时,传送的尺寸不能为目标设备所支持。例如,
某设备只接受字型数据,却试图送给它字节型数据。
z为某些原因,设备不能接受数据传送。例如,某些设备只有在特权级下
才允许访问,可当前却是用户级。


根据以上两点,在用户级下执行MRS     R0, PRIMASK     这条指令,应该是进入总线异常,
所以我就不明白了
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
用户级执行特权级指令,是否产生fault可能跟具体芯片有关系。

ucosii的切换任务不能切换到用户级,因为ucosii的一些系统调用中存在特权级访问,比如挂起pendSV和开关中断,它的正常工作是以工作在特权级为前提的。
此帖出自stm32/stm8论坛
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

7
 
busfault是总线错误,在访问某设备或存储器的时候才可能发生,在用户级执行特权级指令肯定不会引起busfault。
注意“因为某些原因,设备不能接受数据传送。例如,某些设备只有在特权级下
才允许访问,可当前却是用户级。”
是“设备”,执行一条指令不是访问设备。
此帖出自stm32/stm8论坛
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

8
 


谢谢各位的关注,
我使用的是stm32系列的处理器,实验的结果就是对特殊寄存器使用MRS、MRS的访问,在特权级下,这些指令时正常执行 的;在用户级下,这些指令就相当于NOP。
而在用户级下,对系统控制空间(SCS)的访问会产生busfault,精确数据访问错误。
这就是我实验的结果。
我觉得可能跟具体芯片有关系。 但相同的内核对指令的在不懂系列的芯片中应该一样吧。
7楼的观点,如果权威指南中的论述时正确的,就算不是产生总线异常,也应该产生别的异常吧,至少也是个硬fault吧,

6楼的看法,它的正常工作是以工作在特权级为前提的。 只是对必须用特权级访问的指令和系统控制空间,以及MPU保护的空间是必须特权级保护的访问和执行的,只要对他们访问时切换到特权级就可以正常工作了。
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

9
 
回楼上
权威指南上有哪一条能够说明“就算不是产生总线异常,也应该产生别的异常吧,至少也是个硬fault
”?
任务切换是一个系统调用,不是用户级程序,任务切换还要切换到用户模式有什么意义吗?
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

10
 
回楼上
任务切换是一个系统调用,不是用户级程序,任务切换还要切换到用户模式有什么意义吗?
可以对系统的稳定性有作用的,对操作系统中的全局变量和静态变量的访问,如果设为特权级访问,这个要配合MPU来使用,而我们编写的应用程序(任务)在用户级下运行,那么就是某个任务出错,也不会危害到操作系统的变量(全局和静态的),比如用户级下对系统控制空间的访问时禁止的。
此帖出自stm32/stm8论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 STM32没有MPU。楼上说的情况是保护模式操作系统,需要硬件的支持,硬件上应该有MMU或MPU。而UCOS本身就是实模式操作系统,只有线程的概念而没有进程的概念。由此可见,UCOS作为软件,不支持你所说的保护模式,STM32作为硬件,没有MPU和MMU,也没法支持保护模式。所以感觉在运行系统调用时切换到用户模式是多此一举。而且“系统调用”顾名思义,是系统对硬件进行操作, 而不是用户,本身就应该属于特权级操作。在运行系统调用的时候切换用户级模式不符合操作系统原理。
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

12
 


STM32是没有MPU的,可是别的系列的有MPU啊,我的意思是在任务切换的时候,切换到用户级,在调用关键的系统程序的时候切换的特权级,来对系统的资源实施保护
还有一点,是不是我使用的编译环境的问题呢,我使用的是IARv5.30
还用就是他不执行    //MOVT.W  R2,   #0x0800R2,   #0xXXX 这个指令,这是对R2高16位赋值,第16位没影响。
执行到MOVT.W 指令的时候,如同执行NOP指令
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

13
 
“而我们编写的应用程序(任务)在用户级下运行,”
这个可以,但比较麻烦,尤其是你的任务里有开关中断等操作的时候。
此帖出自stm32/stm8论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

14
 
在任务切换的时候,切换到用户级,在调用关键的系统程序的时候切换的特权级,来对系统的资源实施保护
对开关中断的实现也不是很难的,不是有SVC吗,也是很容易实现的
此帖出自stm32/stm8论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

15
 
                                 在任务里如果有一段代码需要在关中断的情况下运行,并且要运行在用户级,貌似就没法做到,用户级并且关中断,没办法恢复为特权级,因为关中断时不响应SVC
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

16
 
                                 在关中断之前 执行一条SVC 在SVC中执行特权级切换和关中断操作,就可以实现了
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

17
 
                                 楼上想的太简单。之后怎么开中断?
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

18
 
                                 开中断和关中断时成对出现的 既然关中断后是在特权级下执行了,那么关中断的时候不就可以先执行SVC 在开中断,开了后就可以响应SVC了(SVC的优先级要高),在例程中切换到线程 用户级
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

19
 
                                 在15楼我说的是“在任务里如果有一段代码需要在关中断的情况下运行,并且要运行在用户级”,是说这段需要关中断的代码要运行在用户级。你说的那是关中断后运行在特权级。
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

20
 


关中断的情况下运行,  并且要运行在用户级,那你用户级的程序
关中断的目的是什么啊,不就是这一段程序不可以被中断吗,要保持原子性。也就是在访问一些临界资源的时候应啊,我们为什么不可以把这些临界资源进行保护下访问呢(也就是在特权级下访问),这样对理解资源有些很好的保护了(因为它们被限制只能特权访问了)。
我们还有必要在用户级下访问临界资源吗?? 为什么不给他们一些保护呢,在关中断+特权级下运行。
你关中断只是为了临界资源的利用,你完全可以使用信号量、互斥量等任务间的通信来实现的,也不要关中断吧,关中断对实时操作系统的实时性有很大的影响的。不利于实时性的实现
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表