我的问题是如何通过引用一个函数来传递位域实例。我已经执行了如下所示,但是当我发送函数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);
任何意见赞赏。
谢谢。
您发布的内容无法编译,或者您没有显示实际使用的内容(函数名称不匹配,未声明的变量和/或全局变量未显示以及未使用的参数) – Mat 2011-04-15 10:25:11
仍然无法执行。 'ZERO'没有在你发布的内容中定义,'GAIN'没有在'DAC_set_gain_code'中使用。 – Mat 2011-04-15 10:34:40
对不起,有关帖子中的错误。现在应该与实际代码相同。我的主要问题是,我是否正确地传递了位域的参考? – phil05 2011-04-15 10:42:56