TA的每日心情 | 奋斗 2022-6-11 15:23 |
---|
签到天数: 5 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
背景:单片机主频24M,串口接收使用中断(优先级最高),串口发送不使用中断;接收帧为11字节,回传帧为50字节;波特率115200;采用RS485通信
2 i9 K* H6 H+ F; U5 m 单片机程序主循环一次最长大约10ms,每次循环大约有5us的时间内中断总使能是关闭的(此期间串口无法接收数据)- U2 O Z* {" U, P0 M/ E
经实测,串口助手从发送一帧数据,到接收到一帧数据,时间大约为30ms
/ S8 e, v4 H F4 Q% }; g2 _/ ^ P) Z$ g$ a; k2 T( @7 p# p
通过电脑串口助手分别以50ms和100ms为周期给单片机下发指令,发现三个现象:
# T2 c0 i q1 i& L& \8 _& i2 I5 d# A8 G0 o+ ]6 y
1.50ms为周期时,丢包率较高;100ms为周期时,丢包率较低:
) z0 `2 n. L! o ]! B 50ms丢包率大约为3%;100ms丢包率大约为0.05%( t" y( [( [ o9 _$ S2 U; D9 p+ x0 q
- `9 M2 N$ N6 v5 z+ K5 t
2.在以50ms为周期时,在积累一定发送和接收量后,发送周期不再是设定的50ms;以100ms为周期时未发生此现象:
7 F, P! Q/ ^$ c7 a% ]1 v![]()
6 t5 E" b* C5 a$ X; |/ {8 X6 s" G# W" c3 [$ n3 q) E+ P
3.在以50ms为周期时,在累计一定发送和接收量后,经常发生原本应该是属于同一帧的接收数据,会断为两截,分别存在于当前一帧和下一帧中;以100ms为周期时未发生此现象:
; u# K- x# H8 n+ v5 W- S![]()
& `+ O6 ^; w8 Z. D# Q+ @
2 Q, V) y# B" |# i由此有三个疑问:
' G5 _. q2 b6 X" p1.经实测,串口助手从发送到接收到一帧数据耗时大约30ms,即便考虑程序主循环中有5us的时间中断总使能是关闭的,理论上单个周期(50ms)应该完全满足收发处理。为什么在50ms周期发送指令下,会出现较高的丢包率?
8 t# W% F$ q/ {' F
. T3 a3 w' y2 Q7 c2.为什么在串口助手发送周期为50ms(或周期较短)时,积累一定收发数据后,发送周期会偏离设定值?9 a5 P( N. Y1 O5 }
) F* E0 {# E5 a8 a% A4 G
3.在串口助手发送周期为50ms(或周期较短)时,积累一定收发数据后,为什么原本应该是属于同一帧的接收数据,会断为两截,分别存在于当前一帧和下一帧中?
; w! e& h: |0 B, D" Q% E |
|