您好、专家、
我的客户遇到以下计算有时错误的问题。
ITEMP 是局部变量、应始终等于600000、但有时该值是错误的并变为0。

i32Debug3在出现错误时保存该值、 i32Debug3[2]、 i32Debug3[4]、 i32Debug3[6]在出现错误时记录该值。

代码中还有一些中断函数、例如 PWM ISR 和计时器 ISR。 如果禁用中断或为该代码添加保护、则一切都正常。
客户使用最新的编译器 TI v22.6.0 并且优化级别已关闭、 对此问题有任何建议吗?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好、专家、
我的客户遇到以下计算有时错误的问题。
ITEMP 是局部变量、应始终等于600000、但有时该值是错误的并变为0。

i32Debug3在出现错误时保存该值、 i32Debug3[2]、 i32Debug3[4]、 i32Debug3[6]在出现错误时记录该值。

代码中还有一些中断函数、例如 PWM ISR 和计时器 ISR。 如果禁用中断或为该代码添加保护、则一切都正常。
客户使用最新的编译器 TI v22.6.0 并且优化级别已关闭、 对此问题有任何建议吗?
强、
1..\n\n 是否可以共享此代码的反汇编视图?
2.您能否解释一下"或为该代码添加保护"这一表述的含义?
3.为了完整起见,是否可以启用优化并检查问题是否仍然出现?
此外、您记录错误值的方式对我来说有点令人困惑。 我不确定为什么您有 i32Debug3[ichx+8]++。 如果 i32Debug3是32b 缓冲器、并且 lTemp 是64b 变量、我认为您应该执行如下操作:
if (..){
i32Debug[ichx]=ITEMP;
ichx+=2;
}
如果我在理解上遗漏了一些东西、请告诉我。
谢谢、
Sira