1
讓我們假設,我有以下結構:應該鑄造用於設置位域?
struct my_struct {
uint32_t bf1 : 3;
uint32_t bf2 : 5;
uint32_t bf3 : 16;
uint32_t bf4 : 8;
};
及以下枚舉:
enum bf1_values {
Val1 = 0x0;
Val2 = 0x4;
Val3 = 0x7;
};
除了
,getter和setter功能BF1:
uint32_t bf1_getter() {
return global_struct.bf1; // cast value to (uint32_t)?
}
void bf1_setter(enum bf1_values val) {
global_struct.bf1 = val; // cast enum to (uint32_t)?
}
我應該使用getter和setter函數中的類型轉換以確保安全?
編輯:
的結構應該被髮送到HW。
EDIT2:
我想實現的是真正確保enum
將被正確寫入位域,並從位域正確讀取。
型鑄造無關安全,往往是完全相反。 –
@JoachimPileborg好的,但是這樣的代碼寫作的正常/好的做法是什麼? – Alex
它是否在沒有警告的情況下編譯?然後你不需要投射。否則*你*必須確保代碼是安全的,投射對你沒有幫助(它只會幫助你關閉編譯器警告)。 –