update Port/Cortex-M/port_cmx_s.c.

Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
This commit is contained in:
零中断延迟的RTOS
2026-01-19 15:08:17 +00:00
committed by Gitee
parent 3992157555
commit 4b18d86652

View File

@@ -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