pd->psy_nb.notifier_call = psy_changed; ret = power_supply_reg_notifier(&pd->psy_nb); if (ret) goto del_inst; /* force read initial power_supply values */ psy_changed(&pd->psy_nb, PSY_EVENT_PROP_CHANGED, pd->usb_psy);在另一个文件中有atomic_notifier_call_chain(&power_supply_notifier, PSY_EVENT_PROP_CHANGED, psy); kobject_uevent(&psy->dev.kobj, KOBJ_CHANGE);怎么通过中断相互调用
时间: 2024-02-17 16:26:03 浏览: 88
PSY_Matlab.zip_SADF检验_adjectiveoel_matlab psy_matlab上确界_psy开发语言
5星 · 资源好评率100%
中断通常是由硬件设备引发的,它会打断CPU执行的当前任务,转而去执行中断服务程序。中断服务程序是在中断上下文中运行的,它的执行不能被打断,直到它完成为止。因此,在中断服务程序中,不能直接调用可能会睡眠的函数,否则会导致死锁或系统崩溃。
在这段代码中,如果在中断上下文中调用atomic_notifier_call_chain和kobject_uevent函数,可能会导致睡眠,因为这两个函数都会调用睡眠函数。因此,这两个函数不能在中断上下文中直接调用。
如果需要在中断服务程序中调用这些函数,可以使用工作队列或定时器来完成。将需要在中断上下文中执行的代码放入工作队列或定时器中,然后在合适的时机调度工作队列或定时器,以便在非中断上下文中执行这些代码。这样就可以避免在中断上下文中调用睡眠函数,从而保证系统的稳定性。
阅读全文