История изменений
Исправление Alden, (текущая версия) :
Вот мой код на SCL (сименсовском диалекте языка ST)
#done := false;
#CRC_code := 0;
//Обход входного массива
#i := #start_addr;
WHILE #i < #start_addr + #msg_length DO
//Берём i-й байт
#data := #buffer[#i];
//Цикл обработки i-го байта
#j := 0;
WHILE #j < 8 DO
IF (#CRC_code & 128) > 0 THEN
#CRC_code := #CRC_code * 2;
IF (#data & 128) > 0 THEN
#CRC_code := #CRC_code + 1;
END_IF;
#CRC_code := #CRC_code XOR #polynom;
ELSE
#CRC_code := #CRC_code * 2;
IF (#data & 128) > 0 THEN
#CRC_code := #CRC_code + 1;
END_IF;
END_IF;
#data := #data * 2;
#j := #j + 1;
END_WHILE; //окончание обработки i-го байта
#i := #i + 1;
END_WHILE; //Окончание обхода входного массива
#CRC := #CRC_code;
#done := true;
Параметры функционального блока:
Input
buffer Array[0..255] of Byte
start_addr Int = 0
msg_length Int = 0
Output
done Bool = false
CRC Byte = 16#0
Constant
polynom Byte = 16#69
Исправление Alden, :
Вот мой код на SCL
#done := false;
#CRC_code := 0;
//Обход входного массива
#i := #start_addr;
WHILE #i < #start_addr + #msg_length DO
//Берём i-й байт
#data := #buffer[#i];
//Цикл обработки i-го байта
#j := 0;
WHILE #j < 8 DO
IF (#CRC_code & 128) > 0 THEN
#CRC_code := #CRC_code * 2;
IF (#data & 128) > 0 THEN
#CRC_code := #CRC_code + 1;
END_IF;
#CRC_code := #CRC_code XOR #polynom;
ELSE
#CRC_code := #CRC_code * 2;
IF (#data & 128) > 0 THEN
#CRC_code := #CRC_code + 1;
END_IF;
END_IF;
#data := #data * 2;
#j := #j + 1;
END_WHILE; //окончание обработки i-го байта
#i := #i + 1;
END_WHILE; //Окончание обхода входного массива
#CRC := #CRC_code;
#done := true;
Параметры функционального блока:
Input
buffer Array[0..255] of Byte
start_addr Int = 0
msg_length Int = 0
Output
done Bool = false
CRC Byte = 16#0
Constant
polynom Byte = 16#69
Исправление Alden, :
Вот мой код на SCL
#done := false;
#CRC_code := 0;
//Обход входного массива
#i := #start_addr;
WHILE #i < #start_addr + #msg_length DO
//Берём i-й байт
#data := #buffer[#i];
//Цикл обработки i-го байта
#j := 0;
WHILE #j < 8 DO
IF (#CRC_code & 128) > 0 THEN
#CRC_code := #CRC_code * 2;
IF (#data & 128) > 0 THEN
#CRC_code := #CRC_code + 1;
END_IF;
#CRC_code := #CRC_code XOR #polynom;
ELSE
#CRC_code := #CRC_code * 2;
IF (#data & 128) > 0 THEN
#CRC_code := #CRC_code + 1;
END_IF;
END_IF;
#data := #data * 2;
#j := #j + 1;
END_WHILE; //окончание обработки i-го байта
#i := #i + 1;
END_WHILE; //Окончание обхода входного массива
#CRC := #CRC_code;
#done := true;
Параметры функционального блока:
Input
buffer Array[0..255] of Byte
start_addr Int = 0
msg_length Int = 0
Output
done Bool = false
CRC Byte = 16#0
Исправление Alden, :
Вот мой код на SCL
#done := false;
#CRC_code := 0;
//Обход входного массива
#i := #start_addr;
WHILE #i < #start_addr + #msg_length DO
//Берём i-й байт
#data := #buffer[#i];
//Цикл обработки i-го байта
#j := 0;
WHILE #j < 8 DO
IF (#CRC_code & 128) > 0 THEN
#CRC_code := #CRC_code * 2;
IF (#data & 128) > 0 THEN
#CRC_code := #CRC_code + 1;
END_IF;
#CRC_code := #CRC_code XOR #polynom;
ELSE
#CRC_code := #CRC_code * 2;
IF (#data & 128) > 0 THEN
#CRC_code := #CRC_code + 1;
END_IF;
END_IF;
#data := #data * 2;
#j := #j + 1;
END_WHILE; //окончание обработки i-го байта
#i := #i + 1;
END_WHILE; //Окончание обхода входного массива
#CRC := #CRC_code;
#done := true;
Параметры функционального блока:
Input
buffer Array[0..255] of Byte
start_addr Int = 0
msg_length Int = 0
Output
done Bool = false
CRC Byte = 16#0
Исходная версия Alden, :
Вот мой код на SCL
#done := false;
#CRC_code := 0;
//Обход входного массива
#i := #start_addr;
WHILE #i < #start_addr + #msg_length DO
//Берём i-й байт
#data := #buffer[#i];
//Цикл обработки i-го байта
#j := 0;
WHILE #j < 8 DO
IF (#CRC_code & 128) > 0 THEN
#CRC_code := #CRC_code * 2;
IF (#data & 128) > 0 THEN
#CRC_code := #CRC_code + 1;
END_IF;
#CRC_code := #CRC_code XOR #polynom;
ELSE
#CRC_code := #CRC_code * 2;
IF (#data & 128) > 0 THEN
#CRC_code := #CRC_code + 1;
END_IF;
END_IF;
#data := #data * 2;
#j := #j + 1;
END_WHILE; //окончание обработки i-го байта
#i := #i + 1;
END_WHILE; //Окончание обхода входного массива
#CRC := #CRC_code;
#done := true;