在数组中使用volatile类型

时间:2018-02-05 13:03:07

标签: c mplab

我需要创建一些extern volatile变量。然后在每个变量里面从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 ... };

我得到所需的错误常量表达式。如何更改此功能才能使其正常工作?

2 个答案:

答案 0 :(得分:1)

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

而不是:

...
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是数组中的条目数。

答案 1 :(得分:0)

你在这里犯了一些错误,你需要在一些函数中写一段代码,比如说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不是宏。