|
在配套《ARM 微控制器基础与实战》里的任务切换是通过 SWI 实现的.SWI 会使 CPU 进入! R- g7 { k: B( R# s
管理模式.同时 CPU 自动将任务的 CPSR 保存到管理模式的 SPSR 中.
8 h$ x, l: I- t; {" M- e) A8 {0 wSWI 程序还保存了一些寄存器到管理模式的堆栈中.然后任务切换程序会在管理模式
, h7 |% [1 J, a/ [3 n7 Y& R和系统模式间来回切换,目的是把保存在管理模式堆栈的寄存器内容拷贝到任务的堆栈 H4 u! p" G) `# _& m* d( P; }, s
中(注意:任务是运 行在用户模式或系统模式的,这两个模式使用同一个 SP,这时的" a$ q! i! r. o, n6 F# y) p
系统模式的 SP 指向的就是任务的堆栈),也会将管理模式的 SPSR 拷贝到任务堆栈(注意6 B3 E( x, j+ X& O& o) `9 F1 j
管理模式的 SPSR 就是在执行 SWI 时 CPU 自动保存的任务运行时的 CPSR,它记录了任务! K; {$ F5 c" b& N3 o
运行的 CPU 模式和其他的运行状态信息).最后把任务模式 SP 保存到任务的任务控制块+ P- T0 y4 F9 g a% w8 |
中(注意此时 CPU 已经是运行在系统模式下的了).以上大致就是 uC/OS-II 中所说的保
& c7 w2 k. u& a0 X, \# u' `存任务运行环境的工作. |
|