新手上路
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2019-11-17
- 在线时间
- 10 小时
|
楼主 |
发表于 2021-9-9 14:57:25
|
显示全部楼层
static irqreturn_t wk2xxx_irq(int irq, void *dev_id)//
{
struct wk2xxx_port *s = dev_id;
disable_irq_nosync(s->port.irq);
s->irq_flag = 1;
if(wk2xxx_dowork(s))
{
;
}
else
{
s->irq_flag = 0;
s->irq_fail = 1;
}
return IRQ_HANDLED;
}
/////////////////////////////////////////////////////////
static int wk2xxx_dowork(struct wk2xxx_port *s)
{
if (!s->force_end_work && !work_pending(&s->work) && !freezing(current) && !s->suspending)
{
queue_work(s->workqueue, &s->work);//
return 1;
}
else
{
return 0;
}
}
//////////////////////////////////////////////////////////////////////////
static void wk2xxx_work(struct work_struct *w)
{
struct wk2xxx_port *s = container_of(w, struct wk2xxx_port, work);
uint8_t rx;
int work_start_tx_flag;
int work_stop_rx_flag;
int work_irq_flag;
int work_conf_flag;
......
}
上面是中断函数及worker函数,我在加日志统计了中断函数到worker函数执行的时间间隔发现,大部分在1ms内,偶尔会到10ms,这个时候就会出现溢出; |
|