Będę przepisać kod C na Javę. Rdzeniem oryginalnego kodu C jest opakowanie HW. W C używaliśmy wiele związków dla każdego HW zarejestrować np:jak napisać wiele małych związków z C na 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;
następnie użyliśmy go jak
regABC r;
r.reg=0
r.bits.bit0_abc=1;
call(r.reg)
wyobrazić, istnieje wiele z tych rejestrów. Powiedzmy 40. Jak zaimplementować go w java, nie mając 40 plików klasy? Myślałam, aby utworzyć jedną klasę jak
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;
}
}
następnie jeden plik może zawiera wiele stałe teksty jak:
public static enum RegTst{
b1_abc(0x01),
b2_xyz(0x02),
b3_klm(0x04);
public byte v;
RegTst(int val){
v = (byte)val;
}
}
następnie chciałbym używać go lubię:
univerasl_reg<RegTst> rt1;
rt1.set(RegTst.b2_xyz,1)
call(rt1.b)
Ale to nie działa ponieważ wydaje się, że nie mogę użyć zmiennej enum .v w univerasl_reg. Daje "Java canot find symbol v". Wiesz dlaczego? Czy wiesz jak kod rejestrów w celu uzyskania
- najlepiej jeden plik
- Rodzaj sterowania pomiędzy różnymi rejestrami (np
new univerasl_reg<RegTst>.set(RegTst_OTHER.b2_xyz,1)prowadzi do błędów, jak nie używam RegTst ale RegTst_OTHER)
- i dla Mnemonic bity (np. RegTst.b1_abc)
Czy Rozważmy 'HashMap'? –
vikingsteve
wygląda interesująco, ale niestety styl Java nie ma magii. ogólny w Javie, powinienem powiedzieć, to jest do bani. zasadniczo wszystkie typy generyczne spowodują ostatecznie "Object". może nie rozumiem twojego problemu wystarczająco dobrze, ale posiadanie 40 plików klas może być najlepszym rozwiązaniem, jeśli masz 40 odpowiadających 'struct' w c. – HuStmpHrrr
@HuStmpHrr: opcja 40 klas jest opcją. Myślę jednak, że bardziej odpowiednie są wyliczanki, a rozwiązanie Marko Topolink pozwala mi wykorzystać wartość enum. –