全球旧事资料 分类
否错误,函数均会返回函数参数type保存接收到的命令字当接收到数据帧错误或其地址位不为0时(非主机发送帧),函数返回0,反之返回1

bitrecv_cmduchartype
bitdb0当接收到的上一个字节为0xdb时,该位置位bitc00当接收到的上一个字节为0xc0时,该位置位uchardata_buf__ERRLEN保存接收到的帧__ERRLEN12
uchartmp
ucharecc0
fuchari
M_DE0M_RE0
置发送禁止,接收允许
接收一帧数据
i0
whilec0循环直至帧接收完毕

RI0
whileRI
tmpSBUF
RI0ifdb1
接收到的上一个字节为0xdb

switchtmp

case0xdd
data_bufi0xdb0xdbdd表示0xdb
eccecc0xdb
db0
break
case0xdcdata_bufi0xc0
0xdbdc表示0xc0
eccecc0xc0
db0
break
defaultretur
0
帧错误,返回

i
switchtmp
正常情况
case0xc0
帧结束
c01
breakcase0xdb
检测到转义字符
db1
break
default普通数据data_bufitmp保存数据eccecctmp计算校验字节
i
fifi__ERRLEN帧超长,错误,返回ifi__ERRLEN1帧超长,错误,返回
retur
0
判断帧是否错误ifi4帧过短,错误,返回
retur
0ifecc0校验错误,返回
retur
0ifdata_buf0dev
非访问本机命令,错误,返回
retur
0typedata_buf1获得命令字retur
1函数成功返回
该函数发送一帧数据帧,参数type为命令字、le
为数据长度、buf为要发送的数据内容

voidse
d_datauchartypeucharle
ucharbuf

uchari
ucharecc0该字节用于保存校验字节M_DE1置发送允许,接收禁止
M_RE1
se
d_bytedev发送本机地址
eccdevse
d_bytetype
发送命令字
eccecctypese
d_bytele

发送长度
ecceccle
fori0ile
i
发送数据

se
d_bytebuf
ecceccbuf
buf

se
d_byteecc发送校验字节
TI0发送帧结束标志SBUF0xc0whileTITI0该函数发送一个数据字节,若该字节为0xdb,则发送0xdbdd,若该字节为0xc0则,发
f送0xdbdc
voidse
d_byteucharda

switchda
case0xdb
字节为0xdb,发送0xdbdd
TI0
SBUF0xdb
whileTI
TI0
SBUF0xdd
whileTI
TI0
breakcase0xc0
字节为0xc0,发送0xdbdc
TI0
SBUF0xdb
whileTI
TI0
SBUF0xdc
whileTI
TI0
breakdefault
普通数据则直接发送
TI0
SBUFda
whileTI
TI0


e
dif
调试结果
ffr
好听全球资料 返回顶部