LINUX.ORG.RU

История изменений

Исправление 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;