关于读取寄存器时间过长导致硬实时Linux中断响应时间极差的问题
问题描述
在调试硬实时Linux系统时发现,小概率情况下读取寄存器GPMC_IRQSTATUS所花时间非常长,需要180us左右才能读取完毕,导致硬实时Linux的中断响应时间变为极差(系统要求小于5us,其它情况下都满足)。而正常时间是纳秒级的。下面有评估板配置说明,正常与不正常时的示波器波形,以及对应的代码。
评估板配置说明
CPU :AM3358BZCZA100
NAND FLASH: MT29F4G08ABADA
DDR:镁光D9PSH
操作系统:linux-3.2.0
文件系统:UBIFS
出问题的代码
在arch\arm\mach-omap2\gpmc.c文件中。蓝色代码为怀疑出问题的代码。
int gpmc_read_status(int cmd)
{
int status = -EINVAL;
u32 regval = 0;
extern void my_gpio1_low(void);
extern void my_gpio1_high(void);
extern void my_gpio2_low(void);
extern void my_gpio2_high(void);
extern unsigned long ustimer_get_origin(void);
extern int ustimer_init(void);
extern int omap_get_INTC_THRESHOLD(void);
extern int get_pidx(void);
unsigned long us0,us1;
unsigned long flags;
static int initflag=0;
int pidx;
#if 0
asm volatile(
" mrs %0, cpsr @ arch_local_irq_save\n"
" cpsid i"
: "=r" (flags) : : "memory", "cc");
#else
if(!initflag)
{ </