zoukankan      html  css  js  c++  java
  • 话说uCOSII任务切换

      经过一段时间的学习,对系统的任务切换算是有了那么一点点的认识吧,只所以写这篇文章,是因为我想对自己的一些见解做一个备忘,如果看到这篇文章的人,觉得我说的有什么不对,那么请指正,我会感激不尽的。其实这也是为什么很多系统选择开源的原因吧,希望搜集广大共同学习者的意见,大家共同提升。

      首先说一下这个任务调度函数OS_Sched (void)吧,任务调度函数的的主要任务是找出优先级最高的任务,然后触发PendSV中断。而真正的任务任务切换,进行偷梁换柱就是在PendSV的中断函数里面完成的,在这个中断函数里面,主要进行任务的进栈和出栈,把CPU里面的寄存器内容换掉,即把事发当场的现场改变成要切换任务的现场,在中断进行返回的时候好让另外一个任务运行。这就是所谓的任务切换。。。

      然后OS_Sched (void)函数主要被那些函数进行调用呢?在任务要给任务调度器开锁的时候会调用OS_Sched (void),在时钟节拍中断服务函数中返回时也会调用OS_Sched (void),还有在某个任务的执行过程中创建一个任务,OS_Sched (void)也会被调用,删除任务的时候也会调用OS_Sched (void),改变任务优先级的时候,挂起任务,恢复任务等等,......,因为uCOS是一个实时的抢占式系统,总是执行最高优先级的任务,所以当要进行任务切换的时候,就会调用OS_Sched (void)。

      还有一个问题是,在OSStart()中,启动多任务的时候,也触发了一个PendSV中断,那么这个是不是任务切换呢?在我的理解当中,我个人觉得,其实这也是一次任务切换。

      

  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/lihaiping/p/2722817.html
Copyright © 2011-2022 走看看