| 
 
新手上路 
 
	积分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,这个时候就会出现溢出;
 | 
 |