Add(MainForm,2953706,301,287)
{
Caption="CRC8"
link(onCreate,16407008:doWork1,[])
}
Add(MultiElement,16407008,462,301)
{
@Hint=#11:Расчет CRC8|
@Color=43775
link(onEvent1,9823037:doText,[])
link(Data1,9666168:Text,[])
link(Data2,10015156:Text,[(475,265)(410,265)])
AddHint(49,-29,81,13,@Hint)
}
BEGIN_SDK
Add(EditMulti,7362095,21,21)
{
EventCount=1
WorkCount=1
DataCount=2
VarCount=1
Width=993
Height=466
VOffset=50
HOffset=50
link(doWork1,16567277:In,[(42,77)(42,146)])
link(Var1,2276336:Var,[(77,463)(671,463)])
}
Add(For,11752186,413,294)
{
@Hint=#1:j|
End=7
link(onEvent,1514402:doOperation,[])
AddHint(-6,42,17,13,@Hint)
}
Add(Math,1514402,469,294)
{
OpType=4
Op2=128
ResultType=0
link(onResult,13570674:doCase,[])
link(Op1,13974006:Var2,[])
}
Add(Case,13570674,511,294)
{
Value=Integer(0)
link(onNextCase,5957441:doCalc,[])
link(onTrue,15339565:doCalc,[])
AddHint(-3,40,21,13,Value)
}
Add(GetDataEx,5254677,602,252)
{
link(Data,16021543:Value,[])
}
Add(Memory,16021543,602,217)
{
@Hint=#17:CRC (Init = 0xFF)|
Default=Integer(255)
AddHint(-9,-41,95,13,@Hint)
AddHint(64,5,33,13,Default)
}
Add(GetDataEx,13974006,469,252)
{
Angle=1
link(Data,5254677:Var1,[])
}
Add(Hub,2711622,511,217)
{
InCount=2
OutCount=1
link(onEvent1,16021543:doValue,[])
}
Add(GetDataEx,11993642,602,273)
{
link(Data,5254677:Var2,[])
}
Add(MathParse,5957441,574,294)
{
DataCount=1
MathStr="%1<<1"
ResultType=0
link(onResult,4875133:doOperation,[])
link(X1,11993642:Var1,[(580,278)])
}
Add(GetDataEx,13474536,665,273)
{
Angle=3
link(Data,11993642:Var3,[])
}
Add(MathParse,15339565,623,301)
{
DataCount=1
MathStr="%1<<1"
ResultType=0
link(onResult,984673:doWork3,[(662,307)])
link(X1,13474536:Var1,[(629,267)(671,267)])
}
Add(Hub,4270491,525,350)
{
link(onEvent1,2276336:doConvert,[])
link(onEvent2,16021543:doClear,[(571,363)(571,230)])
}
Add(Math,4654115,413,217)
{
OpType=6
ResultType=0
link(onResult,2711622:doEvent1,[])
link(Op1,13974006:Var1,[(419,205)(453,205)(453,257)])
}
Add(Hub,4170178,371,217)
{
link(onEvent1,4654115:doOperation,[])
link(onEvent2,11752186:doFor,[(399,230)(399,300)])
}
Add(Str_Enum,10434258,273,217)
{
Delimiter=""
Step=2
OnlyDivGroup=1
link(onEnum,744170:doConvert,[])
link(onEndEnum,4270491:doEvent1,[(365,230)(365,356)])
link(String,7362095:Data2,[(279,119)(84,119)])
}
Add(Convertor,744170,322,217)
{
Mode=5
link(onResult,4170178:doEvent1,[])
}
Add(Math,15104786,728,294)
{
@Hint=#7:polynom|
OpType=6
ResultType=0
link(onResult,984673:doWork2,[(776,300)(776,272)])
link(Op2,12598407:Var,[])
AddHint(47,1,54,13,@Hint)
AddHint(56,30,30,13,Op2)
}
Add(HubEx,984673,658,266)
{
Angle=2
link(onEvent,2711622:doEvent2,[(506,272)(506,230)])
}
Add(Math,4875133,679,294)
{
OpType=4
Op2=255
ResultType=0
link(onResult,15104786:doOperation,[])
}
Add(ConvertorEx,2276336,665,350)
{
Mode=6
link(onResult,7362095:onEvent1,[(855,356)(855,77)])
link(Data,13474536:Var2,[])
}
Add(LineBreak,595914,98,63)
{
Caption="plnm"
Type=1
Color=16711935
link(Data,7362095:Data1,[(104,42)(77,42)])
Primary=[12598407,637,203]
}
Add(LineBreak,1474782,203,217)
{
Caption="do_crc"
link(Out,10434258:doEnum,[])
Primary=[16567277,-140,-77]
}
END_SDK
Add(Edit,9666168,462,196)
{
Left=120
Top=15
Width=65
Text="49"
}
Add(Label,10548095,462,140)
{
Left=30
Top=20
Width=81
Height=17
Caption="Полином (DEC)"
}
Add(Edit,10015156,404,196)
{
Left=25
Top=100
Width=335
Text="00112233445566778899AABBCCDDEEFF"
}
Add(Label,7692834,410,133)
{
Left=30
Top=70
Width=167
Height=17
Caption="Строка байт для подсчета (HEX)"
}
Add(Edit,9823037,574,301)
{
Left=100
Top=135
Text=""
}
Add(Label,2532230,574,231)
{
Left=30
Top=140
Width=56
Height=17
Caption="Результат"
}
Версия на языке C/C++ (STM32)
uint8_t gencrc8 (uint8_t *data, size_t len)
{
uint8_t crc = 0xff; //Init
size_t i, j;
for (i = 0; i < len; i++) {
crc ^= data[i];
for (j = 0; j < 8; j++) {
if ((crc & 0x80) != 0)
crc = (uint8_t)((crc << 1) ^ 0x31); // 0x31 polynom
else
crc <<= 1;
}
}
return crc;
}
где 0x31 (49) - полином. Можно использовать другой Init = 0xFF.
Проверить подсчет можно тут: https://crccalc.com/?crc=00112233445566778899AABBCCDDEEFF&method=CRC-8&datatype=hex&outtype=hex



Поиск
Друзья
Администрация