新手上路
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2023-2-27
- 在线时间
- 3 小时
|
如题,突发奇想不在用户程序中使用循环,而是在驱动中使用,引发了一些思考和问题:
现象:在驱动中使用xxx_read()函数里面执行如下
while(1){led_on();msleep(500);led_off();msleep();}
能看到灯不停闪,但是控制台死掉,无响应,应该是CPU完全卡在这个循环上了。
思考:
linux内核启动后也会有一个idl(也是死循环)进程(对用户不可见)。各个模块执行的时候应该靠内核调度,虽然使用了死循环,应该是占用CPU使用率
而不是直接卡死这样才合理。(何况内核还有自己的中断,更不应该卡死呀)。网上找了很久,msleep()应该不占用资源,就更不应该卡死了。完全不能理解这个现象
看起来就像CPU运行驱动模块是独占的方式,这样很不合理呀,如果是这样,岂不是驱动就像中断一样,不能执行很多耗时的动作了?
|
|