我正在使用AVR微控制器通過I2C總線寫入可編程分頻器芯片。在一定的時間間隔,我想有以下函數被調用來更新芯片的輸出頻率:AVR GCC - 類型轉換問題
void 1077WriteDiv(int16_t data)
{
uint8_t upperByte = (uint8_t)((uint16_t)data>>2);
i2c_start(DS1077_BASE_ADDRESS);
i2c_write(DIVIDE_REGISTER);
i2c_write(upperByte);
i2c_write(0x0);
i2c_stop();
}
我試圖得到一個10位的值的頂部8位中的「數據」變量並寫出來。第二個「寫入」命令寫入芯片上「分」寄存器的低8位,在這種情況下爲0。
作爲一個測試用例,我從零開始遞增「數據」變量(必須對其進行簽名),將其左移2位並每次調用該函數。我得到垃圾了。但是,當我這樣做時:
void 1077WriteDiv(int16_t data)
{
//uint8_t upperByte = (uint8_t)((uint16_t)data>>2);
static uint8_t thing = 0;
i2c_start(DS1077_BASE_ADDRESS);
i2c_write(DIVIDE_REGISTER);
i2c_write(thing++);
i2c_write(0x0);
i2c_stop();
}
一切都按預期工作。在我如何移動和類型化原始「數據」變量方面顯然存在一些問題,但我嘗試了各種排列方式,結果相同。如果有人能指出我可能會出錯的地方,我將非常感激。
你能告訴我們正在做增量和左移的代碼嗎?也許這個代碼很糟糕。 –
請給我們打電話的代碼... –
gcc不是*真的*讓您使用'1077WriteDiv'作爲標識符,是嗎?你能告訴我們你的真實代碼嗎? –