fix gcc compiling error

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1265 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
bernard.xiong@gmail.com 2011-01-30 01:55:24 +00:00
parent 981d15812b
commit 6bcf028cc2
1 changed files with 41 additions and 41 deletions

View File

@ -34,9 +34,9 @@
.global rt_hw_interrupt_disable .global rt_hw_interrupt_disable
.type rt_hw_interrupt_disable, %function .type rt_hw_interrupt_disable, %function
rt_hw_interrupt_disable: rt_hw_interrupt_disable:
MRS r0, PRIMASK MRS r0, PRIMASK
CPSID I CPSID I
BX LR BX LR
/* /*
* void rt_hw_interrupt_enable(rt_base_t level); * void rt_hw_interrupt_enable(rt_base_t level);
@ -44,8 +44,8 @@ rt_hw_interrupt_disable:
.global rt_hw_interrupt_enable .global rt_hw_interrupt_enable
.type rt_hw_interrupt_enable, %function .type rt_hw_interrupt_enable, %function
rt_hw_interrupt_enable: rt_hw_interrupt_enable:
MSR PRIMASK, r0 MSR PRIMASK, r0
BX LR BX LR
/* /*
* void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to);
@ -74,10 +74,10 @@ _reswitch:
LDR r2, =rt_interrupt_to_thread /* set rt_interrupt_to_thread */ LDR r2, =rt_interrupt_to_thread /* set rt_interrupt_to_thread */
STR r1, [r2] STR r1, [r2]
LDR r0, =NVIC_INT_CTRL /* trigger the PendSV exception (causes context switch) */ LDR r0, =NVIC_INT_CTRL /* trigger the PendSV exception (causes context switch) */
LDR r1, =NVIC_PENDSVSET LDR r1, =NVIC_PENDSVSET
STR r1, [r0] STR r1, [r0]
BX LR BX LR
/* r0 --> swith from thread stack /* r0 --> swith from thread stack
* r1 --> swith to thread stack * r1 --> swith to thread stack
@ -87,41 +87,41 @@ _reswitch:
.type rt_hw_pend_sv, %function .type rt_hw_pend_sv, %function
rt_hw_pend_sv: rt_hw_pend_sv:
/* disable interrupt to protect context switch */ /* disable interrupt to protect context switch */
MRS r2, PRIMASK MRS r2, PRIMASK
CPSID I CPSID I
/* get rt_thread_switch_interrupt_flag */ /* get rt_thread_switch_interrupt_flag */
LDR r0, =rt_thread_switch_interrput_flag LDR r0, =rt_thread_switch_interrput_flag
LDR r1, [r0] LDR r1, [r0]
CBZ r1, pendsv_exit /* pendsv already handled */ CBZ r1, pendsv_exit /* pendsv already handled */
/* clear rt_thread_switch_interrput_flag to 0 */ /* clear rt_thread_switch_interrput_flag to 0 */
MOV r1, #0x00 MOV r1, #0x00
STR r1, [r0] STR r1, [r0]
LDR r0, =rt_interrupt_from_thread LDR r0, =rt_interrupt_from_thread
LDR r1, [r0] LDR r1, [r0]
CBZ r1, swtich_to_thread /* skip register save at the first time */ CBZ r1, swtich_to_thread /* skip register save at the first time */
MRS r1, psp /* get from thread stack pointer */ MRS r1, psp /* get from thread stack pointer */
STMFD r1!, {r4 - r11} /* push r4 - r11 register */ STMFD r1!, {r4 - r11} /* push r4 - r11 register */
LDR r0, [r0] LDR r0, [r0]
STR r1, [r0] /* update from thread stack pointer */ STR r1, [r0] /* update from thread stack pointer */
swtich_to_thread: swtich_to_thread:
LDR r1, =rt_interrupt_to_thread LDR r1, =rt_interrupt_to_thread
LDR r1, [r1] LDR r1, [r1]
LDR r1, [r1] /* load thread stack pointer */ LDR r1, [r1] /* load thread stack pointer */
LDMFD r1!, {r4 - r11} /* pop r4 - r11 register */ LDMFD r1!, {r4 - r11} /* pop r4 - r11 register */
MSR psp, r1 /* update stack pointer */ MSR psp, r1 /* update stack pointer */
pendsv_exit: pendsv_exit:
/* restore interrupt */ /* restore interrupt */
MSR PRIMASK, r2 MSR PRIMASK, r2
ORR lr, lr, #0x04 ORR lr, lr, #0x04
BX lr BX lr
/* /*
* void rt_hw_context_switch_to(rt_uint32 to); * void rt_hw_context_switch_to(rt_uint32 to);
@ -130,13 +130,13 @@ pendsv_exit:
.global rt_hw_context_switch_to .global rt_hw_context_switch_to
.type rt_hw_context_switch_to, %function .type rt_hw_context_switch_to, %function
rt_hw_context_switch_to: rt_hw_context_switch_to:
LDR r1, =rt_interrupt_to_thread LDR r1, =rt_interrupt_to_thread
STR r0, [r1] STR r0, [r1]
/* set from thread to 0 */ /* set from thread to 0 */
LDR r1, =rt_interrupt_from_thread LDR r1, =rt_interrupt_from_thread
MOV r0, #0x0 MOV r0, #0x0
STR r0, [r1] STR r0, [r1]
/* set interrupt flag to 1 */ /* set interrupt flag to 1 */
LDR r1, =rt_thread_switch_interrput_flag LDR r1, =rt_thread_switch_interrput_flag
@ -144,15 +144,15 @@ rt_hw_context_switch_to:
STR r0, [r1] STR r0, [r1]
/* set the PendSV exception priority */ /* set the PendSV exception priority */
LDR r0, =NVIC_SYSPRI2 LDR r0, =NVIC_SYSPRI2
LDR r1, =NVIC_PENDSV_PRI LDR r1, =NVIC_PENDSV_PRI
LDR.W R2, [r0,#0x00] ; read LDR.W R2, [r0,#0x00] /* read */
ORR r1,r1,r2 ; modify ORR r1,r1,r2 /* modify */
STR r1, [r0] ; write-bak STR r1, [r0] /* write-back */
LDR r0, =NVIC_INT_CTRL /* trigger the PendSV exception (causes context switch) */ LDR r0, =NVIC_INT_CTRL /* trigger the PendSV exception (causes context switch) */
LDR r1, =NVIC_PENDSVSET LDR r1, =NVIC_PENDSVSET
STR r1, [r0] STR r1, [r0]
CPSIE I /* enable interrupts at processor level */ CPSIE I /* enable interrupts at processor level */
@ -162,5 +162,5 @@ rt_hw_context_switch_to:
.global rt_hw_interrupt_thread_switch .global rt_hw_interrupt_thread_switch
.type rt_hw_interrupt_thread_switch, %function .type rt_hw_interrupt_thread_switch, %function
rt_hw_interrupt_thread_switch: rt_hw_interrupt_thread_switch:
BX lr BX lr
NOP NOP