在数组中使用 volatile 类型

Use volatile type inside an array

我需要创建一些外部可变变量。然后在每个变量内部从 epprom 中获取一个值。然后将这些值组合到一个数组中

头文件:

typedef struct
{
    int Value;     
} SetValues;

extern volatile SetValues Mytest1;
extern volatile SetValues Mytest2;
extern volatile SetValues Mytest3;

源文件:

volatile SetValues Mytest1;
volatile SetValues Mytest2;
volatile SetValues Mytest3;


Mytest1.Value = DATAEE_ReadByte(21); // Here i'm reading from epprom
Mytest2.Value = DATAEE_ReadByte(22); // Here i'm reading from epprom

// i need each eeprom values(from volatile variables) to get them inside an array

int  *CheckMyValue[] = {Mytest1.Value, Mytest2.Value ... };

我收到错误常量表达式要求。我怎样才能将其更改为使其正常工作?

您不能使用编译时未知的值初始化变量。

而不是:

...
int *CheckMyValue[] = {Mytest1.Value, Mytest2.Value ... };

写入:

...
#define NVALUES number_of_possible_values   // put the appropriate number here
...
int CheckMyValue[NVALUES];
...
int main()
{
  CheckMyValue[0] = Mytest1.Value;
  CheckMyValue[1] = Mytest2.Value;
  ...

第二题:

CheckMyValueint的数组,但是你声明它是指向int的指针数组。因此 int *CheckMyValue[]; 应更改为 int CheckMyValue[NVALUES]; 其中 NVALUES 是数组中的条目数。

你在这里犯了一些错误你需要在某个函数中编写你的代码片段,比如 EEPROMDataTest() 并从主例程或其他线程上下文中调用它:

EEPROMDataTest()
{
Mytest1.Value = DATAEE_ReadByte(21); // Here i'm reading from epprom
Mytest2.Value = DATAEE_ReadByte(22); // Here i'm reading from epprom

// i need each eeprom values(from volatile variables) to get them inside an array

int  CheckMyValue[] = {Mytest1.Value, Mytest2.Value ... }
 //process further.
}

我假设您正在从 EEPROM 读取。所以,DATAEE_ReadByte 不是宏。