成长之路—《长安的荔枝》读后感

一、概述

最近看了一本马伯庸的书《长安的荔枝》,感觉很好玩,表面上是在讲一个唐朝底层荔枝使李善德负责从广东岭南运载新鲜荔枝到长安的故事,实际讲的是一个坎坷的项目负责人如何在资源匮乏、希望渺茫的情况下推进项目达成的过程。 阅读全文

空船效应

一、概述

一个人在乘船渡河的时候,前面有一只船正要撞过来。这个人喊了好几声,但是前面的船没有回应。见状这个人十分生气,开始破口大骂前方船上的人。后来他发现撞上来的竟然是一艘空船,于是刚刚怒气冲冲的人怒火一下就消失的无影无踪了。 阅读全文

激光雷达—速腾聚创RoboSense16

一、概述

RS-LiDAR-16是速腾聚创推出的16线激光雷达,是一颗非常小型的激光雷达,主要面向无人驾驶汽车环境感知、机器人环境感知、无人机测绘等领域。RS16采用混合固态激光雷达方式,集合了16 个激光收发组件,最大探测距离150米,测量精度+/- 2cm以内。通过激光扫描反射提供三维空间点云数据及物体反射率,为定位、导航、避障等提供有力的保障。 阅读全文

探索CPU的调度原理

软件工程师们总习惯把OS(Operating System,操作系统)当成是一个非常值得信赖的管家,我们只管把程序托管到OS上运行,却很少深入了解操作系统的运行原理。确实,OS作为一个通用的软件系统,在大多数的场景下都表现得足够的优秀。但仍会有一些特殊的场景,需要我们对OS进行各项调优,才能让业务系统更高效地完成任务。这就要求我们必须深入了解OS的原理,不仅仅只会使唤这个管家,还能懂得如何让管家做得更好。本文主要探索其中的冰山一角:CPU的调度原理。 阅读全文

eBPF—使用符号表offset探测函数调用

上一次,我们通过uprobe实现一个对用户空间自定义程序的特定函数出入口进行代码注入和探测的方法,但它还有很多不完善的地方,比如需要提前准备好编译后的函数符号,同时生产环境产出通常也不带符号、产出的部署位置通常也不固定,给我们在实际场景中使用带来不便。本文就讲解下如何通过导出符号表、产出去符号,通过符号表的offset、类函数名、进程PID来进行用户自定义函数调用的探测,从而更方便直接在生产环境使用。 阅读全文

eBPF—使用uprobe探测用户程序函数调用

上一次,我们通过kprobe实现一个简单的内核系统调用捕获,了解了如何在内核函数的出入口动态注入自定义代码,并通过ring buffer传递到用户空间。今天,我开始带大家通过uprobe实现一个对用户空间自定义程序的特定函数出入口进行代码注入和探测的方法。 阅读全文

成长之路—计算机调度算法与生活

有时看到别人或自己在安排和处理事情上陷入混乱时,我脑海里都忍不住想到系统调度算法,一直想写一下调度算法对我们日常处理事情的启发,今天终于动笔,本文就结合操作系统调度算法,以日常生活做事安排为例,看看是否有值的借鉴的地方。 阅读全文

C++使用union+struct实现bit协议的赋值与解析

在进行嵌入式开发的过程中,经常会遇到通信协议是按bit位定义的情况,比如协议一共6个byte字节,每个byte一共8bit位,但是传输的很多数据用1、2个bit就足够了,这时协议会按bit定义,如何方便快捷的进行bit位的赋值和读取,即为本文讲解的内容。 阅读全文

C++ enum枚举的输出重载

我们在编写程序时经常会用到enum枚举类型,使用非常方便。但是当枚举定义较多时,在LOG打印时输出值很难直观的明白其含义,必须对照enum定义。本文介绍一个比较简单的方法,让LOG打印或std::cout输出枚举值时,直接输出文本。 阅读全文

创建自定义Ubuntu Docker镜像

之前体验过Ubuntu22.04版本后感觉新增的小工具很好用,就把几台linux设备都升级到了Ubuntu22,最近开发一个新功能,其中必须的编译依赖工具bcloud要求最高Ubuntu20下才能用,然后就悲催了,实在不想重装系统了,打算做一个ubuntu20+bcloud及依赖库的docker镜像,本文就记录下过程。 阅读全文