lgnq 发表于 2010-4-8 13:16:37

关于变量rt_thread_switch_interrput_flag的一点疑问

rt_thread_switch_interrput_flag变量用来标记中断中是否要切换上下文
rt_thread_switch_interrput_flag = 1,中断中需要切换上下文
rt_thread_switch_interrput_flag = 0,中断中不需要切换上下文

但是rt_thread_switch_interrput_flag变量只有在void rt_hw_interrupt_init()中初始化为0.

以上部分不知道我的理解有没有错?

之后程序中
只有rt_thread_switch_interrput_flag = 1的操作;
却没有对变量rt_thread_switch_interrput_flag赋值为0的操作。

难道之后的中断中始终要切换上下文吗?

ffxz 发表于 2010-4-8 13:31:10

在汇编里会操作的

lgnq 发表于 2010-4-8 13:58:50

谢谢ffxz的快速回复
能不能说明详细点,因为我实在是找不到。

我参考的是rtt0.3.0的正式版本中的/libcpu/arm/AT91SAM7S中的移植代码
所有的汇编我都看过了

就是没有对变量rt_thread_switch_interrput_flag赋值为0的操作

lgnq 发表于 2010-4-8 14:09:33

不要意思,是我看得不仔细,找到了
还是谢谢ffxz的及时答复。

libcpu/ arm/ AT91SAM7S/ start_gcc.SLine 170开始

vector_irq:        
stmfd        sp!, {r0-r12,lr}        
bl        rt_interrupt_enter        
bl        rt_hw_trap_irq        
bl        rt_interrupt_leave       
/*       
* if rt_thread_switch_interrput_flag set, jump to        
* rt_hw_context_switch_interrupt_do and don't return        
*/        
ldr        r0, =rt_thread_switch_interrput_flag        
ldr        r1,        
cmp        r1, #1        
beq        rt_hw_context_switch_interrupt_do       
ldmfd        sp!, {r0-r12,lr}        
subs        pc, lr, #4
vector_fiq:        
stmfd        sp!,{r0-r7,lr}        
bl         rt_hw_trap_fiq        
ldmfd        sp!,{r0-r7,lr}        
subs        pc,lr,#4
/*
* void rt_hw_context_switch_interrupt_do(rt_base_t flag)
*/
rt_hw_context_switch_interrupt_do:        
mov                r1,#0                                /* clear flag */
str                r1,

最后一步操作就是把变量rt_thread_switch_interrput_flag赋值为0.
页: [1]
查看完整版本: 关于变量rt_thread_switch_interrput_flag的一点疑问