我的問題是如何通過引用一個函數來傳遞位域實例。我已經執行了如下所示,但是當我發送函數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