上一次,在看液晶的驱动程序的时候,了解了结构体其实跟数组一样是按地址顺序排列的.只不过,结构体里的成员变量 是长短不一的,而不像数组都是统一长度.
在一个新的项目中,因为发送数据的长度,存在长短不一,每个成员的名称和功能又不一样,所以觉得在这里使用结构体合适一点.
我定义了一给结构体类型:
typedef struct
{
u16 send_fpga_x_start;
u16 send_fpga_y_start;
u16 send_fpga_x_end;
u16 send_fpga_y_end;
u16 scaler_V_DISP_in;
u16 scaler_H_DISP_in;
u16 scaler_VSFACTOR;
u16 scaler_HSFACTOR;
} video_size;
这是是需要计算出来并发送给串口的值,这样定义可比数组更加的直观.
然后,video_size self_size 定义一个实体 ,通过函数.calculate()把数据计算出来,存放在这个实体里.然后通过send_parameter(),用串口,以字节为单位发送给fpga.这就需要传递,如果使用地址传递结构体指针.
首先,calculate(u16 *p) 定义了一个u16 的地址指针,表示每个地址指向的是一个u16的存储单元.然后,在使用的时候,calculate((u16 *)&self_size).结构体并不像数组,名称就是地址.而是需要取地址,再强制转换地址类型. 最后,send_parameter((u16 *)&self_size),
还有第二种定义使用的方法:calculate(video_size *p),这样就可以直接使用了.calculate(&self_size).
算是亲身经历吧,结构体在某些环境下使用的确要比用数组让人感觉舒服.