Ich werde C-Code in Java umschreiben. Der Kern des ursprünglichen C-Codes ist ein HW-Wrapper. In C waren wir mit vielen Gewerkschaften für jede HW registrieren zB:Wie schreibe ich viele kleine Gewerkschaften von C in Java
typedef union RegIntStatus
{
u8 reg;
struct
{
u8 bit0_abc:1;
u8 bit1_cde:1;
u8 bit2_xyz:1;
u8 bit3_7_rsvd:5;
} bits;
} regABC;
dann haben wir es wie
regABC r;
r.reg=0
r.bits.bit0_abc=1;
call(r.reg)
vorstellen, dass es viele dieser Register ist. Sagen wir 40. Wie implementiert man es in Java ohne 40 Klassendateien? Ich dachte, eine Klasse wie
univerasl_reg<T> { // where T will be some "enum"
public byte b;
public byte set(T bit_mask,bool val) {
// here is compile error it does not know variable bit_mask.v
if(val) {b |= bit_mask.v}
else b &= bit_mask.v^0xFF;
}
}
dann eine Datei enthält mehrere Aufzählungen erstellen wie:
public static enum RegTst{
b1_abc(0x01),
b2_xyz(0x02),
b3_klm(0x04);
public byte v;
RegTst(int val){
v = (byte)val;
}
}
dann würde ich es verwenden möchte:
univerasl_reg<RegTst> rt1;
rt1.set(RegTst.b2_xyz,1)
call(rt1.b)
Aber es funktioniert nicht weil es scheint, ich kann enum Variable .v in univerasl_reg nicht verwenden. Es ergibt "Java canot find symbol v". Weißt du, warum? Wissen Sie, wie Register, um zu codieren
zu haben - vorzugsweise eine Datei
- Steuerungsart zwischen verschiedenen Registern (zB
new univerasl_reg<RegTst>.set(RegTst_OTHER.b2_xyz,1)wird zu Fehler führen, wie ich bin mit RegTst aber RegTst_OTHER nicht)
- und mnemonic für Bits (z. B. RegTst.b1_abc)
fanden Sie eine 'HashMap'? –
vikingsteve
es sieht interessant aus, aber leider hat der Stil von Java keine Magie. Generisch in Java, sollte ich sagen, es ist scheiße. Im Wesentlichen führen alle generischen Typen schließlich zu "Object". vielleicht verstehe ich dein problem nicht gut genug, aber 40 klassen-dateien können die beste lösung sein, wenn du 40 entsprechende "struct" in c hast. – HuStmpHrrr
@HuStmpHrr: 40 Klassen ist eine Option. Aber ich denke, Enums sind besser geeignet und eine Lösung von Marko Topolink ermöglicht es mir, den Wert von enum zu nutzen. –