lassen Sie uns sagen, dass ich ein paar Hardware-Register haben, die innerhalb einer Enum definiert sind:Iterate durch Enums in C?
typedef enum registers
{
REG1 = 0,
REG2 = 1,
REG3 = 2,
REG4 = 4,
REG5 = 6,
REG6 = 8,
REG_MAX,
}
Ich habe die Standardwerte für diese Register (eigentlich nicht, in welcher Art und Weise beschlossen, sie zu definieren, #define , Anordnung oder ENUM ...):
// This is just conceptual, not really an enum, array or #define :)
typedef enum values
{
VALUE_REG1 = A,
VALUE_REG2 = B,
VALUE_REG3 = C,
VALUE_REG4 = 53,
VALUE_REG5 = 88,
VALUE_REG6 = 24,
MAX_NUM_REG_VALUES
}
I haben eine Funktion, die die Hardware-Register lesen:
uint8 readRegs(uint8 regaddr);
Nun würde ich gerne die Register enum durchlaufen, und auf jedem Element die readRegs() Funktion aufrufen und mit den enum reg_values vergleichen. Es sieht aus wie:
registers regs;
reg_values values;
uint8 readfromregs;
for (regs = REG1; regs <= REG_MAX; regs++)
{
readfromregs = readRegs(regs);
for (values = VALUE_REG1; reg_values <= MAX_NUM_REG_VALUES; reg_values++)
{
if (readfromregs != values)
{
// Value not correct
}
else
{
// value correct
}
}
}
Das wird nicht funktionieren, weil es nicht möglich ist, in Enum auf diese Weise zu wiederholen. Hat jemand eine bessere Lösung? Wie definiert man das Konstrukt enum reg_values ? Die Enum-Register müssen behoben werden (dies können keine Änderungen am Array sein).
'MAX_NUM_REG_VALUES' 25 ist, nur damit Sie wissen . – StoryTeller
Sie sollten beginnen '' '' mit ',' in Ihren Enums zu ändern ...;) – LPs
Ein Array, natürlich. Sie könnten ein Array von Paaren oder Strukturen definieren (z. B. pair). –
KonstantinL