:::因为每次插卡的位置不同,就会造成同一块板卡的deviceid不一样,这样当上位机使用板卡时,就会将数据送给上次(板卡更换插槽前)使用该devcieid的板卡,会造成辨别不清使用哪块板卡。而导致发送数据到错误板卡。致使一些错误发生,请问该问题应如何解决?
:::
我想你是不是概念搞错了??DeviveID是在EEPROM里面设置的
也就是说我们生产出来的同一批东西
其DiveceID是一样的。
换不同的插槽,只是设备枚举的时候其实例号HINSTANCE 句柄是会改变的,具体说就是如果这一类的卡,只有一张插入PCI槽,以怎样的实例号启动都可以,但是你如果有多张,那么第一张卡以1为实例号,随后依次增加。
所以,你如果想插了多张卡,但是调换顺序后还能完全不变的外部接口的话,应该要结果转换,比如你原来在一二号插槽插入AB两张卡,现在1插槽插入B卡2插槽插入A卡了,应用程序可不你的AB卡,反正它认出你的vendorID和DEVICEID,然后就认为这个驱动可以符合你的硬件,所以实例1对应的就是1插槽的那张卡,不管你是A卡还是B卡
所以,对于需要多轴的应用,可以给客户详细说明,客户需要的第一张卡应该插哪个位置,也就是像你说的,如果外部的顺序是确定了,那么插卡顺序也是应该不能乱来的
Quote:因为每次插卡的位置不同,就会造成同一块板卡的deviceid不一样,这样当上位机使用板卡时,就会将数据送给上次(板卡更换插槽前)使用该devcieid的板卡,会造成辨别不清使用哪块板卡。而导致发送数据到错误板卡。致使一些错误发生,请问该问题应如何解决?
我想你是不是概念搞错了??DeviveID是在EEPROM里面设置的也就是说我们生产出来的同一批东西其DiveceID是一样的。换不同的插槽,只是设备枚举的时候其实例号HINSTANCE 句柄是会改变的,具体说就是如果这一类的卡,只有一张插入PCI槽,以怎样的实例号启动都可以,但是你如果有多张,那么第一张卡以1为实例号,随后依次增加。
所以,你如果想插了多张卡,但是调换顺序后还能完全不变的外部接口的话,比如你原来在一二号插槽插入AB两张卡,现在1插槽插入B卡2插槽插入A卡了,应用程序可不你的AB卡,反正它认出你的vendorID和DEVICEID,然后就认为这个驱动可以符合你的硬件,所以实例1对应的就是1插槽的那张卡,不管你是A卡还是B卡
所以,对于需要多轴的应用,可以给客户详细说明,客户需要的第一张卡应该插哪个位置,也就是像你说的,如果外部的顺序是确定了,那么插卡顺序也是应该不能调换的,就像我推荐你看的资料,靠近电源的那块卡上的叫做123轴,第二张卡的叫456轴,如果你换位置,第一张卡上的那三个轴就被系统认为是123轴,如果你外围接的电机一类已经把它认为是456轴了,当然错了;所以要按照你插卡顺序决定实际顺序的
最后,我想补充:在使用驱动的时候,要取得句柄,这个句柄是通过GUID取的驱动来寻找设备类,而后采用具体的实例号来对应上具体这个设备类中的某个硬件设备。
有篇文章讲到:Solaris 内核允许一个驱动程序具有多个实例。每个实例都有自己的数据空间,但与其他实例共享文本和某些全局数据。设备是基于每个实例进行管理的。除非将驱动程序设计用于在内部处理任何故障转移,否则驱动程序应针对每个硬件使用单独的实例。一个插槽可能具有一个驱动程序的多个实例,例如,多功能卡。
我想这些系统都有共性的,就是驱动是为一类东西来实现接口的,不是为一个东西来实现接口的,所以它首先找类,然后就是具体的实例,像我们这种控制卡,没张卡就是一个实例。
希望对你有用,我也学习中,多指教
Quote:因为每次插卡的位置不同,就会造成同一块板卡的deviceid不一样,这样当上位机使用板卡时,就会将数据送给上次(板卡更换插槽前)使用该devcieid的板卡,会造成辨别不清使用哪块板卡。而导致发送数据到错误板卡。致使一些错误发生,请问该问题应如何解决?
我想你是不是概念搞错了??DeviveID是在EEPROM里面设置的也就是说我们生产出来的同一批东西其DiveceID是一样的。换不同的插槽,只是设备枚举的时候其实例号HINSTANCE 句柄是会改变的,具体说就是如果这一类的卡,只有一张插入PCI槽,以怎样的实例号启动都可以,但是你如果有多张,那么第一张卡以1为实例号,随后依次增加。
所以,你如果想插了多张卡,但是调换顺序后还能完全不变的外部接口的话,比如你原来在一二号插槽插入AB两张卡,现在1插槽插入B卡2插槽插入A卡了,应用程序可不你的AB卡,反正它认出你的vendorID和DEVICEID,然后就认为这个驱动可以符合你的硬件,所以实例1对应的就是1插槽的那张卡,不管你是A卡还是B卡
所以,对于需要多轴的应用,可以给客户详细说明,客户需要的第一张卡应该插哪个位置,也就是像你说的,如果外部的顺序是确定了,那么插卡顺序也是应该不能调换的,就像我推荐你看的资料,靠近电源的那块卡上的叫做123轴,第二张卡的叫456轴,如果你换位置,第一张卡上的那三个轴就被系统认为是123轴,如果你外围接的电机一类已经把它认为是456轴了,当然错了;所以要按照你插卡顺序决定实际顺序的
最后,我想补充:在使用驱动的时候,要取得句柄,这个句柄是通过GUID取的驱动来寻找设备类,而后采用具体的实例号来对应上具体这个设备类中的某个硬件设备。
有篇文章讲到:Solaris 内核允许一个驱动程序具有多个实例。每个实例都有自己的数据空间,但与其他实例共享文本和某些全局数据。设备是基于每个实例进行管理的。除非将驱动程序设计用于在内部处理任何故障转移,否则驱动程序应针对每个硬件使用单独的实例。一个插槽可能具有一个驱动程序的多个实例,例如,多功能卡。
我想这些系统都有共性的,就是驱动是为一类东西来实现接口的,不是为一个东西来实现接口的,所以它首先找类,然后就是具体的实例,像我们这种控制卡,没张卡就是一个实例。
希望对你有用,我也学习中,多指教
可是我想我去给板卡发送数据,怎样共享内存,才能让每块板卡都能收到自己需要的数据呢?我希望能够做成可无序插拔的系统,因为我用的是工控机。这样才比较实用。
回复
有奖活动 | |
---|---|
【有奖活动——B站互动赢积分】活动开启啦! | |
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |