面试问题
1、RS485在通信方面的一些设置
第一、波特率,波特率是指在1s内可以传输的字符的数量,比如9600代表1s内可以传输9600个字符
而波特率越大,传输的距离就越小
第二、差分电平,因为信号的发送是要有A,B端的电压差的,而因为发送的是字符流,都是1,0
所以当VA-VB>=200mV时代表逻辑1,当VA-VB<=200mV时代表逻辑0
第三、终端电阻120Ω
在A,B两端并联120Ω的电阻,目的是减少信号的干扰,吸收信号末端的干扰
第四、接发送芯片
核心的5个引脚---RO是负责接收输出,DI是负责驱动输出,而DE和/RE引脚短接在一起,他们两个均为1时输出高电平,而他们两个均为0时则输出低电平
第五、确定是全双工通讯还是半双工通讯
如果是半双工就要确定发送数据的方向和接受方向
对于多个设备进行连接时,需要保证每个设备的地址是独一无二的,如果地址相同就会导致发送错误
第六、硬件部分采用双绞线和总线型拓扑
双绞线 = 两根绝缘铜导线紧紧互相缠绕在一起,外面带屏蔽层的叫屏蔽双绞线 RVSP 120Ω
缠绕在一起是保证A,B线受到的干扰相同,但是最后要的是二者的差分电压,所以只有受到的干扰相同即可
而总线型拓扑是菊花链,具体是这样的
主机USB485 → 从站1 → 从站2 → 从站3 → 从站4
A接A,B接B一直接过去
第七、软件层面
定义完整的数据帧协议,包括地址、命令、长度、数据和 CRC 校验,并处理半包、粘包、超
时、重试和异常帧等情况
第八、对于软件层面应该设计一些超时,重样等操作
比如响应超时(500ms),重试次数(3次),设备离线判断(重复3次还不行就判定),还有CRC校验以及地址,数据长度错误
2、unordered_map和map的区别
map底层是红黑树,而unorder_map是哈希表,因为红黑树都是随机分散的内存,而哈希表是整块的内存,所以map的内存开销更大,遍历比较慢
值得一提的是,哈希表如果遇到了不同的key计算得到相同的value,所以每个桶数组下的链表就会增加元素(这里就是分散的内存了)
如果桶元素太少,而插入的元素太多了后就会导致链表太长,然后就会重建一个更大的桶数组,把之前的元素开始重新分配,会导致内存被极致占用!
浙公网安备 33010602011771号