我的问题是如何通过引用函数来传递位域实例。我已经按如下所示执行了此操作,但是当我输入函数 DAC_set_gain_code 时,处理器会引发中断故障。就通过位域而言,我所做的是否正确?
我创建了一个位域(见下文),它代表 DAC 芯片上的一个 24 位寄存器,我想将其写入并保存在 .h 文件中。
typedef struct {
uint8_t rdwr_u8: 1;
uint8_t not_used_u8: 3;
uint8_t address_u8: 4;
uint8_t reserved_u8: 8;
uint8_t data_u8: 8;
}GAIN_REG_st;
我有一个像这样初始化位域的函数:
void init(void)
{
GAIN_REG_st GAIN_x; //Create instance of bitfield
//other code here...
DAC_set_gain_code(channel_u8, gain_code_i8, &GAIN_x); //Pass address of bitfield
return;
}
实际填充位域的函数如下所示:
void DAC_set_gain_code(uint8_t channel_u8, int8_t gain_code_i8, GAIN_REG_st *GAIN)
{
/* Populate ZERO_REG_st bitfield */
GAIN->rdwr_u8 = 0;
GAIN->not_used_u8 = 0;
if(channel_u8==0){
GAIN->address_u8 = GAIN_REGISTER_0;
}
else if(channel_u8==1){
GAIN->address_u8 = GAIN_REGISTER_1;
}
else if(channel_u8==2){
GAIN->address_u8 = GAIN_REGISTER_2;
}
else if(channel_u8==3){
GAIN->address_u8 = GAIN_REGISTER_3;
}
GAIN->data_u8 = gain_code_i8;
return;
}
hal_DAC_set_gain_code_uni 的函数原型是:
void DAC_set_gain_code(uint8_t channel_u8, int8_t gain_code_i8, GAIN_REG_st *GAIN);
任何建议表示赞赏。
谢谢。