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.
尊敬的支持部门:
到目前为止、我们 使用 GTC 计时器 计数器(64位)作为 SOC 全局共享时间戳。 我们发现从该寄存器 GTC_CNTCV_LO、GTC_CNTCV_HI 中偶尔会收到错误数据的问题。
我们编写了测试代码来计算任务周期、在 MCU1-0中将任务周期设置为10ms、并记录了最大/最小/平均数据。 以下是测试结果。
平均数据没有问题(约9341us)、但最大值为1202062us。 下面是测试代码示例:
#define ticks_to_US 200
GetSystemTimer_u64 ()
{
uint63 cur_t = 0;
CUR_t =(*(volatile uint64_t*)(0x00a90008))/ TICKS_TO_US;
asm (" dsb");asm (" isb" );
}
任务(APP_10ms)
{
Timer_Duration = GetSystemTimer_u64 () - Timer_start;
Timer_start = GetSystemTimer_u64 ();
}
上图仅显示了 Timer_Duration 的摘要
您能给我们任何可能导致该问题的提示吗? 非常感谢您的支持。
例如、MCU 发送的 CAN 消息的周期是正确的
但是、假设更高优先级的任务可能会运行多次、有没有可能? 您目前是否能够禁用更高优先级的任务并看到 GTC 值?
在错误的情况下、CAN MSG 周期性的发生是可以的、在这种情况下、我们也进行了测试代码... 它们位于同一个 AUTOSAR 任务中、因此我们假设可以证明我们没有调度问题... 除了每10或15分钟发生一次错误情况、这意味着 GTC 定时器没有溢出
是的,GTC 是64位计时器,所以即使运行在200MHz,它不会在10分钟内溢出。
只是为了确认延迟 可能是由于 CAN MSG、您能尝试禁用它并将其签出吗?
禁用高优先级任务和 CAN Msg 也没用、我们确认了... 您 或某些其他客户是否 发现过类似问题?
否、尚未出现此问题。
在代码中、您是否可以获取当前时间与前一时间的不同、然后 绘制此差异、而不是除以 GTC 计时器值?
Rgds、
Brijesh