今天在调用硬件库,多是对结构体进行赋值配置。
有些结构体的参数多则20几个,对于一些默认的配置一般不会列出来。但是如果结构体变量不是全局或者静态变量,结构体里面未初始化的数据变量就不确定。
现象描述:
对于一个结构体
typedef
{
u8 a;
u8 b;
u8 c;
}test_I
test_I i;
i.a=1;
i.c=2;
运行时查看i.b 非0 ,这个也很正常。由于我的结构体变量是在函数内部,是一个auto类型,单片机运行的时候不会对他进行初始化。实际调用的时候才会从堆里面分配一块区域。而我们不能保证这块区域里面的内容为0. 所以对于未初始化的部分,就会出现错误的数据。
解决办法:
但是我们调用结构体变量时,可以通过先初始化为0,在对具体的内容初始化,下面是2种方法:
test_I i={0};
或者
test_I i;
memset(&i,0,sizeof(i));