-
CorTst 测试项
m33_cst_loadstore_test6.S失败1. 问题描述
在进行 CorTst 测试时,在极端的高频中断场景下(例如每 50μs 触发一次周期性中断),测试用例出现概率性虚假失败 (False Failure),跳转至
m33_cst_loadstore_test6_stack_failed错误处理分支。问题代码片段:
/* Update signature on stack */ LDREX R1, [SP] /* Switch to exclusive access */ ROR R1, R1, #1 STREX R0, R1, [SP] /* STREX in exclusive access should succeed */ CMP R0, #0 DSB BNE m33_cst_loadstore_test6_stack_failed ROR R1, R1, #3 /* Destroy signature in R1 */
2. 原因分析
此问题是由于 ARM 架构硬件行为特性 与 未屏蔽全局中断 共同作用导致的,并非实际硬件的 Load/Store 独占访问功能存在缺陷。
2.1 硬件状态机机制
Cortex-M 的 Local Exclusive Monitor 状态切换逻辑如下:
[Open Access] --LDREX--> [Exclusive Access] --STREX (Success)--> [Open Access]根据 ARMv7-M / ARMv8-M 架构手册规定:
异常入口 (Exception Entry) 触发时,硬件会自动清零 Local Exclusive Monitor,强制将其从
Exclusive Access状态重置为Open Access状态。
《Arm
v7-M Architecture Reference Manual》A3.4.5 Load-Exclusive and Store-Exclusive usage restrictions此设计旨在防止中断服务程序 (ISR) 与线程上下文 (Thread Context) 之间的独占访问状态互相干扰。即使 ISR 内部没有任何
LDREX/STREX相关的代码,仅仅“进入异常”这一动作就会破坏 Monitor 的状态。2.2 失败执行时序
Thread Context Interrupt Context (ISR) -------------- ----------------------- LDREX R1, [SP] │ (Monitor Status: Exclusive Access) │ ├─────── 触发中断 (Exception Entry) ─────────┐ │ │ (硬件自动清零 Monitor -> Open Access) │ │ 执行 ISR... │ │ 异常返回 (Exception Return) │ <─────────────────────────────────────────┘ │ STREX R0, R1, [SP] │ (Monitor 当前处于 Open Access,STREX 必定失败) │ (返回状态码 R0 = 1) ▼ CMP R0, #0 BNE m33_cst_loadstore_test6_stack_failed ==> 触发误判 (False Positive)!
3. 修复方案
在行 115 的
LDREX之前插入临界区保护(关中断/流水线准备宏CST_PREPARE_PIPELINE),并在校验完成后恢复中断状态。修改前:
/* Update signature on stack */ LDREX R1, [SP] ROR R1, R1, #1 STREX R0, R1, [SP] CMP R0, #0 DSB BNE m33_cst_loadstore_test6_stack_failed修改后:
/* Update signature on stack */ CST_PREPARE_PIPELINE /* Disable interrupts to lock exclusive monitor state */ LDREX R1, [SP] ROR R1, R1, #1 STREX R0, R1, [SP] CST_RESTORE_PIPELINE /* Restore interrupt mask */ CMP R0, #0 DSB BNE m33_cst_loadstore_test6_stack_failed4. 临时修改方案
- 关闭对应的测试项目
- 替换 CorTst/asm/tests/m33_cst_loadstore_test6.S 为附件
-
-
Y yt0069 从 MCAL BUGS 移动了该主题
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...