当前位置: 技术问答>linux和unix
驱动模块里能不能加while(1)语句
来源: 互联网 发布时间:2016-09-16
本文导语: RT 驱动模块里能不能加while(1)语句 比如: int function() { while(1) { ... } return0; } int time_init(void) { function(); ... return 0; } | 秒表的话,也可以使用内核定时器 http://download.csdn.net/sour...
RT
驱动模块里能不能加while(1)语句
比如:
int function()
{
while(1)
{
...
}
return0;
}
int time_init(void)
{
function();
...
return 0;
}
驱动模块里能不能加while(1)语句
比如:
int function()
{
while(1)
{
...
}
return0;
}
int time_init(void)
{
function();
...
return 0;
}
|
秒表的话,也可以使用内核定时器
http://download.csdn.net/source/2323904
里的第10章后半部是一个完整的秒字符设备驱动
http://download.csdn.net/source/2323904
里的第10章后半部是一个完整的秒字符设备驱动
|
如果是短延时的话,可以用以下几个函数:
#include
void ndelay(unsigned long nsecs);//延时纳秒时间
void udelay(unsigned long usecs);//延时微妙时间
void mdelay(unsigned long msecs);//延时毫秒时间
如果是长延时的话,建议用内核定时器,基本接口如下:
#include
struct timer_list {
unsigned long expires;
void (*function)(unsigned long);
unsigned long data;
};
void init_timer(struct timer_list *timer);
struct timer_list TIMER_INITIALIZER(_function,_expires,_data);
void add_timer(struct timer_list *timer);
int del_timer(struct timer_list *timer);
int mod_timer(struct timer_list *timer,unsigned long expires);
int del_timer_sync(struct timer_list *timer);
int timer_pending(const struct timer_list *timer);
#include
void ndelay(unsigned long nsecs);//延时纳秒时间
void udelay(unsigned long usecs);//延时微妙时间
void mdelay(unsigned long msecs);//延时毫秒时间
如果是长延时的话,建议用内核定时器,基本接口如下:
#include
struct timer_list {
unsigned long expires;
void (*function)(unsigned long);
unsigned long data;
};
void init_timer(struct timer_list *timer);
struct timer_list TIMER_INITIALIZER(_function,_expires,_data);
void add_timer(struct timer_list *timer);
int del_timer(struct timer_list *timer);
int mod_timer(struct timer_list *timer,unsigned long expires);
int del_timer_sync(struct timer_list *timer);
int timer_pending(const struct timer_list *timer);
|
同意1楼。while(1)本身当然没有问题,比如下面的代码:
while(1) break;
虽然调皮,但也没什么大害。
所以关键还是看楼主想做什么,怎么做。
while(1) break;
虽然调皮,但也没什么大害。
所以关键还是看楼主想做什么,怎么做。
|
如果循环里在某种条件下就跳出来,那就问题不大,不过这好像不是楼主想讨论的问题。
如果是死循环,在非抢占式内核那是绝对不行的。即便是抢占式内核,也未必就能及时被抢占,所以也不好。
纯属个人理解,请楼下高手指正。
如果是死循环,在非抢占式内核那是绝对不行的。即便是抢占式内核,也未必就能及时被抢占,所以也不好。
纯属个人理解,请楼下高手指正。