13.0-uC/OS-III上下文切换
1.当uC/OS-III转向执行另一个任务的时候,它保存了当前任务的
CPU寄存器到堆栈。并从新任务的的堆栈中CPU寄存器载入CPU。
这个过程叫做上下文切换。
上下文切换需要一些开支。 CPU的寄存器越多, 开支越大。
上下文切换部分的代码是移植uC/OS-III时需编写的。该部分代码
要适用于处理器。这些代码被放在C和汇编语言文件中: OS_CPU.H,
OS_CPU_C.C, OS_CPU_A.ASM。
2.在uC/OS-III中,任务切换时的堆栈设置类似于中断发生时的那
样,所有的CPU寄存器都被保存。我们假定任务堆栈中的信息将要
被载入到CPU中,

TSP指向任务堆栈中最后一个被保存的寄存器。程序指针寄存器
和状态寄存器是最先被保存在任务堆栈中。事实上,当中断发生时这
些是被CPU自动执行的。其它的寄存器通过软件被压入任务堆栈,
TSP不会被保存到堆栈,但会被保存到任务的TCB。
ISP指向当前中断堆栈的顶部。当中断服务程序被执行时,处理
器把R14"作为堆栈指针用于指向函数和局部参数。
3.有两种上下文切换方式:一个是任务级,一个是中断级。任务级
切换通过调用OSCtxSw()实现,实际上它是被宏OS_TASK_SW()调用
的。中断级切换通过调用OSIntCtxSw()实现。它是用汇编语言写的,
保存于OS_CPU_A.ASM。
4.OSCtxSw()
当有一个高优先级就绪任务需要被执行,任务级调度器会调用
OSCtxSw()。
5.OSIntCtxSw()
在ISR中就绪了高优先级任务B, ISR返回时将不会回到中断前的任
务A, 而是直接转向到执行高优先级任务B。 此时, 由于中断产生时
已经将任务A的状态保存在任务A的堆栈中,所以ISR返回时无需
再保存任务A的状态,而是直接载入任务B的CPU寄存器到硬件
CPU寄存器中即可。
上下文切换包括两部分内容,保存旧任务的内容,载入新任务的
内容。
任务级切换时, 通过调用OSSched()实现。 中断级切换时, 通过调
用OSIntExit()实现。
OSSched()中调用OSCtxSw()实现上下文切换。 OSIntExit()中调用
OSIntCtxSw()实现上下文切换。然而, OSIntCtxSw()只需用做上下文
切换的第二部分,因为中断时被中断任务的CPU寄存器已经被保存
到被中断任务的堆栈中了。
13.0-uC/OS-III上下文切换的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- uC/OS - III 移植 IAR平台
关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...
- VMware15安装MAC(MAC OS 10.13)(OS X 10.14)原版可升级最新可解锁macOS Unlocker3.0(OS X 10.13)
目录树 1.1.2安装环境: 1.1.3所需资源: 1.1.4 Unlocker 3.0解锁 1.1.5 配置环境 1.1.6开始安装 1.1.7开启虚拟机进入MAC安装界面 1.1.8 macO ...
- 第一篇 HTML5打包APP之VMware15安装MAC(MAC OS 10.13)(OS X 10.14)原版可升级最新可解锁macOS Unlocker3.0(OS X 10.13)
1.1.2安装环境: 1.1.3所需资源: 1.1.4 Unlocker 3.0解锁 1.1.5 配置环境 1.1.6开始安装 1.1.7开启虚拟机进入MAC安装界面 1.1.8 macOS 10.1 ...
- CrossOver 13.0 发布,Windows 模拟器
允许在 Linux 和 OS X 平台运行 Win32 程序的 CrossOver 套件发布 13.0 版本,带来了完全重构的 3D 处理流程,将大幅度提高游戏性能. Linux 平台相关变化有: 带 ...
- uC/OS II原理分析及源码阅读(一)
uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...
- 关于Quartus II 13.0对应开发NIOS II软件程序时报错Symbol 'NULL' could not be resolved问题的解决方法
关于Quartus II 13.0对应开发NIOS II软件程序时报错Symbol 'NULL' could not be resolved问题的解决方法 近期在评估使用NIOS II处理器进行项目的 ...
- uc/os任务创建
问题描述: uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...
- uC/OS 的任务调度解析 (转)
uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
随机推荐
- 您还差宝贝一张语文教学光盘!教你如何制作ISO文件
1 大家没有发现 宝宝初上小学无法专心地做作业.读书? 我家的宝贝就是这样 做作业时 总是东搞搞,西弄弄 完全无法专心 再不就是不耐心 读一遍课本就觉得累 读三两遍就说学习是个苦差事儿 2 一直以来 ...
- 在WPF中的Canvas上实现控件的拖动、缩放
如题,项目中需要实现使用鼠标拖动.缩放一个矩形框,WPF中没有现成的,那就自己造一个轮子:) 造轮子前先看看Windows自带的画图工具中是怎样做的,如下图: 在被拖动的矩形框四周有9个小框,可以从不 ...
- BizTalk Map 累积连接字符串
更多内容请查看:BizTalk动手实验系列目录 BizTalk 开发系列 BizTalk 培训/项目开发/技术支持请联系:Email:cbcye ...
- ASP.NET CORE 中用单元测试测试控制器
之前用ASP.NET CORE做的项目 加了一个新功能,数据库加了个字段balabala.... 更新到服务器上,新功能测试正常,然后就没管了..... 今天客户说网站有BUG,某个页面打开后出错了, ...
- pandas DataFrame(5)-合并DataFrame与Series
之前已经学过DataFrame与DataFrame相加,Series与Series相加,这篇介绍下DataFrame与Series的相加: import pandas as pd s = pd.Ser ...
- Odoo 进销存报表现已开源
根据会计区间或自定义查询时间段,对仓库的产品出入库情况进行查看: 模块地址参见内部群公告.
- wamp 3.0.6(apache 2.4.23) 403 forbidden 解决办法
https://www.cnblogs.com/airbreak/p/6369764.html
- Sword libcurl回调函数相关知识
libcurl响应回调函数说明 libcurl在默认情况下,回调里面会将数据分段的返回,不会一下子将发送端的数据全部塞到回调函数里面, 经过源码分析回调函数和curl_easy_perform是在 ...
- JSP之连接SQL Server
1.在SQL Server中启用sa(请参考本人博客:http://www.cnblogs.com/zhouhb/archive/2011/02/15/1955324.html)2.在SQL Serv ...
- java把一个list分割成多个list存入map中(实例)
这都是最近我写工具遇到的一些点, 这些点就是指我在网上没搜到答案,然后实际上我为此花费了时间的 public static void main(String[] args) { List<Str ...