完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
arm cotex-a9 rt_hw_context_switch_interrupt函数的逻辑想咨询一下。 .globl rt_thread_switch_interrupt_flag 在中断的ISR函数中如果调用rt_schedule函数的话,会走到此函数, 进入中断(①)⇒调用rt_schedule(②)⇒rt_hw_context_switch_interrupt(③) 但是rt_hw_context_switch_interrupt(③)函数一开始就判断了rt_thread_switch_interrupt_flag是否为1,如果为1,则代码直接跳到 _reswitch 处(这里的判断逻辑的意图不太理解)。 rt_hw_context_switch_interrupt: 想问下为什么刚开始要判断这个呢?,进入这个函数(③)之前,应该没有对rt_thread_switch_interrupt_flag这个变量赋值的处理吧? |
|
相关推荐
2个回答
|
|
下面是自己的理解,不知道对不对,先记录下来:
进入中断(①)⇒调用rt_schedule(②)⇒rt_hw_context_switch_interrupt(③) ⇒中断返回(④)⇒[from→to]的任务切换(⑤)。 ③结束后,会走中断返回④和任务切换(⑤) vector_irq: stmfd sp!, {r0-r12,lr} bl rt_interrupt_enter bl rt_hw_trap_irq bl rt_interrupt_leave ldr r0, =rt_thread_switch_interrupt_flag ldr r1, [r0] cmp r1, #1 beq rt_hw_context_switch_interrupt_do ldmfd sp!, {r0-r12,lr} subs pc, lr, #4 rt_hw_context_switch_interrupt_do: 在中断返回后 bl rt_interrupt_leave //此时中断会再度打开 就开始执行⑤(任务切换) ldr r0, =rt_thread_switch_interrupt_flag ldr r1, [r0] cmp r1, #1 beq rt_hw_context_switch_interrupt_do ldmfd sp!, {r0-r12,lr} subs pc, lr, #4 rt_hw_context_switch_interrupt_do: ... ... 再此过程中,由于中断再度打开,在向[to]任务切换的过程中,有可能被同一个中断再度打断。 换句话说: 进入中断(①)⇒调用rt_schedule(②)⇒rt_hw_context_switch_interrupt(③) ⇒中断返回(④)⇒[from→to]的任务切换(⑤)。 在⑤时被中断打断,再次执行同一个ISR并且调用rt_schedule时,进入rt_hw_context_switch_interrupt函数后,rt_interrupt_from_thread变量就不需要在重新被赋值了(因为还是在同一个线程中) |
|
|
|
一直对rt_thread_switch_interrupt_flag不理解,它的意思是中断中发生任务切换,rt_thread_switch_interrupt_flag等于1,那不是中断中发生切换,就应该等于0啊,但是看流程图rt_thread_switch_interrupt_flag等于0的时候,都跳过了。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1094 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
3798 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1517 浏览 0 评论
2252 浏览 0 评论
1705 浏览 0 评论
75523 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 17:31 , Processed in 0.604154 second(s), Total 73, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号