硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2757|回复: 12
收起左侧

UCOSIII 特权级和用户级切换问题

[复制链接]

22

主题

93

回帖

159

积分

初级会员

积分
159
发表于 2017-6-27 13:21:30 | 显示全部楼层 |阅读模式
大家知道上电初始化后片子是处于特权级线程,使用的MSP.那么使用UCOSIII的时候,是在什么时候切换成用户级和用PSP的呢,在哪个代码里面?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2017-6-27 13:46:02 | 显示全部楼层
uCOS-III没有用户级和特权级之分。全部是特权级。
回复

使用道具 举报

22

主题

93

回帖

159

积分

初级会员

积分
159
 楼主| 发表于 2017-6-27 14:07:55 | 显示全部楼层
谢谢,特权级双堆栈? 在哪里初始化的PSP?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2017-6-27 14:19:00 | 显示全部楼层
可以学习下,我们早期做的uCOS-III教程这个部分:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=1788

QQ截图20170627141359.png
回复

使用道具 举报

22

主题

93

回帖

159

积分

初级会员

积分
159
 楼主| 发表于 2017-6-27 14:31:49 | 显示全部楼层

回 eric2013 的帖子

eric2013:可以学习下,我们早期做的uCOS-III教程这个部分:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=1788


(2017-06-27 14:19)
好的。另外再请教下__set_CONTROL(0);这个函数是设置成特权级模式?还是设置成用户级模式?多谢版主
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2017-6-27 14:54:19 | 显示全部楼层
QQ截图20170627145116.png
回复

使用道具 举报

22

主题

93

回帖

159

积分

初级会员

积分
159
 楼主| 发表于 2017-6-27 15:02:13 | 显示全部楼层

回 eric2013 的帖子

eric2013: (2017-06-27 14:54)
这个表格我知道的。就是不知道__set_CONTROL(0);括号里的0是指的是CONTROL寄存器的bit0,还是把control寄存器设置成0值?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2017-6-27 15:05:24 | 显示全部楼层

回 shibinjie 的帖子

shibinjie:这个表格我知道的。就是不知道__set_CONTROL(0);括号里的0是指的是CONTROL寄存器的bit0,还是把control寄存器设置成0值? (2017-06-27 15:02) 
整个寄存器。
回复

使用道具 举报

22

主题

93

回帖

159

积分

初级会员

积分
159
 楼主| 发表于 2017-6-27 15:29:39 | 显示全部楼层

回 eric2013 的帖子

eric2013:整个寄存器。 (2017-06-27 15:05)
有个很奇怪的现象,我写的一个裸机程序,xx是定义的一个无符号32位全局变量,初始值位0x10;调用xx = __get_CONTROL();后,xx的值还是x010;如果先__set_CONTROL(0);,再调用xx = __get_CONTROL();xx的就变成了0x04,xx的值不应该是0吗(特权级模式,MSP)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2017-6-27 15:38:12 | 显示全部楼层

回 shibinjie 的帖子

shibinjie:有个很奇怪的现象,我写的一个裸机程序,xx是定义的一个无符号32位全局变量,初始值位0x10;调用xx = __get_CONTROL();后,xx的值还是x010;如果先__set_CONTROL(0);,再调用xx = __get_CONTROL();xx的就变成了0x04,xx的值不应该是0吗(特权级模式,MSP) (2017-06-27 15:29) 
F4系列还有一个CONTROL[2],也就是bit2也可以设置的。
回复

使用道具 举报

22

主题

93

回帖

159

积分

初级会员

积分
159
 楼主| 发表于 2017-6-27 15:48:10 | 显示全部楼层

回 eric2013 的帖子

eric2013:F4系列还有一个CONTROL[2],也就是bit2也可以设置的。 (2017-06-27 15:38)
哦,难怪。谢谢
回复

使用道具 举报

22

主题

93

回帖

159

积分

初级会员

积分
159
 楼主| 发表于 2017-6-27 16:30:10 | 显示全部楼层

回 eric2013 的帖子

eric2013:F4系列还有一个CONTROL[2],也就是bit2也可以设置的。 (2017-06-27 15:38)
再请教个问题,一个裸机程序,照理说上电复位后就一直运行在特权模式下,__set_CONTROL(1);应该就可以进入用户级模式,但是发现一执行__set_CONTROL(1);就进入了硬fault了,这是怎么回事?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2017-6-28 01:40:58 | 显示全部楼层

回 shibinjie 的帖子

shibinjie:再请教个问题,一个裸机程序,照理说上电复位后就一直运行在特权模式下,__set_CONTROL(1);应该就可以进入用户级模式,但是发现一执行__set_CONTROL(1);就进入了硬fault了,这是怎么回事? (2017-06-27 16:30)
进入用户级模式后,很多系统寄存器都可以访问,访问就进入硬件异常:

2017-06-28_013926.png
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 07:05 , Processed in 0.337817 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表