硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5585|回复: 2
收起左侧

[μCOS-III] 【问题集锦】ucos是如何在中断中实现任务切换的

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116837
QQ
发表于 2014-3-21 21:22:34 | 显示全部楼层 |阅读模式
如果一个低优先级的任务在执行的过程中发生中断,在中断中执行函数OSIntExit()是怎么切换到高优先级任务的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116837
QQ
 楼主| 发表于 2014-3-21 21:22:56 | 显示全部楼层
1. 通过函数OSIntExit()可以实现中断级的任务切换。获得需要执行的最高优先级任务后,如果需要任务切换,会在这个函数里面使能PendSV。
    退出这个中断后就会进入到PendSV中断里面。这个中断里面实现任务的切换,也就是此任务的保存和下一个任务的恢复
2. 简单的举一个例子:TaskA和TaskB,TaskA的优先级低。
   
    TaskA 在执行        (任务中是使用的PSP堆栈指针,相应寄存器会通过PSP保存到任务堆栈)
                  ---------------------------------------------------------------------------------------------------------------------->
                                                                                                                                         发生USART中断,进入中断后使用MSP堆栈指针,执行完中断函数后,执行
                                                                                                                                         OSIntExit(),发现有高优先级的TaskB需要执行,然后使能PendSV。
                                                             <--------------------------------------------------------------------------
                                                              | (退出USART中断后要继续的使用PSP,此时已经恢复TaskA发生中断前的现场)
                                                              | (由于我们已经使能了PendSV中断,此时不会再回到TaskA)
                                                              |
                                                              v
                                                              进入PendSV中断,自动入栈的寄存器已经入栈到TaskA的堆栈里面,然后手动入栈相关寄存器到TaskA的任务堆栈
                                                              然后从TaskB的任务堆栈中恢复相关数据到寄存器中,也就是恢复TaskB的现场
                <--------------------------------------------

    TaskB开始执行
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2014-9-28 15:02:07 | 显示全部楼层
RTX做法差不多,当在中断中调用相关的isr可用api,也是设置了PENDSV中断
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-7-7 19:24 , Processed in 0.312914 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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