我有我认为相当简单的代码,我有一个易变的数据,我的i2c硬件会在它进入时写入一个字节。所以在我的init函数中我有:
volatile unsigned char data;
data = 0x55;
i2c_write(I2C_ADDR, ENABLE, 1, &data);
i2c_write函数的函数原型是:
void i2c_write(unsigned char dev_address, unsigned char reg_address, unsigned char len, volatile unsigned char *data);
当这两个数据都是unsigned char时,这很好用,但当我意识到我忘了让它们变得不稳定时,我开始收到编译器消息:
描述资源路径位置类型
“volatile unsigned char *”类型的#169参数与“unsigned char *”类型的参数不兼容
现在我将它们作为volatile unsigned char,我不知道为什么这不起作用。我怀疑也许我要知道由于某些原因你不能用挥发物做这件事:)所以我做错了什么?这适用于TI CC studio。
答案 0 :(得分:2)
我会在任何I2C API上编写这样的代码,而不是volatile
,尽管我可以参考指出为什么这是错误的。
volatile unsigned char g_buf[100];
void i2c_read(void *buf, size_t len)
{
// ...
}
void i2c_interrupt_handler(void)
{
// i2c_read is going to write to the buffer,
// so we can cast away the `volatile`
i2c_read((void*)g_buf, 1);
}