我有一个结构Register
和一个结构ModbusReadStruct
。 Register
声明如下:
typedef struct {
int TypeID;
char InstrumentType[32];
char RegTag[32];
char Protocol[32];
int RegNum;
char RW[32];
char RegisterType[32];
char Signed[32];
char Inverted[32];
char DataType[32];
int Counts;
} Register;
我想声明结构ModbusReadStruct
,如下所示:
typedef struct {
int Address;
int Port;
int BaudRate;
int DataBits;
int StopBits;
int RegID;
int Sampling;
char InstanceName[32];
int InstNum;
int MBNum;
int PortNum;
int RegNum;
Register Register[64];
} ModbusReadStruct;
然而,这种确切的实现会导致错误(Segmentation Fault)。实现与上述想法类似的功能的最佳方法是什么?
答案 0 :(得分:1)
您发布的结构声明完全正确,除了您对类型和Register
的结构成员名称使用相同的标识ModbusReadStruct
。
分段错误表明您的代码存在问题,而不是结构声明本身。
如 EOF 所述,如声明的那样,ModbusReadStruct
结构的大小约为17KB。虽然在现代PC上可以使用自动存储(也称为堆栈)分配这样的对象,但是嵌入式系统上的堆栈空间可能要小得多。分配足够大小的ModbusReadStruct
的本地数组也是一个问题。