当前位置: 技术问答>linux和unix
内核数据初始化
来源: 互联网 发布时间:2015-10-25
本文导语: 我写了个设备的驱动,定义了一个数据结构 但是在使用前没有对该结构的各个成员赋值,尽是使用时根据状态直接赋值。结构如下: static struct buffer_struct{ int busy_flag; int cflags[MAX_ITEM_COUNT];// 0:free 1:occupy 2:busy/pen...
我写了个设备的驱动,定义了一个数据结构
但是在使用前没有对该结构的各个成员赋值,尽是使用时根据状态直接赋值。结构如下:
static struct buffer_struct{
int busy_flag;
int cflags[MAX_ITEM_COUNT];// 0:free 1:occupy 2:busy/pending 3:finished
unsigned char in_buffer[MAX_ITEM_COUNT][IN_ITEM_LENGTH];
unsigned char out_buffer[MAX_ITEM_COUNT][OUT_ITEM_LENGTH];
} xbuffer;
这样影响大么(现在还没出现大问题),如果要初始化赋值,内核不能用memset这样的函数吧,有别的函数可用么?
但是在使用前没有对该结构的各个成员赋值,尽是使用时根据状态直接赋值。结构如下:
static struct buffer_struct{
int busy_flag;
int cflags[MAX_ITEM_COUNT];// 0:free 1:occupy 2:busy/pending 3:finished
unsigned char in_buffer[MAX_ITEM_COUNT][IN_ITEM_LENGTH];
unsigned char out_buffer[MAX_ITEM_COUNT][OUT_ITEM_LENGTH];
} xbuffer;
这样影响大么(现在还没出现大问题),如果要初始化赋值,内核不能用memset这样的函数吧,有别的函数可用么?
|
memset函数多数用于对某段内存空间赋值,而且是在这段内存空间赋相同的值。
格式如下:
memset(begin_addr,value,size)
begin_addr:是这段内存空间的起始地址。
value:是要赋的值。
size:是这段空间的大小。
对于你以上说的情况来分析的话,我觉得不适合用memset,因为只能对这段空间赋相同的值。
我建议:
你使用kmalloc来分配你的结构体空间以后,对相关变量直接赋初始值。即:
void * buffer;
buffer=(xbuffer *)kmalloc(sizeof(xbuffer),GFP_KERNEL);
buffer->busy_flag=1;
.......
格式如下:
memset(begin_addr,value,size)
begin_addr:是这段内存空间的起始地址。
value:是要赋的值。
size:是这段空间的大小。
对于你以上说的情况来分析的话,我觉得不适合用memset,因为只能对这段空间赋相同的值。
我建议:
你使用kmalloc来分配你的结构体空间以后,对相关变量直接赋初始值。即:
void * buffer;
buffer=(xbuffer *)kmalloc(sizeof(xbuffer),GFP_KERNEL);
buffer->busy_flag=1;
.......
|
内核里可以直接用memset 函数的