定义了某个位域占多少个bit;但是python为了字节对齐,还是会在中间插入很多0;
后来加了_pack_ = 1 对某些情况还是有0插入;
_pack_ = 1 感觉有bug存在

在使用ctypes的时候, 位域必须用8bit对齐,只有人工把原来的位域拆开,才能解决这个问题

class mac_table_s(Structure):
    _pack_ = 1
    _fields_ =[("outer_ethtype_sel",c_uint8,3), #b0 2:0
            ("outer_pcp_data",c_uint8,3),    #b0 5:3
            ("outer_pcp_operation",c_uint8,2) #b0 7:6
            ]
class mac_table_u(Union):
    _fields_ = [("fields", mac_table_s),
                            ("packed", c_uint32*MAC_TABLE_SIZE_32BITWORDS)    ]

union 共享内存 fieldspacked共享内存,
可以实现在fields中定义各个位域,然后使用packed 以32bit为单位将reg写入


constant007
1 声望1 粉丝

承接数据清洗合并,联系q29997442