VXI and VME

cancel
Showing results for 
Search instead for 
Did you mean: 

VXIMove returns error 0x8000 only in 64-bit Solaris 8

We are looking to migrate our Solaris CPU to a faster Blade 150 (or better) PCI-based workstation. The downside is that these latest workstations all contain 64-bit  processors so we are forced to run a 64-bit Solaris kernel. According to the NI-VXI documentation, the driver works on 32-bit and 64-bit kernels so I was not too concerned. Unfortunately our applications are not working properly when using the VXImove API call to move a chunk of data from VXI to a local memory address. The error is always 0x8000.

 

We eliminated Solaris 8 as the problem by duplicating the setup on an Ultra 10 workstation which is also PCI-based but runs 32-bit Solaris 8. The same drivers were used in both cases. The VXImove works properly when running in Solaris 8 32-bit.

 

I have attached my resman output  files for reference. Thanks in advance.

Download All
0 Kudos
Message 1 of 10
(11,070 Views)

Joe,

 

It sounds like you are trying to do something that is unsupported with the API - so I have two things for you.  First, NI strongly recommends that you use the VISA API to communicate with your VXI instruments.  This API is continuously updated and supported by us, making it much more reliable than VXI.  Second, check out this article describing VXI operation on a 64-bit architecture.  In summary, the while the VXI driver supports 64-bit, the VXI and VISA API only support 32-bit.  This seems to be confirmed by your in house tests.  In general, NI products are not supported on 64-bit systems.  Is there any possibility of running your Blade 150 in 32-bit mode?

Sincerely,

Chris G in AE
0 Kudos
Message 2 of 10
(11,058 Views)

Chris,

 

Thank you for your reply. I am also running my application in 32-bit mode. I did not recompile or change anything. I used the same exact drivers for both system. The only real difference is the kernel level driver. The call is a fairly basic VXImove call. Here is a chunk of the code in question:

 

 

#define VXIMOVE_PARMS    (AccessP_Space(A24_SPACE) | \
                         AccessP_BlkDisable(XFER_DISABLE_BLOCK) | \
                         AccessP_SyncDisable(XFER_DISABLE_SYNC))

 

    int16           status;

    LOG("\n    Reading data from Nonvolatile RAM board\n");
    status = VXImove(VXIMOVE_PARMS, 0x100000, 0, (uint32) & vstd,
             (sizeof(struct vstd_data)), 1);

    if (status < 0) {
        printf("error -- VXImove() returned %d\n", status);
        exit(-1);
    }

 

As for the Blade 150, this system only supports a 64-bit kernel. Migrating to VISA would be a major undertaking as I am trying to manage legacy code so I'm hoping to avoid a major porting effort.

 

0 Kudos
Message 3 of 10
(11,054 Views)

Joe,

 

Thanks for posting the code snippet.   It sounds like what you're trying to do is run a 32-bit application on a 64-bit kernel.  Since it seems that the VXI driver should work on this setup, I'll have to take some time to check into the issue a little further.  In the mean time, I'd like you to try to recompile your code on the Blade 150 system so that everything is properly referencing the 64-bit version of the VXI driver. Let me know the results of that step.  Thanks!

Sincerely,

Chris G in AE
0 Kudos
Message 4 of 10
(11,039 Views)

Chris,

 

I thought that may have been the issue but since the NI-VXI libraries are all 32-bit I cannot do the final link step. Here is what I am referring to:

 

libcfgeng.so:   ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
libcfpcimxi.so: ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
libniini32.so:  ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
libnivxi.so:    ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
libnivxi.so.1:  ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
libnivxiio.so:  ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
libnivxiio.so.1:        ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
libnmxi2ext.so: ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped

 

Thanks so much for your assistance.

 

Joe Avila

 

0 Kudos
Message 5 of 10
(11,037 Views)

Joe,

 

This error message is consistent with a 64-bit system incompatibility.  I'm still in the process of checking with our R&D team, but it is not looking good at this point for running the VXI drivers on a 64-bit system.  Thanks for your patience, I'll post back when I know more.  

Sincerely,

Chris G in AE
Message 6 of 10
(11,017 Views)

Chris,

 

Has your R&D team come back with anything yet? I need to make a decision soon on this project. If there is a quick solution that would be great. Otherwise it seems that I would need to migrate over to NI-VISA. In general how much effort would this take? I've never worked with this API.

 

Thanks,

  Joe Avila

 

 

0 Kudos
Message 7 of 10
(10,906 Views)

Joe,

 

I would highly recommend migrating over to NI-VISA as it looks like the NI-VXI is not supported on the 64 bit operating system and is also not officially supported by NI.  Moving over to VISA will not only work better with your program (all the functionality of VXI is wrapped up in VISA anyways), but it will also make it easier for us to help you.  Unlike VXI, VISA is continually updated and monitored for bugs.  You can check out the LabVIEW Help under VISA to see a list of VIs that will perform the VXI functionality.  You can also call into support at 1-866-275-6964 if you have detailed questions on how to go about migrating your code.  Have a great day!

Sincerely,

Chris G in AE
0 Kudos
Message 8 of 10
(10,885 Views)
I've never used NI-VISA on Solaris. This will still interface with the NI-VXI driver that is installed as this is simply an API. Is this a correct assumption?
0 Kudos
Message 9 of 10
(10,881 Views)

Hello All,

I would like to clarify one of the statements made earlier in this forum.  NI VXI is not supported as a 64-bit application, under any circumstances.  One can user NI VXI on a 64-bit system, but they must run it as a 32-bit application in order for it to function correctly, and therefore lose the 64-bit processing capability. 

It is true that NI-VISA is simply an added layer between the driver and your application.  As KnowledgeBase 2QDASEPG: Supported NI-VISA Operating Systems and Features points out, NI-VISA only supports VXI functionality on 32-bit operating systems.  This is because the NI VXI driver itself is only supported as a 32-bit application.

Chris_G
Sr Test Engineer
Medtronic, Inc.
0 Kudos
Message 10 of 10
(9,960 Views)