Other Parts Discussed in Thread: AM2434, LP-AM243
器件型号: AM2434
主题中讨论的其他器件: LP-AM243
大家好、我正在处理一个我们之前编写的超时代码失败的问题、可能是在编译器和/或 SDK 升级时。
我在 AM2434 ALX 上使用 CLANG v4.0.4.LTS 和 Ind Comms SDK 11.0.0.13。
总之,我们使用 ClockP_getTimeUsec() 来检查在等待数字输入变为设置时的超时 — 这是非常简单的代码。
但是、我们看到了错误的超时。 事实证明 对 ClockP_getTimeUsec 的第二个调用返回的值低于第一个调用 (否,这不是包装问题-目标仅运行了一分钟)。
为了解决这个问题、我发现下面的代码是有效的:
inline uint64_t getTimestamp_us()
{
uint64_t TimeStamp0_us、TimeStamp1_us;
应该做
{
TimeStamp0_us = ClockP_getTimeUsec ();
TimeStamp1_us = ClockP_getTimeUsec ();
IF (TimeStamp0_us > TimeStamp1_us)
{
debugLog(“TimeStamp0_us:%u“、TimeStamp0_us);
debugLog(“TimeStamp1_us:%u“、TimeStamp1_us);
}
} while (TimeStamp0_us > TimeStamp1_us);
返回 TimeStamp1_us;
}
这是在中调用的
while (true)
{
ClockP_USleep (1);
const uint32_t D1State = GPIO_pinRead (CSL_GPIO1_BASE、SPI0_D1_pin);
const uint64_t timestamp_us = getTimestamp_us ();
const uint32_t ElapsedTime_us = static_cast (timestamp_us - StartTime_us);
IF (ElapsedTime_us > WriteTimeMax_us)
{...}
...
}
忽略明显的绕回场景、getTimestamp_us 中的调试日志和循环永远不会发生、但确实会:
“TimeStamp0_us:8830999“
“TimeStamp1_us:8830015“
“TimeStamp0_us:8831999“
“TimeStamp1_us:8831016“
这是怎么回事?
谢谢、Steve