|
发表于 2015-3-26 14:51:26
|
显示全部楼层
青风的ucosii_led 中怎么os_cpu_a.asm与我从Micrium中 STM32F0 的不一样,我下的是VV2.92.07.00
青风的:
OSStartHighRdy
LDR R0, __OS_TaskSwHook ; OSTaskSwHook();
BLX R0
LDR R0, __OS_Running ; OSRunning = TRUE;
MOVS R1, #1
STRB R1, [R0]
; SWITCH TO HIGHEST PRIORITY TASK:
LDR R0, __OS_TCBHighRdy ; Get highest priority task TCB address,
LDR R1, [R0] ; Get stack pointer,
LDR R2, [R1]
MSR MSP, R2 ; Switch to the new stack,
POP {R0-R7} ; Pop new task's R8-R11 (into R0-R3), R4-R7
MOV R8, R0
MOV R9, R1
MOV R10, R2
MOV R11, R3
; NORMAL FUNCTION RETURN (see Note #2)
ADD SP, #0x10
POP {R0-R3} ; Pop new task's R12, PC, LR, PSR into (R0, R1, R2, R3, respectively)
MOV R12, R0
MOV LR, R1
MSR PSR, R3
PUSH {R2} ; Save PC
SUB SP, #0x1C
POP {R0-R3} ; Pop new task's R0-R3
ADD SP, #0x0C
CPSIE I ; Enable interrupts
POP {PC} ; Pop new task's PC
Micrium 的
OSStartHighRdy
LDR R0, =NVIC_SYSPRI14 ; Set the PendSV exception priority
LDR R1, =NVIC_PENDSV_PRI
STR R1, [R0] ; Not storing entire byte with STRB to avoid error
MOVS R0, #0 ; Set the PSP to 0 for initial context switch call
MSR PSP, R0
LDR R0, =OS_CPU_ExceptStkBase ; Initialize the MSP to the OS_CPU_ExceptStkBase
LDR R1, [R0]
MSR MSP, R1
LDR R0, =OSRunning ; OSRunning = TRUE
MOVS R1, #1
STRB R1, [R0]
LDR R0, =NVIC_INT_CTRL ; Trigger the PendSV exception (causes context switch)
LDR R1, =NVIC_PENDSVSET
STR R1, [R0]
CPSIE I ; Enable interrupts at processor level
OSStartHang
B OSStartHang
不知道有什么道理。
|
|