看到了吧,直接解引用编译不过,因为编译器蒙了。

但须注意的是:

不同的编译器对void指针处理是不一样的,如IAR,ANSI C,VC对上述都将出错,而GNU指定“void”的算法操作与“char”一致,因此上述写法在GNU则可以编译

所以做个类型转换,修正如下:

深入了解void指针背后的机理

void型指针解引用须做类型指定。

类型转换的时候须注意类型匹配。

另外,如果函数类型可以是任意类型的指针,则需将其参数定义为void *指针,例如string.h中关于内存操作的函数集:

__EFF_NENW1NW2 __ATTRIBUTES int memcmp(const void *, const void *,

size_t);

__EFF_NENR1NW2R1 __DEPREC_ATTRS void * memcpy(void *_Restrict,

const void *_Restrict,

size_t);

__EFF_NENR1NW2R1 __DEPREC_ATTRS void * memmove(void *, const void *,

size_t);

__EFF_NENR1R1 __DEPREC_ATTRS void * memset(void *, int, size_t);

非易失存储管理应用

单片机开发中,往往需要实现数据的非易失存储。所谓非易失存储,就是数据改写后在掉电后仍然能保持。哪些是非易失存储介质呢?比如EEPROM,FLASH等都属于非易失存储介质。

比如一个产品里面有很多各种各样的参数,且分布在各个子系统文件中。举个栗子:

/*模块A中有这样一个结构体需要非易失存储*/

typedef struct _t_paras{

int language;/*语言种类*/

char SN[20]; /*产品序列号*/

}T_PARAS;

T_PARAS sysParas;

/*模块B中有这样一个结构体需要非易失存储*/

typedef struct _t_pid{

float kp;

float ki;

float kd;

float T;

}T_PID;

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查