TI中文支持网
TI专业的中文技术问题搜集分享网站

AM335X Dmtimer定时器偶现无法按时产生定时器中断

我在使用TI AM3358进行Linux定时器中断方面的测试,TI的SDK版本号为 linux-am335x-AM335XPSP_04.06.00.08,linux内核版本在linux3.2.0基础上打了实时补丁PREEMPT_RT(3.2.0_rt10)。

测试的过程中发现,定时器中断偶尔会不能及时触发,DmTimer的设定时间为100us,实际定时器中断有时260us才到来。

测试的方法:使用dmtimer注册定时器中断,设置定时器间隔时间为100us,查看定时器中断到来时间,在定时器中断处理函数中再次启动定时器,循环测试。

测试结果:正常情况下,定时器中断都可以正常到来,但测试次数大于100万次(2min左右)时,会出现1~2次中断延迟160us左右的大延迟点。

我用linux的ftrace工具对此现象进行了分析,在附件中,请专家们帮忙进一步分析定位,不胜感激!

unicornx:

+1

Jian Zhou:

回复 unicornx:

也就是延时的概率是百万分之一,二?是不是有优先级高的进程打断了?

na wang2:

回复 Jian Zhou:

比较确定没有高优先级的进程打断,

首先,我调用chrt命令,已经将定时器中断线程的优先级调成98,基本是最高优先级。

其次,ftrace跟踪策略里面设置了irq 、sched事件跟踪,有任何中断、调度发生都会在log中有体现。

unicornx:

回复 Jian Zhou:

@Jian:

从ftrace的log中可以看到,应该是定时器中断出现了不能定时到达的问题,31136行的__irq_svc出现的时间比预期出现的时间晚了151us(定时器设置的周期是100us,也就是说这次定时器到期时间相比上次到期时间中间间隔了251us,>> 100us)。__irq_svc是IRQ异常跳转的最早的入口,它来晚了和内核应该没有关系吧。

我现在怀疑是BSP或者硬件中定时器中断控制器什么的不稳定导致定时器事件不准了,如果先不考虑是硬件问题,那么会不会是BSP的问题?

@Jian,从问题描述上看测试环境的开发板的内核是基于的linux-am335x-AM335XPSP_04.06.00.08这个基线做的,请问该基线的TI的BSP部分是否有过DMTimer定时器不准的bugfix,我们是否需要升级相关的TI补丁?

user5345614:

楼主,我也在做和你同样的测试,能否共享下你的代码参考下调试。

yongqing wang:

linux的代码分kernel空间和user空间

yongqing wang:

kernel空间的程序才能及时响应,user空间的程序是不保证时效性的

user4088432:

想请教一下哪里能找的到关于定时器例程?

赞(0)
未经允许不得转载:TI中文支持网 » AM335X Dmtimer定时器偶现无法按时产生定时器中断
分享到: 更多 (0)