mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-02-05 19:39:42 +08:00
update Port/Cortex-M/port_cmx_s.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
This commit is contained in:
@@ -3,8 +3,8 @@
|
||||
* @file port_cmx_s.c
|
||||
* @brief CMSIS Cortex-M Core Port File for Arm / GNU / IAR Compiler
|
||||
* @author 迟凯峰
|
||||
* @version V2.2.1
|
||||
* @date 2026.01.16
|
||||
* @version V2.2.2
|
||||
* @date 2026.01.19
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
@@ -152,31 +152,27 @@ __LOOP ldrex r2, [r1]
|
||||
/* 2、互斥访问机制 */
|
||||
#elif (MCUCFG_PENDSVFIFO_MUTEX == 2)
|
||||
IMPORT mPendSV_FIFO_X
|
||||
IMPORT m_sign_load
|
||||
#define rx mPendSV_FIFO_rx
|
||||
push {r4}
|
||||
mov r12, rx
|
||||
ldr r3, =m_sign_load
|
||||
ldrb r4, [r3]
|
||||
ldrh r3, [r1, #2]
|
||||
movs r2, #1
|
||||
strb r2, [r3]
|
||||
strh r2, [r1, #2]
|
||||
|
||||
__LOOP mov rx, r1
|
||||
ldr r2, [rx]
|
||||
ldrh r2, [rx]
|
||||
adds r2, #1
|
||||
str r2, [rx]
|
||||
strh r2, [rx]
|
||||
cmp rx, r1
|
||||
bne __LOOP
|
||||
|
||||
strb r4, [r3]
|
||||
cmp r4, #0
|
||||
cmp r3, #0
|
||||
beq __RESrx
|
||||
ldr rx, =mPendSV_FIFO_X
|
||||
b __END
|
||||
__RESrx mov rx, r12
|
||||
__END pop {r4}
|
||||
__RESrx strh r3, [r1, #2]
|
||||
mov rx, r12
|
||||
#undef rx
|
||||
/* 3、关闭总中断 */
|
||||
__END /* 3、关闭总中断 */
|
||||
#elif (MCUCFG_PENDSVFIFO_MUTEX == 3)
|
||||
mrs r3, primask
|
||||
cpsid i
|
||||
@@ -346,29 +342,26 @@ void mPendSV_FIFOLoader(void *sv)
|
||||
/* 2、互斥访问机制 */
|
||||
#elif (MCUCFG_PENDSVFIFO_MUTEX == 2)
|
||||
#define rx mPendSV_FIFO_rx
|
||||
"push {r4} \n"
|
||||
"mov r12, "sDefStr(rx \n) // 保护-rx
|
||||
"ldr r3, =m_sign_load \n"
|
||||
"ldrb r4, [r3] \n" // 保护-m_sign_load
|
||||
"mov r12, "sDefStr(rx \n)
|
||||
"ldrh r3, [r1, #2] \n"
|
||||
"movs r2, #1 \n"
|
||||
"strb r2, [r3] \n" // 设置-m_sign_load
|
||||
"strh r2, [r1, #2] \n"
|
||||
|
||||
"__LOOP: mov "sDefStr(rx)", r1 \n"
|
||||
"ldr r2, "sDefStr([rx] \n)
|
||||
"ldrh r2, "sDefStr([rx] \n)
|
||||
"adds r2, #1 \n"
|
||||
"str r2, "sDefStr([rx] \n)
|
||||
"strh r2, "sDefStr([rx] \n)
|
||||
"cmp "sDefStr(rx)", r1 \n"
|
||||
"bne __LOOP \n"
|
||||
|
||||
"strb r4, [r3] \n" // 恢复-m_sign_load
|
||||
"cmp r4, #0 \n"
|
||||
"beq __RESrx \n" // 恢复-rx(本次的__LOOP未打断其它中断的__LOOP)
|
||||
"ldr "sDefStr(rx)", =mPendSV_FIFO_X \n" // 重设-rx(本次的__LOOP已打断其它中断的__LOOP)
|
||||
"cmp r3, #0 \n"
|
||||
"beq __RESrx \n"
|
||||
"ldr "sDefStr(rx)", =mPendSV_FIFO_X \n"
|
||||
"b __END \n"
|
||||
"__RESrx: mov "sDefStr(rx)", r12 \n"
|
||||
"__END: pop {r4} \n"
|
||||
"__RESrx: strh r3, [r1, #2] \n"
|
||||
"mov "sDefStr(rx)", r12 \n"
|
||||
#undef rx
|
||||
/* 3、关闭总中断 */
|
||||
"__END: \n" /* 3、关闭总中断 */
|
||||
#elif (MCUCFG_PENDSVFIFO_MUTEX == 3)
|
||||
"mrs r3, primask \n" // cycles:4, non nested protection:delete this line
|
||||
"cpsid i \n" // cycles:1
|
||||
|
||||
Reference in New Issue
Block a user