工具/软件:Code Composer Studio
您好!
我在这部分代码中遇到问题:
静态空 sec_SetTmpErrorVariable (SEC_checkErrorType_e 错误、
sec_tmpErrors_s * tmpErrorVar、uint16_t checkIndex、
bool 自动重置错误)
{
uint32_t mask;
//重置错误的计算掩码
MASK = 1UL <<((uint32_t)校验索引);
MASK =~MASK;
}
mask 是 uint32_t 我尝试将每个元素强制转换为 uint32_t、但结果始终相同。
我希望线掩码=~mask 会更改所有位、但它只会更改16个低位。 我无法理解为什么。
这是错误代码:
92 mask = 1UL <<((uint32_t)校验索引);
3f5aed: 0201 MOVB ACC、#1
3f5aee: 563B LSLL ACC、T
3f5aef: FF55 非 ACC
3f5af0: FF5A MOVL P、ACC
当我处于调试模式时、ACC 和 P 寄存器都正常(0xFFFFFFFE)、但 MASK 不是(0x0000FFFE)。 在表达式窗口中、掩码地址是寄存器 PL。 为什么?
我使用编译器 v6.4.4。 我使用最新版本17.3.0执行此操作、结果是相同的。 使用 O2优化级别。
我在没有优化的情况下执行它、它运行良好。 那么,如何进行 O2优化级别呢?
提前感谢。
Helene