|
使用 2.6.26 内核 在 ks8695x 遇到了下面的问题:
int g_nAlloc=0, g_nFree=0;
int hw_isr0(...)
{
...
spin_lock(&g_nsLock);
if( ((g_nAlloc+1)%250) != g_nFree ) {
g_nAlloc = (g_nAlloc+1)%250 ;
}
barrier();
if( g_nFree != g_nAlloc ) {
g_nFree = (g_nFree+1)%250;
}
spin_unlock(&g_nsLock);
...
}
上述函数通过GPIO 口响应一个外部硬中断,可以确定 g_nAlloc g_nFree 只在上面的代码中涉及到,且我确定中断源只有一个。现在问题是,上述函数经过数次执行后,g_nAlloc g_nFree 的值【有时候】会出现不等的情况!可是在应用层下跑都是正常的。开始听说乱序执行可能导致类似问题,因此用了 barrier(),但好像没什么改善。我是新手,各位前辈有什么建议没有?
|
|