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中断,那么这个是不是任务切换呢?在我的理解当中,我个人觉得,其实这也是一次任务切换。

      

  • 相关阅读:
    C语言打印记事本内搜索字符串所在行信息
    原创:C语言打开、下载、删除网页,统计网页字符个数
    JAVA GUI编程学习笔记目录
    13.JAVA之GUI编程将程序打包jar
    12.JAVA之GUI编程打开与保存文件
    11.JAVA之GUI编程菜单
    10.JAVA之GUI编程弹出对话框Dialog
    php中的一些不常见的问题foreach/in_array[开发篇]
    微软职位内部推荐-Senior SDE
    微软职位内部推荐-SDE II
  • 原文地址:https://www.cnblogs.com/lihaiping/p/2722817.html
Copyright © 2011-2022 走看看