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 的摘要
您能给我们任何可能导致该问题的提示吗? 非常感谢您的支持。
只需注意、我们已确认错误的数据不来自我们的任务计划。 因此我们假设 根本原因应该 来自 GTC 寄存器。 也许我们对它的访问速度非常快、因为每个 SoC 内核都 将访问它、在某些情况下、他们会在此期间从该寄存器获取数据
尊敬的 Yang:
还有其他并行运行的东西吗? 我们来看其他一些较高优先级的任务来阻止此任务持续时间更长。 有可能吗?
此致、
Brijesh
可能会被更高优先级的 IRQ 阻止、 但不会阻止过多的时间。 如果是这样、我们的系统将崩溃、某些模块将报告错误。
例如、MCU 发送的 CAN 消息的周期是正确的
但是、假设更高优先级的任务可能会运行多次、有没有可能? 您目前是否能够禁用更高优先级的任务并看到 GTC 值?
在错误的情况下、CAN MSG 周期性的发生是可以的、在这种情况下、我们也进行了测试代码... 它们位于同一个 AUTOSAR 任务中、因此我们假设可以证明我们没有调度问题... 除了每10或15分钟发生一次错误情况、这意味着 GTC 定时器没有溢出
是的,GTC 是64位计时器,所以即使运行在200MHz,它不会在10分钟内溢出。
只是为了确认延迟 可能是由于 CAN MSG、您能尝试禁用它并将其签出吗?
禁用高优先级任务和 CAN Msg 也没用、我们确认了... 您 或某些其他客户是否 发现过类似问题?
否、尚未出现此问题。
在代码中、您是否可以获取当前时间与前一时间的不同、然后 绘制此差异、而不是除以 GTC 计时器值?
Rgds、
Brijesh