calculate checksum for the input vector
11 ビュー (過去 30 日間)
古いコメントを表示
i need to calculate checksum value for given vector. when i try to compile the code below i receive 14 error all related to the following Function 'Embedded MATLAB Function' (#18.1210.1225), line 49, column 18: "bitand(value,1)"
similar error type is for bitshift
appreciate the solution for this problem
thanks in advance
function CRC = fcn(input_value, CRC_int)
CRC = CRC_int;
l = numel(input_value);
for j = 1:l
if j == 1
value = bitshift(input_value(j),-1);
else
value = input_value(j)
m = (bitand(value,1) && bitand(CRC,1));
n = (bitand(value,1) || bitand(CRC,1));
if m == 1
CRC(j) = bitshift(CRC, -1);
value = bitshift(value, -1);
elseif m == 0 && n ~=1
CRC = bitshift(CRC, -1);
value = bitshift(value, -1);
elseif n == 1
CRC_temp = bitshift(CRC, -1);
CRC = bitxor(CRC_temp,CRC_int);
value = bitshift(value, -1);
end
end
CRC = CRC;
for i = 1:7
if (bitand(value,1) && bitand(crc_var,1))
CRC = bitshift(CRC, -1);
value = bitshift(value, -1);
elseif ((bitand(value,1) == 0) && (bitand(CRC,1) == 0))
CRC = bitshift(CRC, -1);
value = bitshift(value, -1);
elseif (bitand(value,1) || bitand(CRC, 1))
CRC_temp = bitshift(CRC, -1);
CRC = bitxor(CRC_temp,CRC_int);
value = bitshift(value, -1);
end
end
%crc_var = crc_var
% CRC = dec2hex(CRC);
end
0 件のコメント
回答 (2 件)
Fangjun Jiang
2011 年 12 月 11 日
In R2007b, when used in Embedded MATLAB Function, bitand() doesn't support floating-point input. The arguments must belong to an integer class.
3 件のコメント
Fangjun Jiang
2011 年 12 月 11 日
You need to define your variable "value" as integer class, as well as the constant,e.g. bitand(int32(value),int32(1))
Jan
2011 年 12 月 12 日
Or you use FLOOR(x/2) instead of BITSHIFT(x, -1). And REM(x, 2) is faster than BITAND(x, 1).
M
2011 年 12 月 12 日
2 件のコメント
Fangjun Jiang
2011 年 12 月 12 日
So I assume the cause is due to the fact that you need to use integer class inputs for bitand() in EMC. Once you defined 'value' and 'crc_var' as uint16, the constant 1 is automatically casted.
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!