C为什么传递此volatile变量的地址失败

时间:2015-03-16 03:15:17

标签: c volatile

我有我认为相当简单的代码,我有一个易变的数据,我的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。

1 个答案:

答案 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); 
}