请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: MSP430G2955
- 我们使用带有连续模式的时间 1 TA1R 来生成系统节拍。 每次发生计时器溢出中断时、我们都会递增固件中的计数器、以跟踪中断上下文中的高 16 位节拍
- 为了正确读取 TA1R、根据 TI 建议、我们需要停止计时器(将 TA1CTL 设置为停止模式)、读取 TA1R 和计数器(<< 16 位以形成 32 位周期)、然后将计时器重新启动到连续模式
- 我们认为这是 100%无竞态条件、但在本地测试期间、我发现在极少数情况下、一旦我们停止计时器、 TA1R 已从 0xFFFF 翻转到 0x0000、但尚未发生计时器溢出中断、因此节拍会随着时间的推移而反向。
- 例如、电流周期为 0x0001 FFFF、其中 TA1R 为 0xFFFF、高 16 位计数器为 0x0001。 当出现这个竞态条件时、我们读取的下一个节拍可以是 0x0001 0000、而不是 0x0002 0000
- 我看到有证据表明调试器加载调试映像以将其陷阱、还有一个不带调试器的单元表明竞争条件是从系统日志记录中发生的。
- 这种竞态条件是否应该来自计时器溢出中断? 这意味着 TA1R 可以在溢出时翻转、而不会已经触发溢出中断并中断 MSP430?