找回密码
 注册
关于网站域名变更的通知
查看: 293|回复: 3
打印 上一主题 下一主题

切换后新任务的运行是不是必须在管理模式下?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-12-29 10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
新旧任务级的切换是不是必须在管理模式下切换,切换后新任务的运行是不是必须在管理模式下4 y- [3 c) N. p

该用户从未签到

2#
发表于 2022-12-29 11:27 | 只看该作者
在配套《ARM 微控制器基础与实战》里的任务切换是通过 SWI 实现的.SWI 会使 CPU 进入
$ `& b( J+ q8 B2 c管理模式.同时 CPU 自动将任务的 CPSR 保存到管理模式的 SPSR 中.+ @( ^; t6 H! P! }+ R
SWI 程序还保存了一些寄存器到管理模式的堆栈中.然后任务切换程序会在管理模式3 ~1 e( F& L! J/ y3 g$ m
和系统模式间来回切换,目的是把保存在管理模式堆栈的寄存器内容拷贝到任务的堆栈0 W. Z% P% x9 E  E0 a1 N
中(注意:任务是运 行在用户模式或系统模式的,这两个模式使用同一个 SP,这时的; q+ ?( O2 O/ Z6 F* a
系统模式的 SP 指向的就是任务的堆栈),也会将管理模式的 SPSR 拷贝到任务堆栈(注意+ D  B' B8 ~! \7 I% t
管理模式的 SPSR 就是在执行 SWI 时 CPU 自动保存的任务运行时的 CPSR,它记录了任务
4 Y, R# _6 L% l7 ?8 H  {; G运行的 CPU 模式和其他的运行状态信息).最后把任务模式 SP 保存到任务的任务控制块
: d4 j5 [0 D) \# N* X2 X- D0 g& D中(注意此时 CPU 已经是运行在系统模式下的了).以上大致就是 uC/OS-II 中所说的保
. p% V+ r/ }; k# L5 y3 {0 F* ?" w+ g存任务运行环境的工作.

该用户从未签到

3#
发表于 2022-12-29 13:35 | 只看该作者
任务的恢复运行就比较好理解了.
* ^7 f2 P1 [( A! ]: T; fCPU 还在系统模式下.程序从任务控制块中得到任务的堆栈指针.(OSIntCtxSw_1 的第一句)将这个指针的值加上一定的偏移量保存到 SP 中.为什么要加上一定 的偏移量呢 因为这时任务的堆栈中除了保存任务运行时的数据外还保存了任务的上下文,即任 务切换时保存的 CPU 寄存器等内容.而我们恢复任务等一下是在管理模式下进行的,用的是管理模式的堆栈指针.等恢复任务后 CPU 就开始执行任务
3 ~) y+ B* f& J- `+ d, c代码了.我们已经没有机会再修改系统模式下的 SP 值了.所以在这个时候就应该对 SP进行调整.调整的大小就应该是所保存的上下文占用的大小.从堆栈中恢复 LR 的值.同样的道理,管理模式和系统模式使用不同的 LR,在切换到管理模式之前,必须先在系统模式下恢复任务运行时的 LR.(OSIntCtxSw_1 的第三句)接下来就切换到管理模式了.(OSIntCtxSw_1 的第四句)使管理模式 SP 指向任务堆栈(第五句)注意这是没调整过的任务 SP,也就是保存了上下文环境的 SP.
. X) \8 o4 F% k接下来的事情就真的很简单了.从堆栈中恢复出保存的东西.先是 OSEnterSum,然后是任务的 CPSR (注意任务的 CPSR 就是进入 SWI 时由 CPU 自动保存到管理模式的 SPSR中的,所以此时也是恢复到管理模式的 SPSR 中)最后一句就是典型的中断返回语句了.
/ b9 J+ D3 }4 O  ~. Y( l恢复寄存器,恢复 PC,加了一个^号意味着同时将 SPSR 拷贝到 CPSR 中.

该用户从未签到

4#
发表于 2022-12-29 13:48 | 只看该作者
回答问题:
* _! p  @0 F6 |* |: K/ ?4 F! @5 z$ _切换前任务是运行在什么环境下的(包括 CPU 模式,所有的寄存器),任务切换后任务就是运行在 什么环境下的.对任务来说,什么也没改变.只有 PC 值指向了下一条指令,哈哈。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-20 13:45 , Processed in 0.062500 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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