首页 > 解决方案 > 结构中相同的 ArrayName 具有不同的 ID

问题描述

我想知道我是否可以创建两个具有相同名称但具有不同大小和不同 ID 的寄存器。示例我需要创建一个包含 40 个元素和另一个包含 10 个元素的 MenuRegister;我正在使用两个寄存器相同的例程。直到现在我需要重新创建我的例程,因为每个寄存器都有不同的名称。我可以创建两个具有相同名称但不同 ID 的寄存器吗?

例子

 typedef union
{
  unsigned int Value;
  unsigned char bytes[2];

}NonStaticParameters;
//////////WaterPellet///////////////////
extern volatile NonStaticParameters MenuRegister[40];
extern volatile NonStaticParameters ExtraMenuRegister[10];

我正在重新声明错误数组维度

这是一个常规示例

void TestRoutine()
{
MenuRegister[1].Value={User has set its Value}
....
....
..
..

}

标签: cmplab

解决方案


正如评论中已经建议的那样,您可能想要这个:

extern volatile NonStaticParameters MenuRegister_1[40];  // different names here
extern volatile NonStaticParameters MenuRegister_2[10];

void TestRoutine(NonStaticParameters menu[], int size)   // TestRoutine with parameter and size
                             // the size parameter is useful so you know
                             // the number of elements in the register
{
  menu[1].Value={User has set its Value}
  ....
  ....
}

TestRoutine(MenuRegister_1, sizeof(MenuRegister_1) / sizeof(MenuRegister_1[0]));
...
TestRoutine(MenuRegister_2, sizeof(MenuRegister_1) / sizeof(MenuRegister_1[0]));

推荐阅读