gpt4 book ai didi

C 为什么传递这个易失变量的地址失败

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:29 24 4
gpt4 key购买 nike

我有我认为相当简单的代码,我有一个可变变量数据,我的 i2c 硬件会在它进入时写入一个字节。所以在我的 init 函数中我有:

volatile unsigned char data;
data = 0x55;
i2c_write(I2C_ADDR, ENABLE, 1, &data);

i2c_write函数的函数原型(prototype)为:

void i2c_write(unsigned char dev_address, unsigned char reg_address, unsigned char len, volatile unsigned char *data);

当它们的数据都是 unsigned char 时,这工作正常,但当我意识到我忘记将它们设为 volatile 时,我开始收到编译器消息:

Description Resource Path Location Type

#169 argument of type "volatile unsigned char *" is incompatible with parameter of type "unsigned char *"

现在我将它们都设为 volatile unsigned char,我不确定为什么这不起作用。我怀疑也许我即将了解到出于某种原因你不能用 volatile 来做到这一点:)那么我做错了什么?这是针对 TI CC 工作室的。

最佳答案

我会像这样编写代码,在任何 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);
}

关于C 为什么传递这个易失变量的地址失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29069134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com