笔记
任成珺
20年+C程序员,主要集中在网络操作系统架构,驱动,协议栈。
展开
-
RUST所有权实现
本文用代码的例子说明了rust所有权的本质。原创 2021-10-11 17:39:38 · 107 阅读 · 0 评论 -
RUST生命周期浅析
struct TestLifetime <'a> 这句话是什么意思?答案是:如果你用struct TestLifetime声明了 test变量,那编译器会将test的生命周期标记成’a,你可以用用这个标记规定结构体内的变量的生命周期。 struct TestLifetime <'a> { item: 'a &i32; } 意思是如果定义了 let i=5; let test= TestLifetime{&i}; 则 i 的必须活的不比test短,也即i的作用域要大于t原创 2021-09-18 07:50:35 · 308 阅读 · 0 评论 -
为什么需要创建型模式
举个例子,比如TCP/IP协议栈,最初我们只考虑主机本身就好了。后来出现了虚拟机的需求,需要多个独立的协议栈实体。如果程序最初是按照创建型模式设计的协议栈,那我们在虚拟机需求出现的时候,只需要简单的多创建协议栈的实体即可满足需求。如果没有用创建型模式,那协议栈的源代码将经历复杂的重构,测试,应用,排错过程。 同样的例子也发生在路由协议适配VRF出现时的情况。所以,使用创建型模式就是为了适配日后未知的程序扩展,当变化来临时,你的程序架构已经做好了准备。可以在仅增加少量,必要的代码即可实现别人眼中非常巨大的需求原创 2021-02-06 20:20:11 · 115 阅读 · 0 评论 -
3G/4G/5G通信模块重启设计细节
无线通信模块本身实际是一个小网关,网关总是会因为各种原因崩溃的。在崩溃时,最后的保障就是重启,这个重启需要很多设计细节考虑。 1.硬件上是需要硬件重启开关的,这是最后的一个保障。想试图利用软件狗重启整机进而使得模块重启无法生效,必须要整机硬重启才能使通信模块硬复位,从而从某些死机中恢复。整机硬重启对于运维人员来说就意味着现场操作。运维成本高昂且让问题显化。所以对模块的硬复位开关可以减少很多烦恼。 2.应定时监测通信,在通信量较少的情况下尽可能的软复位模块。模块运行时间越长,越有可能发生非要硬复位不可的问题。原创 2021-02-06 10:10:29 · 933 阅读 · 0 评论 -
面对对象杂谈
首先要了解为什么会出现面对对象。面对对象成为流行是从C++开始。C++是在C的基础上创建起来的。优秀的程序员已经形成了一整套如何用C设计出良好的程序结构的原则,使得C程序能够具备良好的可移植性,可维护性,可测试性,可伸缩性。但这套原则对于初出茅庐的程序员难以理解,沟通的成本过高。所以,创建一套内嵌这套原则的语言应该是个好主意。这套原则被起了个名字"面对对象",语言需要兼容C看起来也是个不错的主意。但“理想很丰满,现实很骨感”,C++太自由了,导致程序员仍然面临和C一样的面对对象学习曲线。 实际上,面对对象本原创 2021-02-05 20:47:44 · 158 阅读 · 2 评论 -
FM无线数据传输协议细节
FM无线通信因为无线干扰大,而面向连接的传输方式协议复杂,所以很多时候用固定次数的重发完成干扰规避。重发的时候有一个细节可以优化传输效率,即每次重发的时候可以把新增的事件加入发送数据帧中。这样可以规避因为重发导致新增的事件被延迟发送,引起导致响应不及时。 通常的FM无线通信不适合用于实时数据传输,因为太容易丢失信息。FM无线通信更适合传输一些数据丢失若干次也无所谓的系统,如胎压检测等,其优势是成本低且技术成熟。 ...原创 2021-02-05 10:55:08 · 967 阅读 · 0 评论 -
无线吸尘器软件魔鬼细节
无线吸尘器的软件从规模上看不足1000行,但就这1000行代码中,魔鬼细节确不少。 1.按键的锁机制,无线吸尘器的按键易误触,有时甚至是在货物运输途中被误触。这就需要对按键增加锁定及解锁机制。操作要不能反人类。 2.电池管理主服务对象是马达,但如果有另一个用电单位如灯光照明,那要注意,一定要整体设置一个电池截止供电电压,否则灯光照明可能会把电池耗尽到充电电压以下,导致无法再充电。 3.电池电量指示灯实际上是需要较复杂的算法来支持其正确工作的,如果仅仅用电池电压或充电电流做判断,那工作肯定不正常,尤其是考虑到原创 2021-02-03 07:15:25 · 129 阅读 · 0 评论 -
中断还是定时轮询
中断还是定时轮询 中断实际上是温室里的花朵,看起来美,但真正处于复杂和极端的环境时,硬件可靠性非常值得怀疑。因此,只要计算力够,就建议采用轮询的方式。 举个例子,曾经做过局端DSL驱动,因为电话线问题,DSL芯片不间断发出线路中断告警,导致CPU被中断淹没,这个问题最简单的方法是采用轮询,复杂一点的话对单位时间中断数设限,超过限制就将相关中断关掉。编程中任何一个系统外部信号的处理,第一反应就是如果这个信号不正常应该怎么办?这会带来非常多的创造性方法以及大量的工作量。但也可能会让你觉得换一个高性能硬件是最简单原创 2021-02-03 07:09:38 · 146 阅读 · 0 评论