只要做硬件产品的公司,必然要编写各种管理软件,处理与硬件的协议,485,TCP。等等 。传输数据时总是要定义结构体的,于是这类项目中,基本都是硬件说了算,而软件往往成了悲哀的附庸,而往往软件的复杂性就在于兼容不断更新的硬件版本。由此,BUG不断。
此BLOG的主题就是:软件设计人员要尽可能参与到硬件产品的设计上去,即使看起来只是一个新硬件的开发或者改动,看起来和软件没什么 关系,只要协议保持不变,软件就独立了。但还是要参与,要了解设计理念与细节,否则,硬件就是一个黑盒子。
软件要独立,但要了解硬件具体是怎么设计的。按协议 ,按细节,以软件自身的设计方式为准,不要去迎合硬件的设计。
举例说明:
硬件中的一个设置参数的协议,可能需要以下参数:
句柄(或者IP)
INT A
BYTE B
CHAR C[100]
CHAR *D
与其费尽力气去考虑声明顺序,数据类型,内存对齐,不如完全忽视硬件方面的字段声明,按软件自己的要求想怎么声明就怎么声明
至于当硬件需要我们提供数据时,很好,
一句解决问题
REF BYTE PARA
如:
[DllImport(CommDLL, EntryPoint = "Set_NodePara")]
public static extern int Set_NodePara
(
IntPtr hwnd,
ref byte SysPara
);
至于硬件收到了怎么去解析,那是他们的事情,我们只要按协议,把我们用到的数据写到内存中去就好了。没我们什么 事。
相当于提供N个适配器来匹配不同的硬件版本。
为什么 一定要声明为
[DllImport(CommDLL, EntryPoint = "Set_NodePara")]
public static extern int Set_NodePara
(
IntPtr hwnd,
int a,
byte b,
StringBuilder c,
ref byte d
);
软件要有自己的思维。