calllib issue , change DMA buffer value
Show older comments
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?
Accepted Answer
More Answers (0)
Categories
Find more on Call C from MATLAB in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
