完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
移植μc/os时,任务级切换函数即OSCtrSw,中断级任务切换函数为OSIntCtrSw,两者的功能都是设置PendSV中断,从而在PendSV中断服务程序中真正实现任务的切换。而PendSV中断服务程序的过程就是先保存CPU的R4-R11寄存器,之后再出栈即将运行的任务的R4-R11,从而实现任务切换。那么这两个任务切换函数过程不是一样的???为什么书上说OSIntCtrSw()由于之前已经发生过中断,故CPU的寄存器已经保存入栈,只需要出栈即将运行任务的R4-R11即可??OSIntCtrSw和OSCtrSw进入的是同一个PendSV中断服务函数,为什么OSCtrSw时进入PendSV服务程序得先保存R4-R11,而OSIntCtrSw可以省略这一步?因为他们进入的是同一个PendSV服务程序,那么它们俩按照程序的一条一条执行不都是先应该保存R4-R11吗??难道是当OSIntCtrSw时,执行PendSV服务程序会可以跳过保存R4-R11这个步骤,而只执行出栈即将运行任务的R4-R11这个程序段???
|
|
相关推荐
5个回答
|
|
|
PendSV 是最低优先级,在你前面的中断发生的时候你已经压栈一遍了。如果你再压栈,那就不对了。所以你只需要做出栈。
任务切换的时候就没有这个问题,PendSV是第一个发生的中断 |
|
|
|
|
|
一个是任务切换,一个是中断嵌套
|
|
|
|
|
|
回复第 2 楼 于2013-09-29 11:23:47发表:
PendSV 是最低优先级,在你前面的中断发生的时候你已经压栈一遍了。如果你再压栈,那就不对了。所以你只需要做出栈。 任务切换的时候就没有这个问题,PendSV是第一个发生的中断 那么SysTick中断时硬件都自动保存了哪些寄存器呢???是xpsp,pc,lr??还是cpu的所有的通用寄存器都保存了???要是都保存了,那么进入pendsv中断后前半段的保存r4-r11的程序是略过,而直接进行下面剩余的程序?? |
|
|
|
|
|
回复第 8 楼 于2013-09-29 21:18:42发表:
回复第 7 楼 于2013-09-29 21:08:44发表: 回复第 6 楼 于2013-09-29 20:30:24发表: 回复第 2 楼 于2013-09-29 11:23:47发表: PendSV 是最低优先级,在你前面的中断发生的时候你已经压栈一遍了。如果你再压栈,那就不对了。所以你只需要做出栈。 任务切换的时候就没有这个问题,PendSV是第一个发生的中断 那么SysTick中断时硬件都自动保存了哪些寄存器呢???是xpsp,pc,lr??还是cpu的所有的通用寄存器都保存了???要是都保存了,那么进入pendsv中断后前半段的保存r4-r11的程序是略过,而直接进行下面剩余的程序?? 处理器只保存那几个特殊的和R0到R3。R0到R3是为了传参,这就是为啥你要在任务调度的时候自己实现R4到后面的,除非你能保证整个系统的函数传参都不大于这个范围,那你就可以不做这部分保存r4和后面的。 事实上咱们写程序也不会添加很多参数,一般都是包成结构体,传个地址啥的,还能保证函数的可重入。 建议你看看那本 , 里面这部分讲的很详细,尤其是关于PendSV,有专门的一章 中断时硬件只是保存了xpsr,pc,lr,r12,r0-r3,那么中断级别任务切换时,调用OSIntCtrSw进入PendSV中断服务程序时不也得进行r4-r11的保存??可是为什么书上说OSIntCtrSw()由于之前已经发生过中断,故CPU的寄存器已经保存入栈,只需要出栈即将运行任务的R4-R11即可?? 大哥,R4和后面的寄存器都没变过,当然直接用了 |
|
|
|
|
|
SysTick中断是肯定不会去保存R4到R11的
PendSV中断服务程序并不一定每次都去保存R4到R11。 你仔细看一下汇编,里面有OSPendSV_nosave 注意区分两个堆栈 |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
818 浏览 1 评论
994 浏览 0 评论
877 浏览 0 评论
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
4892 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
3696 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-12 03:36 , Processed in 1.879339 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1879