123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #include "FreeRTOS.h"
- #include "task.h"
- void vPortStartFirstTask( void );
- void xPortPendSVHandler( void );
- void vPortSVCHandler( void );
- __asm void vPortSVCHandler( void )
- {
-
- }
- __asm void vPortStartFirstTask( void )
- {
- PRESERVE8
- EXTERN __Vectors
-
- ldr r0, =__Vectors
- ldr r0, [r0]
-
- msr msp, r0
- ldr r3, =pxCurrentTCB
- ldr r1, [r3]
- ldr r0, [r1]
- adds r0, #32
- msr psp, r0
- movs r0, #2
- msr CONTROL, r0
- pop {r0-r5}
- mov lr, r5
- cpsie i
- pop {pc}
- ALIGN
- }
- __asm void xPortPendSVHandler( void )
- {
- extern vPortSafeTaskSwitchContext
- extern pxCurrentTCB
- PRESERVE8
- mrs r0, psp
- ldr r3, =pxCurrentTCB
- ldr r2, [r3]
- subs r0, #32
- str r0, [r2]
- stmia r0!, {r4-r7}
- mov r4, r8
- mov r5, r9
- mov r6, r10
- mov r7, r11
- stmia r0!, {r4-r7}
- push {r3, r14}
- bl vPortSafeTaskSwitchContext
- pop {r2, r3}
- ldr r1, [r2]
- ldr r0, [r1]
- adds r0, #16
- ldmia r0!, {r4-r7}
- mov r8, r4
- mov r9, r5
- mov r10, r6
- mov r11, r7
- msr psp, r0
- subs r0, #32
- ldmia r0!, {r4-r7}
- bx r3
- ALIGN
- }
|