我正在使用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'作为标识符,是吗?你能告诉我们你的真实代码吗? –