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
它是否在没有警告的情况下编译?然后你不需要投射。否则*你*必须确保代码是安全的,投射对你没有帮助(它只会帮助你关闭编译器警告)。 –