激光雷达原理
激光雷达原理前言: 。本文介绍激光雷达原理 相关缩写: 缩写 全称 描述 dToF direct Time-of-Flight 直接测量光的飞行时间 iToF indirect Time-of-Flight 通过测量相位偏移来间接测量光的飞行时间 PLD 脉冲激光二极管 一种激光雷达发光元件 APD 雪崩光二极管 一种激光雷达感光元件 SPAD Single Photon Avalanche Diode 单光子雪崩二极管,一种激光雷达感光元件 SiPM Silicon photomultiplier 硅光电倍增管,一种激光雷达感光元件 CMOS Compound metal Oxided Semiconductor 复合金属氧化物半导体,一种摄像头感光元件 CCD Charge Coupled Device 电荷耦合器件,一种摄像头感光元件 CIS CMOS image sensor 互补金属氧化物半导体图像传感器 OPA Optical Phased Arrays 光学相控阵 FPA Focal...
c++基础篇(六)——运算符
c++基础篇(六)——运算符前言: 本篇文章介绍c++的运算符用法。 1 介绍
c++基础篇(五)——变量
c++基础篇(五)——变量前言: 本篇文章介绍c++的变量用法。 1 介绍 在 C++ 中,变量是用来存储数据的命名内存位置。每个变量都有一个类型(如整数、浮点数、字符等),它决定了变量可以存储的数据种类以及占用的内存大小。定义变量就是告诉编译器为某个名字分配一块内存空间,并指定其类型。 类型 关键字 含义 典型大小 整型 int 整数(如 -10, 0, 100) 4 字节 短整型 short 较小整数 2 字节 长整型 long 较大整数 4 或 8 字节 长长整型 long long 更大整数 8 字节 单精度浮点型 float 小数(精度约7位) 4 字节 双精度浮点型 double 高精度小数(约15位) 8 字节 字符型 char 单个字符(如 ‘a’) 1 字节 布尔型 bool 真/假(true/false) 1 字节 空类型 void 无类型(不能定义变量) —— 2 变量命名规则如下 必须以字母或下划线 _...
c++基础篇(四)——注释
c++基础篇(四)——注释前言: 本篇文章介绍c++的注释用法。 1 介绍 与c一致,c++有两种注释风格。 类型 符号 特点 单行注释 // 只作用于当前行 多行注释 /* ... */ 可跨多行,但不支持嵌套 2 单行注释 以 // 开头,从该符号开始到 本行结束 的内容都会被编译器忽略。 12// 这是一个单行注释int a = 5; // 这行代码后面也可以加注释 3 多行注释 以 /* 开始,以 */ 结束,中间的所有内容(可以跨越多行)都会被当作注释。 123456/*这是一个多行注释可以写很多行*/int b = 10; 也可以用于单行: 1/* 这也是注释 */ 还可以嵌套在代码中(但不能嵌套另一个 /* ... */ 注释): 1int /* 中间的说明 */ c = 20;
MCU进阶篇(一)——选项字节
MCU进阶篇(一)——选项字节前言: 1 介绍 本篇以STM32F103 MCU系列为例,选项字节(Option Bytes) 是STM32微控制器中一个特殊的配置区域,用于存储芯片的关键系统级配置信息。这些配置在芯片上电或复位时被读取,直接影响其硬件行为和安全特性。选项字节就是STM32芯片的一组“启动开关”或“熔丝位”(Fuse Bits),用来设置一些不能在运行时随意更改的重要参数。 2 存储 在STM32F103系列中,选项字节不是程序代码的一部分,也不是RAM中的变量,而是保存在Flash存储器中的一个受保护区域,具有非易失性(掉电不丢失)。选项字节存储在MCU片内Flash中,查看芯片数据手册,其中介绍了选项字节在内存中的存放位置。它的前面是片内Flash中的固件,后面是主内存区。 在参考手册中介绍了选项字节的大小,共计16字节。 3 定义 在官方文档 STM32F10xxx Flash memory microcontrollers...
Vim基础篇(三十一)——字符替换插件vim-clap
Vim基础篇(三十一)——字符替换插件vim-clap前言: 在linux下编程,终端最是常用的工具,将Vim和Terminal配合好使用将大大提高效率。 1 介绍 vim-clap 是一个强大的Vim插件,提供了多种功能,其中之一是字符替换功能。它允许用户在Vim中快速查找和替换文本,支持正则表达式和多文件操作,非常适合处理大量文本数据。 异步处理(Async) 所有搜索操作在后台异步执行,不会阻塞编辑器。 提供流畅的用户体验,即使在大型项目中也能快速响应。 无需外部依赖(可选) 默认使用 Vim 内置功能实现,无需安装 fzf、ripgrep 等外部工具。 可选集成 rg(ripgrep)、git 等工具以提升性能。 丰富的源(Providers) 支持多种查找模式,例如: Clap files:文件查找(支持 .gitignore) Clap git_files:Git 管理的文件 Clap grep:文本内容搜索(类似 :Ag) Clap buffers:打开的缓冲区切换 Clap marks:书签跳转 Clap...
OpenOCD基础篇(三)——擦除和读取
OpenOCD基础篇(三)——擦除和读取前言: 本篇文章介绍使用OpenOCD烧录和调试。 1 全片擦除 通过OpenOCD可以对MCU的Flash进行全片擦除,本文以STM32F103ZET6单片机为例,创建一个OpenOCD的脚本文件 jlink_swd_stm32f103_erase_flash.cfg ,内容如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081# ============================================# STM32F103ZET6 全片擦除配置文件(J-Link + SWD)# 支持无 nSRST 连接情况# ============================================# 使用 J-Link...
Vim基础篇(三十)——Debug插件vimspector
Vim基础篇(三十)——Debug插件vimspector前言: 在linux下编程,终端最是常用的工具,将Vim和Terminal配合好使用将大大提高效率。 1 介绍 vimspector 是一个为Vim和Neovim提供图形化调试功能的插件,它使得在Vim中进行代码调试变得更加直观和高效。vimspector支持多种编程语言(如Python、C/C++、JavaScript、Go、Java等),通过集成 Debug Adapter Protocol (DAP) 实现与各种调试器的通信。 多语言支持 : 借助 DAP 协议,vimspector 可以支持任何实现了对应 Debug Adapter 的语言,例如: Python(使用 debugpy ) C/C++/Rust(使用 lldb-vscode 或 gdb ) JavaScript/TypeScript(使用 vscode-node-debug2 ) Go(使用 delve ) Java、Ruby、PHP...
FreeRTOS基础篇(八)——高级调试功能
FreeRTOS基础篇(八)——高级调试功能前言: 在嵌入式开发中,系统的稳定性与性能优化离不开强大的调试支持。FreeRTOS 不仅是一个轻量级实时操作系统,还提供了一系列高级调试功能,帮助开发者深入洞察系统运行状态。从任务调度跟踪、CPU 使用率统计,到栈溢出检测与内存分配监控,结合 Tracealyzer 和 SystemView 等可视化工具,可大幅提升问题定位效率。本文介绍 FreeRTOS 的核心调试机制及其应用,助你打造更可靠、高效的嵌入式系统。 1 介绍 FreeRTOS提供了多种高级调试功能,帮助开发者在开发和优化嵌入式系统时定位问题、分析运行状态。主要包括: 可视化跟踪(Trace Facility):通过启用 configUSE_TRACE_FACILITY 和使用第三方工具(如 Tracealyzer 和 SystemView ),可记录任务调度、队列操作、内存分配等事件,生成时间轴视图,用于分析系统行为和性能瓶颈。 运行时统计(Runtime Stats):启用...
FreeRTOS基础篇(七)——事件组和任务通知
FreeRTOS基础篇(七)——事件组和任务通知前言: 在嵌入式实时系统中,任务间的同步与通信是构建复杂应用的核心。FreeRTOS 提供了多种机制来协调任务执行,其中事件组(Event Group)和任务通知(Task Notifications)因其高效性和灵活性被广泛使用。事件组适用于多事件的逻辑组合等待,而任务通知则是最快速的任务间通信方式,无需额外创建队列或信号量。本文通过实例详解两者的工作原理、API 使用场景及性能差异,帮助开发者在实际项目中做出更优选择,提升系统响应速度与资源利用率。 1 事件组(Event Group)1.1 介绍 事件组是一种允许一个或多个任务等待多个“事件”中某些或全部发生的同步机制。它使用一个24位(STM32上通常为23位可用)的位图来表示不同的事件标志(bit flags),每个bit可代表一个特定事件。 典型用途: 等待多个条件中的任意一个发生(如:按键按下 OR 定时器超时) 等待多个条件全部满足(如:网络连接 + 时间同步 + 配置加载完成) 1.2...







