Добрый вечер!
В утилите обработки MSR регистров CPU данные сохраняются в таком виде:
{ 0x10000021, MSRTYPE_RDWR, MSR2(0x000000FF, 0xFFF00000), "GLIU0_P2D_BM1", "GLIU0 P2D Base Mask Descriptor 1", {
{ 63, 3, "PDID1", "Descriptor Destination ID", PRESENT_BIN, {
{ MSR1(0), "Port 0 = GLIU0:GLIU GLIU1:GLIU" },
{ MSR1(1), "Port 1 = GLIU0:GLMC GLIU1:Interface to GLIU0" },
{ MSR1(2), "Port 2 = GLIU0:Interface to GLIU1 GLIU1:Not Used" },
{ MSR1(3), "Port 3 = GLIU0:CPU Core GLIU1:GLCP" },
{ MSR1(4), "Port 4 = GLIU0:DC GLIU1:GLPCI" },
{ MSR1(5), "Port 5 = GLIU0:GP GLIU1:GIO" },
{ MSR1(6), "Port 6 = GLIU0:VP GLIU1:Not Used" },
{ MSR1(7), "Port 7 = GLIU0:Not Used GLIU1:Not Used" },
{ BITVAL_EOT }
}},
{ 36, 1, "PCMP_BIZ", "Compare Bizarro Flag", PRESENT_BIN, {
{ MSR1(0), "Only act if Bizarro Flag = 0 (Memory or I/O)" },
{ MSR1(1), "Only act if Bizarro Flag = 1 (PCI, Shutdown or Halt)" },
{ BITVAL_EOT }
}},
{ 59, 20, RESERVED },
{ 39, 20, "PBASE", "Physical Memory Address Base", PRESENT_HEX, {
{ BITVAL_EOT }
}},
{ 19, 20, "PMASK", "Physical Memory Address Mask", PRESENT_HEX, {
{ BITVAL_EOT }
}},
{ BITS_EOT }
}},
Все хорошо, однако в таком виде невозможно учитывать взаимосвязанные биты и регистры, которые либо недоступны в зависимости от значения других, либо меняют свой смысл.
Вопрос: какую структуру данных выбрать для добавления таких связей, при том, что их будет немного, значительно меньше, чем таких, «линейных» данных.
Язык программрования - Си.