老师,1.以我定义的按键设备结构体为例子,这个结构体成员很多

🔍 溯源 ✍️ Jack | 📅 2024-10-02 | 👍 0 | 原帖↗
#知识星球 #立芯嵌入式 #来源/立芯星球 #技术/C语言 #技术/架构设计 #质量/普通

原帖 | Jack | 2024-10-02 11:08 | 👍0 | 阅读约1

老师,1.以我定义的按键设备结构体为例子,这个结构体成员很多,但是初始化只有部分需要用到,一些是环境变量或者组件运行的私有变量,用户初始化需要初始化的参数只有一部分,那我们怎么让用户知道该初始化哪部分?我觉得注释不是解决该问题的方案!

答:你在定义结构体时,其实就是在面向对象进行封装,里面的这些变量都不应该被用户看到,他们不应该具有直接访问的权限。对于这里的私有变量的保护,C语言的做法往往是定义一个私有变量结构体(这个结构体在.h里面声明,但是在.c里面定义,只有.h文件的人是看不到这个私有结构体的具体实现的。),然后这个结构体被包含进你这个对象里。私有变量不应该让用户看到,因为,你让他们看到了,他们有时候就可能为了图方便直接读取修改了,这是比较危险的,因为驱动往往涉及一些时序,但是rtos的调度却是有随机性的,如果用户直接能看到你的私有变量,并且访问或者读取,那么里面如果有脏数据,则可能导致用户拿到特殊值,导致用户的程序出问题。

typedef struct _KEY_Device_t {
private_data_t vars; /内部参数/

KEY_IO_Init_t   Init;             /* 用户初始化 */
KEY_IO_DeInit_t DeInit;           /* 用户初始化 */
KEY_IO_Read_t   Read;             /* 用户初始化 */
KEY_Callback_t  Callback;         /* 用户初始化 */

struct _KEY_Device_t *Next;

} KEY_Device_t;

2fa38bd8ac96.jpg


相关笔记