发明内容
有鉴于此,本发明的目的在于提供一种PCI硬件应用程序兼容运行的方法和装置,通过服务程序扫描并获取描述PCI硬件的数据结构列表,然后通过向各个应用程序分发实现共享该列表,各个应用程序能够通过所述可以共享的PCI设备硬件数据结构列表对目标PCI硬件设备进行操作。
一种PCI硬件应用程序兼容运行的方法,所述方法应用于当调用应用程序对PCI硬件进行操作时,包括:
检测当前调用的对PCI硬件进行操作的应用程序的个数;
当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取描述所述PCI硬件的数据结构列表,并将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。
上述的PCI硬件应用程序兼容运行的方法,优选的,还包括:
当所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件,获取所述PCI硬件的数据结构列表;
依据所述数据结构列表中的目标PCI硬件的信息,应用所述应用程序对所述目标PCI硬件进行操作。
上述的PCI硬件应用程序兼容运行的方法,优选的,所述数据结构列表中的每个数据结构包含的成员变量包括:
表征硬件板卡资源信息的句柄Handle;
表征所述硬件板卡的身份信息的ID;
表征所述硬件板卡在PCI插槽上的位置的插槽Slot。
上述的PCI硬件应用程序兼容运行的方法,优选的,当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件包括:
启动预设服务程序,应用所述服务程序对所述PCI硬件进行扫描,依据扫描结果对所述数据结构列表中的每个数据结构对应的ID信息和Slot信息进行更新;
应用所述服务程序打开所述PCI硬件,对所述数据结构列表中的每个数据结构对应的Handle信息进行更新,并得到所述PCI硬件的操作通道。
上述的PCI硬件应用程序兼容运行的方法,优选的,当所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件包括:
启动所述应用程序,应用所述应用程序对所述PCI硬件进行扫描,依据扫描结果对所述数据结构列表中的每个数据结构对应的ID信息和Slot信息进行更新;
应用所述应用程序打开所述PCI硬件,对所述数据结构列表中的每个数据结构对应的Handle信息进行更新,并得到所述PCI硬件的操作通道。
上述的PCI硬件应用程序兼容运行的方法,优选的,对所述PCI硬件进行操作的应用程序在同一时间内对应的目标PCI硬件不同;所述PCI硬件进行操作的应用程序对同一目标PCI硬件的操作为在不同时间分别进行。
上述的PCI硬件应用程序兼容运行的方法,优选的,所述将所述数据结构列表发布给对所述PCI硬件进行操作的所有的应用程序包括:
应用所述服务程序通过反射调用获取所述应用程序的公开接口,并通过所述公开接口将所述PCI硬件的数据结构列表发布给所述应用程序。
上述的PCI硬件应用程序兼容运行的方法,优选的,所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作包括:
依据目标PCI硬件的ID信息和Slot信息,应用所述应用程序获得所述数据结构列表中对应的数据结构;
依据所述数据结构中的Handle信息,应用所述应用程序对所述目标PCI硬件进行操作。
一种PCI硬件应用程序兼容运行的装置,所述装置应用于当调用应用程序对PCI硬件进行操作时,包括:
检测器,用于检测当前调用的对PCI硬件进行操作的应用程序的个数;
第一控制器,用于当所述检测器检测得到所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取所述PCI硬件的数据结构列表,并将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。
上述的PCI硬件应用程序兼容运行的装置,优选的,还包括:
第二控制器,用于当所述检测器检测得到所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件,获得所述PCI硬件的数据结构列表,并依据所述数据结构列表中的目标PCI硬件的信息,应用所述应用程序对所述目标PCI硬件进行操作。
本发明提供的一种PCI硬件应用程序兼容运行的方法,所述方法应用于当调用应用程序对PCI硬件进行操作时,包括:检测当前调用的对PCI硬件进行操作的应用程序的个数;当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取描述所述PCI硬件的数据结构列表,并将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。采用本发明的提供的一种PCI硬件应用程序兼容运行的方法,当对PCI硬件进行操作的应用程序的个数为至少两个时,通过服务程序扫描并获取描述PCI硬件的数据结构列表,然后通过向各个应用程序分发实现共享该列表,各个应用程序能够通过所述可以共享的PCI设备硬件数据结构列表对目标PCI硬件设备进行操作,避免应用程序再次扫描导致的异常,使得各个应用程序能够兼容运行。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
反射(Reflection)是现代开发语言(如Java和C#)及其相应的运行时库(如JDK和.NET)所支持的一种重要机制。通过反射,可以在运行时获得程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。通过反射即可对每一个类型完全了解。当获得了构造函数的信息时,即使在某一对象的类型在编译时还不知道,也可直接创建该对象。
本发明就是基于反射的上述特点,通过服务程序将PCI硬件的数据结构列表分享给多个应用程序,进而实现多个应用程序对PCI操作的兼容运行。
参见图1,示出了本发明提供的一种PCI硬件应用程序兼容运行的方法实施例的流程图,包括:
步骤S101:检测当前调用的对PCI硬件进行操作的应用程序的个数;
通过采用本发明的方法,可以实现多个应用程序同时对PCI硬件进行操作,多个应用程序和一个应用程序对PCI硬件进行操作的处理方式可以不同,故需要对对PCI硬件进行操作的应用程序的个数进行检测。
步骤S102:当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取所述PCI硬件的数据结构列表,并将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。
实时检测当前调用的对PCI硬件进行操作的应用程序的个数,当对PCI硬件进行操作的应用程序至少为两个时,需要这些应用程序兼容运行,此时启动预设的服务程序,服务程序完成扫描和打开所述PCI硬件的动作,得到PCI硬件的数据结构列表,所述应用程序根据该数据结构列表中的信息得到目标PCI硬件的信息并对目标PCI硬件进行操作。
对所述PCI硬件进行操作的所有的应用程序在同一时刻操作的目标PCI硬件不同,这是由硬件的操作特点决定的,同一时间内对一个硬件只能有一个操作(读或写)。
参见图2示出的第一具体流程图,本步骤可具体包括:
步骤S201:当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取所述PCI硬件的数据结构列表;
当所述应用程序的个数为至少两个时,启动预设服务程序获取PCI硬件的数据结构列表。
参见图3示出的第二具体流程图,图2中的步骤S201可具体包括:
步骤S301:启动预设服务程序,应用所述服务程序对所述PCI硬件进行扫描,依据扫描结果对所述数据结构列表中的每个数据结构对应的ID信息和Slot信息进行更新;
判断对PCI硬件进行操作的应用程序的个数,当判断结果为对PCI硬件进行操作的应用程序的个数为至少两个时,有多个应用程序对PCI硬件进行操作,需要兼容运行这些应用程序,启动预设的服务程序,所述应用程序通过服务程序获取到可分享的PCI硬件的数据结构列表。
参见图4示出了PCI硬件的数据结构,该数据结构包含的成员变量包括:句柄Handle、身份ID(Identity)和插槽Slot。
每个数据结构列表中包含有多个数据结构,每个数据结构对应一个PCI硬件板卡。
其中,句柄Handle表征硬件板卡资源信息;
在没有打开PCI硬件之前,Handle的数值为Null,在打开之后,其数值为一个整型数,比如十进制的632531或者十六进制的0x9A6D3等。
ID表征所述硬件板卡的身份信息;
所述ID内部包括两个数值:一个是Vendor ID,代表了该板卡的厂商的ID,一个是Device ID,代表了该板卡的类型ID。
实际操作中,一台电脑上的设备中,上述两个ID数值一般不同,应用程序通过这两个ID数值确认某一板卡是否是想要操作的目标PCI硬件板卡。
插槽Slot表征所述硬件板卡在PCI插槽上的物理位置。
插槽表示的是该板卡位于哪个插槽上,即板卡在插槽的具体位置。
Slot本身包括三个变量,其中一个描述了插槽slot,一个描述了总线bus,通过这两个变量就可以准确定位某一块板卡的具体位置。
PCI硬件的物理地址是由Slot所描述的,即该硬件位于哪个插槽上,逻辑地址由Handle决定的,即描述了在操作系统的视角,该PCI硬件应该是第几个设备,应该给其分配哪些内存空间映射等。
扫描(Scan)的目的是获得所有PCI插槽上的PCI设备的信息,即在哪些插槽上有设备,哪些插槽上没有设备,这些PCI设备的信息包括Vendor ID、Device ID和Slot。
所述服务程序对PCI硬件进行扫描,扫描得到PCI设备的信息后,应用程序并不能只采用这些设备信息对所述PCI设备进行操作,需要后续的打开步骤。
步骤S302:应用所述服务程序打开所述PCI硬件,对所述数据结构列表中的每个数据结构对应的Handle信息进行更新,并得到所述PCI硬件的操作通道。
打开的目的是让代表一个具体硬件设备的PCI_Device数据结构类中的句柄Handle由Null变为一个具体的整型数。其本质是操作系统给这个设备分配了一个代表该设备资源的标号,相应的创建一个通道,比如,当应用程序调用读写函数前往该Handle代表的设备后进行读写操作时,相当于通过该通道实现了对具体设备硬件设备的操作。即对所述PCI硬件进行打开,操作系统给PCI硬件相应的板卡分配特定的资源号并创建对所述板卡进行操作的操作通道,此时应用系统通过该句柄Handle访问所述PCI硬件中相应的板卡。
上述的代表该设备资源的标号就是一个特殊的整型数,将被保存在Handle这个变量中。从操作系统的角度上看,所有的设备都是一个资源,包括网口、USB接口、PCI设备等,系统会给所有的设备做一个排列并给每个设备一个标号来管理这些设备。
步骤S202:将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。
应用所述服务程序通过反射调用获取所述应用程序的公开接口,并通过所述公开接口将所述PCI硬件的数据结构列表发布给所述应用程序。
实际实施中,服务程序是通过一个XML格式的配置文件来管理多个应用程序同时运行。
服务程序的配置文件包含一个列表,列表包含多个应用程序信息单元,每一个应用程序信息单元对应了一个具体的应用程序的相关信息,通过读取这个应用程序信息单元里面的信息,服务程序可以自动生成对这个应用程序的调用入口即公开接口(例如:在服务程序中的一个按钮,点击该按钮可以运行这个应用程序逻辑),并在调用过程中实现对这个应用程序逻辑分发同一份硬件设备资源(PCI硬件的数据结构列表)的工作。
参见图5所示的应用程序信息单元的数据结构,包括4种变量,具体为:
string ExeName,表征应用程序的路径;
string InvokeName,表征应用程序的主界面窗体的类名;
string Description,表征在服务程序中对该应用程序调用入口描述;
bool NeedSetDevices,表征是否需要设置PCI设备列表。
每个应用程序包含有一个公开接口Public void SetDevices(List<PCI_Device>devices)即应用程序的主界面窗体类中的一个公开函数,应用所述服务程序通过反射调用该应用程序的主界面窗体的类名进而调用该公开接口,调用该公开接口实现了分发和共享描述当前所有PCI硬件设备的数据结构列表,调用完成后通过该类型动态生成应用程序界面对象并显示,服务程序通过该公开接口将PCI硬件的数据结构列表发布给该应用程序,同样的所有对PCI硬件进行操作的应用程序均通过各自的公开接口得到服务程序发布的PCI硬件的数据结构列表。
在本发明提供的方法中,多个应用程序同时对PCI硬件进行操作,应用程序不再进行扫描得到描述当前所有PCI硬件的数据结构列表的步骤,而是直接从服务程序处得到描述当前所有PCI硬件设备的数据结构列表。
所有的应用程序获得的是同一个数据结构列表,即,所有的应用程序内部包括的一个PCI硬件列表的变量得到的是相同的内容,指向的是同一个内存空间,实现了所有的应用程序分享同一个描述当前所有PCI硬件设备的数据结构列表,能够分别对其目标PCI硬件进行兼容操作。
服务程序对所述PCI硬件进行扫描并打开后,其对应的数据结构中的Handle变量将获得一个具体的资源号,此时应用系统通过该数据结构中的句柄Handle访问所述PCI硬件板卡,比如,当应用程序调用读写函数前往该Handle代表的设备进行读写操作时,相当于通过操作系统为这个资源号创建的一个通道实现了对具体设备硬件设备的操作。
某一应用程序对PCI硬件进行操作时,目标硬件可能为一个,也可为多个。
实际实施中,当增加新的应用程序时,只需要修改服务程序的配置文件,增加需要同时兼容运行的应用程序对应的应用程序信息单元,则服务程序就会自动生成对要运行的应用程序的调用入口,用户就可以在服务程序上通过该入口运行这些应用程序。
参见图6示出的第三具体流程图,步骤S202中应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作具体包括:
步骤S401:依据目标PCI硬件的ID信息和Slot信息,应用所述应用程序获得所述数据结构列表中对应的数据结构;
在PCI硬件的数据结构列表中包含了全部PCI硬件的信息,在数据结构列表中,每个数据结构对应一个PCI硬件设备,Slot表示目标PCI硬件所在的具体物理位置,应用程序对PCI硬件中的某目标PCI硬件进行操作,应用程序依据目标PCI硬件的ID信息和Slot信息在数据结构列表中得到目标PCI对应的数据结构,该数据结构中包含有句柄Handle,在步骤S302中应用所述服务程序对所述PCI硬件进行打开,操作系统给PCI硬件板卡分配资源号并创建对所述板卡进行操作的操作通道,获得到所述Handle就是得到了通往PCI硬件的操作通道。
步骤S402:依据所述数据结构中的Handle信息,应用所述应用程序对所述目标PCI硬件进行操作。
应用程序得到目标PCI硬件的信息,该信息中包含有Handle,也是就获得了通往目标PCI硬件的操作通道,此时应用程序就能通过该操作通道访问所述PCI硬件中相应的设备,即对目标PCI硬件设备进行操作。
通过采用本发明的方法,可以实现多个应用程序同时对PCI硬件进行操作,对所述PCI硬件进行操作的应用程序在同一时间内对应的目标PCI硬件不同;所述PCI硬件进行操作的应用程序对同一目标PCI硬件的操作为在不同时间分别进行。这是因为PCI硬件的读写特性制约的,某一时间点只能有一个应用程序对某个PCI硬件进行操作(包括读操作或是写操作)。
参见图7,示出了本发明提供的一种PCI硬件应用程序兼容运行的方法实施例的另一种流程图,本流程图是在图1的步骤S101之后还包括:
步骤S103:当所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件,获取所述PCI硬件的数据结构列表;
判断对PCI硬件进行操作的应用程序的个数,当判断结果为,对PCI硬件进行操作的应用程序的个数为一个时,启动所述应用程序,该应用程序直接对PCI硬件进行操作。
参见图8示出的第四具体流程图,步骤S103可具体包括:
步骤S501:启动所述应用程序,应用所述应用程序对所述PCI硬件进行扫描,依据扫描结果对所述数据结构列表中的每个数据结构对应的ID信息和Slot信息进行更新;
扫描的目的是获得所有PCI插槽上的PCI设备的信息,即在哪些插槽上有设备,哪些插槽上没有设备,这些PCI设备的信息包括Vendor ID、Device ID和Slot等。
所述应用程序对PCI硬件进行扫描,扫描得到PCI设备的信息后,应用程序并不能只采用这些设备信息对所述PCI设备进行操作,需要后续的打开步骤。
步骤S502:应用所述应用程序打开所述PCI硬件,对所述数据结构列表中的每个数据结构对应的Handle信息进行更新,并得到所述PCI硬件的操作通道。
打开的目的是让代表一个具体硬件设备的PCI_Device数据结构类中的句柄Handle由Null变为一个具体的整型数。其本质是操作系统给这个设备分配了一个代表该设备资源的标号,相应的创建一个通道,比如,当应用程序调用读写函数前往该Handle代表的设备后进行读写操作时,相当于通过该通道实现了对具体设备硬件设备的操作。即对所述PCI硬件进行打开,操作系统给PCI硬件相应的板卡分配资源号并创建对所述板卡进行操作的操作通道,此时应用系统通过该句柄Handle访问所述PCI硬件中相应的板卡。
上述的代表该设备资源的标号就是一个特殊的整型数,将被保存在Handle这个变量中。从操作系统的角度上看,所有的设备都是一个资源,包括网口、USB接口、PCI设备等,系统会给所有的设备做一个排列并给每个设备一个标号来管理这些设备。
在PCI硬件的数据结构列表中包含了当前全部PCI硬件的信息,应用程序对PCI硬件中的某目标PCI硬件进行操作,在所述PCI硬件的数据结构列表中获取目标PIC硬件的信息,该信息中包含有句柄Handle,对所述PCI硬件进行打开,操作系统给PCI硬件相应的板卡分配特定的资源号并创建对所述板卡进行操作的操作通道,获得到所述Handle就是得到了通往PCI硬件的操作通道。
步骤S104:依据所述数据结构列表中的目标PCI硬件的信息,应用所述应用程序对所述目标PCI硬件进行操作。
当应用程序对所述PCI硬件进行扫描并打开后,操作系统分配给PCI硬件相应的板卡特定的资源号,并创建通道,此时应用系统通过该数据结构中的Handle的访问所述PCI硬件设备,比如,当应用程序调用读写函数前往该Handle代表的设备后进行读写操作时,相当于通过该通道实现了对具体设备硬件设备的操作。
某一应用程序对PCI硬件进行操作时,目标硬件可能为一个,也可为多个。
所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作的过程与图6所示的第三具体流程图中步骤相同,不再赘述。
由上述可知,本发明提供的一种PCI硬件应用程序兼容运行的方法,包括,检测当前调用的对PCI硬件进行操作的应用程序的个数;当所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取所述描述当前所有PCI硬件的数据结构列表,并将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。当所述应用程序的个数为一个时,启动所述应用程序扫描并打开所述PCI硬件,获取所述描述当前所有PCI硬件的数据结构列表;依据所述数据结构列表中的目标PCI硬件的信息,应用所述应用程序对所述目标PCI硬件进行操作。采用本发明的提供的一种PCI硬件应用程序兼容运行的方法,当对PCI硬件进行操作的应用程序的个数为一时,应用程序可直接获取PCI硬件的数据结构列表;当所述个数为至少两个时,服务程序得到PCI硬件的数据结构列表,并将该数据结构列表发布给每个应用程序分享,解决了当多个应用程序同时操作PCI硬件时导致的异常,使得各个应用程序能够兼容运行。
与上述的方法相对应的,本发明实施例中还提供了一种PCI硬件应用程序兼容运行的装置。
参见图9,示出了本发明提供的一种PCI硬件应用程序兼容运行的装置实施例的结构示意图,包括:检测器101和第一控制器102。
其中,所述检测器101用于检测当前调用的对PCI硬件进行操作的应用程序的个数;
通过采用本发明的方法,可以实现多个应用程序同时对PCI硬件进行操作,多个应用程序和一个应用程序对PCI硬件进行操作的处理方式不同,故需要检测器101检测对PCI硬件进行操作的应用程序的个数。
其中,所述第一控制器102用于当所述检测器101检测得到所述应用程序的个数为至少两个时,启动预设服务程序,应用所述服务程序扫描并打开所述PCI硬件,获取所述描述当前所有PCI硬件的数据结构列表,并将所述数据结构列表发布给当前对所述PCI硬件进行操作的所有的应用程序,使所述应用程序依据所述数据结构列表中的目标PCI硬件的信息,对所述PCI硬件进行操作。
实时检测当前调用的对PCI硬件进行操作的应用程序的个数,当对PCI硬件进行操作的应用程序至少为两个时,需要这些应用程序兼容运行,此时第一控制器102启动预设的服务程序,应用所述服务程序完成扫描和打开所述PCI硬件的动作,得到描述当前所有PCI硬件的数据结构列表,使得所述应用程序根据该数据结构列表中的信息得到目标PCI硬件的信息并对目标PCI硬件进行操作。
PCI硬件的数据结构列表中的每个数据结构包含的成员变量包括:句柄Handle、ID和插槽Slot等。
其中,句柄Handle表征硬件板卡资源信息;
在没有打开PCI硬件之前,Handle的数值为Null,在打开之后,其数值为一个特殊的整型数,比如十进制的632531或者十六进制的0x9A6D3等。
ID表征所述硬件板卡的身份信息;
所述ID内部包括两个数值:一个是Vendor ID,代表了该板卡的厂商的ID,一个是Device ID,代表了该板卡的类型ID。
实际操作中,一台电脑上的设备中,上述两个ID数值一般不同,应用程序通过这两个ID数值确认某一板卡是否是想要操作的目标PCI硬件板卡。
插槽Slot表征所述硬件板卡在PCI插槽上的物理位置。
插槽表示的是该板卡位于哪个插槽上,即板卡在插槽的具体位置。
Slot本身包括三个变量,其中一个描述了插槽slot,一个描述了总线bus,通过这两个变量就可以准确定位某一块板卡的具体位置。
PCI硬件的物理地址是由Slot所描述的,即该硬件位于哪个插槽上,逻辑地址由Handle决定的,即描述了在操作系统的视角,该PCI硬件应该是第几个设备,应该给其分配哪些内存空间映射等。
第一控制器102应用所述服务程序进行扫描的目的是获得所有PCI插槽上的PCI设备的信息,即在哪些插槽上有设备,哪些插槽上没有设备,这些PCI设备的信息包括Vendor ID、Device ID和Slot等。
第一控制器102应用所述服务程序进行打开的目的是让代表一个具体硬件设备的PCI_Device数据结构类中的句柄Handle由Null变为一个具体的整型数,其本质是操作系统给这个设备分配了一个代表该设备资源的标号,相应的创建一个通道,比如,当应用程序调用读写函数前往该Handle代表的设备后进行读写操作时,相当于通过该通道实现了对具体设备硬件设备的操作。即对所述PCI硬件进行打开,操作系统给PCI硬件相应的板卡分配资源号并创建对所述板卡进行操作的操作通道,此时应用系统通过该句柄Handle访问所述PCI硬件中相应的板卡。
上述的代表该设备资源的标号就是一个特殊的整型数,将被保存在Handle这个变量中。从操作系统的角度上看,所有的设备都是一个资源,包括网口、USB接口、PCI设备等,系统会给所有的设备做一个排列并给每个设备一个标号来管理这些设备。
第一控制器102得到所述PCI硬件的数据结构列表后,应用所述服务程序通过反射调用获取所述应用程序的公开接口,并通过所述公开接口将所述PCI硬件的数据结构列表发布给所述应用程序。
每个应用程序包含有一个公开接口Public void SetDevices(List<PCI_Device>devices)即应用程序的主界面窗体类中的一个公开函数,第一控制器102应用所述服务程序通过反射调用该应用程序的主界面窗体的类名进而调用该公开接口,调用该公开接口实现了分发和共享描述当前所有PCI硬件设备的数据结构列表,调用完成后通过该类型动态生成应用程序界面对象并显示,服务程序通过该公开接口将PCI硬件的数据结构列表发布给该应用程序,同样的所有对PCI硬件进行操作的应用程序均通过各自的公开接口得到服务程序发布的PCI硬件的数据结构列表。
所有的应用程序获得的是同一个数据结构列表,也就是说,所有的应用程序内部包括的一个PCI硬件列表的变量得到的是相同的内容,指向的是同一个内存空间,实现了所有的应用程序分享同一个数据结构列表,能够分别对其目标PCI硬件进行兼容操作。
服务程序对所述PCI硬件进行扫描并打开后,操作系统分配给PCI硬件相应的板卡特定的资源号,并创建通道,此时应用系统通过该数据结构中的句柄Handle访问所述PCI硬件板卡,比如,当应用程序调用读写函数前往该Handle代表的设备进行读写操作时,相当于通过该通道实现了对具体设备硬件设备的操作。
某一应用程序对PCI硬件进行操作时,目标硬件可能为一个,也可为多个。
参见图10,示出了本发明提供的一种PCI硬件应用程序兼容运行的装置实施例的另一种结构示意图,在图10中还包括:第二控制器103。
所述第二控制器103用于当所述检测器101检测得到所述应用程序的个数为一个时,启动所述应用程序,扫描并打开所述PCI硬件,获得所述描述当前所有PCI硬件的数据结构列表,并依据所述数据结构列表中的目标PCI硬件的信息,应用所述应用程序对所述目标PCI硬件进行操作。
当所述检测器101检测得到对PCI硬件进行操作的应用程序的个数为一个时,第二控制器103启动所述应用程序,应用所述应用程序直接对PCI硬件进行操作。
第二控制器103应用所述应用程序进行扫描的目的是获得所有PCI插槽上的PCI设备的信息,即在哪些插槽上有设备,哪些插槽上没有设备,这些PCI设备的信息包括Vendor ID、Device ID和Slot等。所述应用程序对PCI硬件进行扫描,扫描得到PCI设备的信息后,应用程序并不能只采用这些设备信息对所述PCI设备进行操作,需要后续的打开步骤。
第二控制器103应用所述应用程序进行打开的目的是让代表一个具体硬件设备的PCI_Device数据结构类中的句柄Handle由Null变为一个具体的整型数。其本质是操作系统给这个设备分配了一个代表该设备资源的标号,相应的创建一个通道,比如,当应用程序调用读写函数前往该Handle代表的设备后进行读写操作时,相当于通过该通道实现了对具体设备硬件设备的操作。即对所述PCI硬件进行打开,操作系统给PCI硬件相应的板卡分配资源号并创建对所述板卡进行操作的操作通道,此时应用系统通过该句柄Handle访问所述PCI硬件中相应的板卡。
上述的代表该设备资源的标号就是一个特殊的整型数,将被保存在Handle这个变量中。从操作系统的角度上看,所有的设备都是一个资源,包括网口、USB接口、PCI设备等,系统会给所有的设备做一个排列并给每个设备一个标号来管理这些设备。
在PCI硬件的数据结构列表中包含了全部PCI硬件的信息,应用程序对PCI硬件中的某目标PCI硬件进行操作,在所述PCI硬件的数据结构列表中获取目标PIC硬件的信息,该信息中包含有句柄Handle,对所述PCI硬件进行打开,操作系统分配给PCI硬件相应的板卡特定的资源号并创建对所述板卡进行操作的操作通道,获得到所述Handle就是得到了通往PCI硬件的操作通道。
某一应用程序对PCI硬件进行操作时,目标硬件可能为一个,也可为多个。
在本发明提供的实施例中,是以PCI硬件为例进行的解释说明,在实际应用中,该硬件应用程序兼容运行的方法和装置也可应用在其他与PCI硬件相类似的硬件领域。
在本发明中提供的一种PCI硬件应用程序兼容运行的方法和装置,是将只有一个应用程序对PCI硬件进行操作和多个应用程序对PCI硬件进行操作的情况分开的,但不限定于此,在实际实施中,也可以将只有一个应用程序对PCI硬件进行操作的情况合并到多个的情况中,只有一个应用程序或多个应用程序对PCI硬件进行操作时,都是先由服务程序扫描获取描述PCI硬件的数据结构列表,再通过反射调用将该数据结构列表发布给应用程序,简化了应用程序。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。