(板工以身作則來示範怎麼被電)
開發平台(Platform): (Ex: Win10, Linux, ...)
Raspbien + kernel 4.4
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
gcc 4.9.2-10
編譯參數:-Wall -pedantic -O3 -std=gnu11
問題(Question):
正在研究如何用struct做簡單的物件。
我有一個物件 I2C_Device
typedef struct __I2C_Device {
int (*init_func)(struct __I2C_Device* dev);
int (*data_func)(struct __I2C_Device* dev);
} I2C_Device ;
性質是I2C_Device 的物件很多,比如其中一個元件
typedef struct {
I2C_Device dev;
int16_t rawData[3]; // 這兩個元件每一個I2C_Device的物件
float realData[3]; // 不相同,所以不能包在I2C_Device裡
} I2C_Device_ADXL345;
I2C_Device_ADXL345* adxl345
= (I2C_Device_ADXL345*)malloc(sizeof(I2C_Device_ADXL345));
如果我需要用 adxl345->dev.data_func 去修改adxl345->rawData跟realData
我可以怎麼寫?
例如
(int16_t*)((I2C_Device*) adxl345+1)[1] = 2 ; // 設定rawData[1];
(float*)((int16_t*)((I2C_Device*) adxl345+1)+3) = 2 ; // 設定realData[0];
(可是我怕這種寫法會因為alignment的關係得到不正確的結果)
還是有別的更好作法(只能用C的情況)?
請各位賜教。感謝。