Hi all ,
I want to use calllib to load .dll to control my DAQ device , which is not supported DAQ toolbox.
In C program , I have this code below
unsigned int pattern1[1000];unsigned int pattern2[1000];unsigned int buffer[1000];for(int i=0;i<1000;i++) { pattern1[i]=i+1; pattern2[i]=(i+1)*10;}memcpy(buffer,pattern1,1000*sizeof(unsigned int));SetBuffer(buffer);memcpy(buffer,pattern2,1000*sizeof(unsigned int));
I can use memcpy in C to change the data in buffer , but when I use in Matlab , as below
loadlibrary(DLL,HEADER,'alias',LIB); pattern1 = uint32(1:1000); % store 1~1000
pattern2 = uint32(1:1000)*10; % store 10~10000
pointer = libpointer('uint32Ptr',pattern1);calllib(LIB,'SetBuffer',pointer); %void SetBuffer(unsigned int *buffer)
pointer.Value = pattern2;
Sometimes , I see pointer.Value changed to 10~10000 in Matlab, but I still see 1~1000 in my device .
Or sometimes , I see 10~10000 with some strange values like noise in my device.
I know my device and driver work due to C program is okay .
I think the problem is like the efficiency of calllib or lib.pointer in Matlab?
Or I use wrong method to do memcpy-like in Matlab?
Best Answer