问题描述:
上位机传递参数到下位机中,参数类型为结构体,为了保证准确传递,c语言和python都有自己的方式来保证传递正确。
上位机python代码:
class HT_TAL_TBS_CMP_TypeDef(LittleEndianStructure):
_pack_ = 1
_field_ = [
('c', c_int16),
('lcmp', c_int16),
('hcmp', c_int16),
('a', c_int16),
('b', c_int16)
]
class HT_TAL_TBS_CONFIG_Typedef(LittleEndianStructure):
_pack_ = 1
_field_ = [
('channel_en', HT_TAL_TBS_EN_Typedef),
('ie', HT_TAL_TBS_EN_Typedef),
('clk', c_uint8),
('filter', c_uint8),
('TBSPRD', HT_TAL_TBSPRD_TypeDef),
('OSRSEL', c_uint8),
('cmp', HT_TAL_TBS_CMP_TypeDef)
]
# 传递的数据:
'cmp': {
'c': 0xabcd,
'低阈值': 0x54B2,
‘高阈值': 0x13f6,
’a': 0x1234,
'b': 0x5678
}
下位机keil工程c代码:
#pragma pack(1)
typedef struct{
int16_t c;
int16_t lcmp;
int16_t hcmp;
int16_t a;
int16_t b;
}TBS_CMP_T;
typedef struct{
TBS_EN_T channel_en;
TBS_EN_T ie;
uint8_t clk;
uint8_t filter;
TBSPRD_T TBSPRD;
uint8_t OSRSEL;
TBS_CMP_T cmp;
} TBS_CONFIG_T;
#pragma pack()
不加#pragma pack 结果,上位机字节对齐了但下位机没有,会出现数据缺失、移位的错误,此时下位机收到的数据如下:
加上后收到的数据和要传递的数据保持一致了