关于变量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的快速回复
能不能说明详细点,因为我实在是找不到。
我参考的是rtt0.3.0的正式版本中的/libcpu/arm/AT91SAM7S中的移植代码
所有的汇编我都看过了
就是没有对变量rt_thread_switch_interrput_flag赋值为0的操作 不要意思,是我看得不仔细,找到了
还是谢谢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]