Improvement of speed for code for hex serial command list

2 次查看(过去 30 天)
Hi
First of all, sorry for my bad english writing.
My matlab versions are 2015b and 2016a.
Followed by my previous question https://www.mathworks.com/matlabcentral/answers/340723-serial-communication-with-hex-code, I am writing to ask another questions regarding my code as attached file.
Also, I am sorry that I cannot clarify company/model of my device and cannot show a document including details for serial command list and explanation, because the manufacturer indicated that this document is confidential document.
Now, anyway, communication between computer and my sensor device is good.
The variable 'data' is usually 41*2 or 40*2 depending on existence of escape octet, 7D, when I send the command list in the variable 'Str' (so variable 'D').
The part of the command list ('Str'), '2B', '01', '01', is for auto-output from the device to the computer.
So, principly, I do not need to send the command list again everytime, because the device send (or I can use fread() I think) every 1 second once I send the command list at a very first time.
However, when I did not send it again, 'data' length is very weird. (It goes up to 512*2 and varies a lot from 40*2 to 512*2)
This is first question. Why it is?. Did I make any mistake you think?
Another question is that this code might be in-effective. So, please suggest any solution to improve running speed for this code.
Last question is...... if you can convert this code into C or C++, please help me.
I think I can improve running speed by compiling C code into mex file.
Thanks

回答(2 个)

Yuebin Zhou
Yuebin Zhou 2017-5-26
Can you provide more details to the first question? The second question about performance optimization would also depend on how the code is like.
Regarding code conversion, if the code is in MATLAB, you may be able to use code generation toolboxes to generate C/C++ code, but note that not all functions are supported by code generation.
If you want to rewrite your MATLAB code with equivalent C code, then you can MEX it referring to the link below
https://www.mathworks.com/help/matlab/matlab_external/introducing-mex-files.html
However, MEX is mainly used for bringing C code to MATLAB. As far as performance is concerned, it may not be always boosted, which is a common confusion.
  1 个评论
Deo
Deo 2017-5-27
I already tried that before I posted this question, but most of matlab functions I used could not be converted by Matlab C/C++ encoder. I already know about MEX, and that is purpose of this posting to ask somebody to manually rewrite this matlab code with C/C++ (or Fortran). For uncertainty in boosting in speed, so I want to test it. Thanks

请先登录,再进行评论。


Walter Roberson
Walter Roberson 2017-5-26
Do not convert to binary and back to invert the bit: use bitxor() with 2^5
fprintf('%02x',value) might be faster than dec2hex

类别

Help CenterFile Exchange 中查找有关 Troubleshooting in MATLAB Compiler SDK 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by