有关所用术语的说明:
对于静态数组,我的意思是静态分配内存的数组,例如:int x[10]。
问题
我需要声明一个包含 volatile 元素的静态数组。 如果我很好地理解 volatile 限定符是如何工作的,它应该是:
volatile uint8_t *x; // x is a pointer to volatile uint8_t
uint8_t *volatile x; // x is a volatile pointer to uint8_t
volatile uint8_t *volatile x; // x is a volatile pointer to volatile uint8_t
好的,但现在我需要对静态数组做同样的事情。 我尝试过:
volatile uint8_t x[10]; // Only the pointer is decleared as volatile
uint8_t volatile x[10]; // Same as above
volatile uint8_t *x3[10]; // Casting problems and errors when I do ...
*x3[0] = 1; // ... something like this. Moreover, I do not know if this...
// ... statement declares the uint8_t element as volatile
谢谢!
更新
好的,正如我应该使用的评论中突出显示的那样:
volatile uint8_t x[10]
据我所知,问题不在于声明,而在于我的代码中该变量的使用。我将此元素传递给一个函数,其原型(prototype)为:
static void functionName(uint8_t *buffer, uint32_t size);
我这样调用该函数:
functionName(x, 10);
编译器报告:传递“functionName”参数 1 会丢弃指针目标类型中的“ volatile ”限定符
我无法更改函数原型(prototype),如何解决这个问题?
最佳答案
要声明一个包含 10 个 uint8_t
类型的 volatile 元素的静态数组,只需:
volatile uint8_t x[10];
请注意,这是一个数组的声明,在此步骤中与指针无关。
注意:稍后在代码中,如果使用 x
,它可能会衰减为指向第一个 volatile 元素的指针,但在这种情况下,该指针将具有一个常量值,给定在链接步骤。指向值明显波动。
关于c - 如何声明具有 volatile 元素的静态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51059531/