多MCU固件升级
多MCU固件升级前言: 一块主控板上如果有多个 MCU,固件升级就不再是“把一个 bin 文件写进去”这么简单。升级数据怎么从对外的 MCU 分发到其他 MCU、每个 MCU 的固件存在哪里、掉电后怎么恢复、上电后怎么保证四个 MCU 的版本组合一致,这些问题需要在架构阶段就定清楚。本文以四个 MCU 的典型板卡为例,讨论一种基于“主 MCU 统一对账 + 分组存储 + loader 兜底”的多 MCU 固件升级方案。 1 系统背景与总体架构 假设一块主控板上有 4 个 MCU,分别记为 A、B、C、D: A 通过对外通讯链路与外部设备连接; A 与 B、A 与 C、C 与 D 通过内部通讯链路连接; A 和 C 各挂一片外挂 Flash; B 和 D 没有外挂 Flash; B 由 A 加载启动,D 由 C 加载启动。 升级时,外部把包含 A、B、C、D 四个 app 固件的大包发送给 A。A 解析大包,把 A、B 的 app 镜像写入 A 的外挂 Flash,把 C、D 的 app 镜像发送给 C,由...
APD激光接收器与点云形成原理
APD激光接收器与点云形成原理前言: APD是激光雷达中最常见的模拟接收器件之一。本文先介绍APD如何把微弱的回波光信号转换成电信号,再介绍激光雷达如何从一次次测距结果形成三维点云。 相关缩写: 缩写 全称 描述 APD Avalanche Photodiode 雪崩光电二极管,工作在线性模式的内部增益探测器 PIN Positive-Intrinsic-Negative 普通PIN光电二极管,无内部增益 SPAD Single Photon Avalanche Diode 单光子雪崩二极管,工作在盖革模式 TIA Transimpedance Amplifier 跨阻放大器,把光电流转换为电压 TDC Time-to-Digital Converter 时间数字转换器,测量飞行时间 CFD Constant Fraction Discriminator 恒比定时甄别器,用于抑制幅度走离 FOV Field of View 视场角 1 什么是APD APD(Avalanche...
FreeRTOS进阶篇(二)——内核移植
FreeRTOS进阶篇(二)——内核移植前言: 基础篇(二)介绍了 FreeRTOS 的工程结构,这一篇开始动手:以 M144Z-M3 最小系统板(STM32F103ZET6)为例,使用 FreeRTOS-LTS 202604.01-LTS 的内核,从一个能点灯的裸机工程出发,手动完成 FreeRTOS 内核的移植。移植完成后,两个 LED 会以不同周期闪烁。 1 准备工作1.1 硬件与软件环境 本文使用的硬件和软件环境如下: 项目 说明 开发板 M144Z-M3 最小系统板 STM32F103 版 MCU STM32F103ZET6,Cortex-M3,512 KB Flash,64 KB SRAM,最高 72 MHz LED LED0:PB5(红色),LED1:PE5(绿色),低电平点亮 工具链 arm-none-eabi-gcc 构建系统 CMake + Make/Ninja 基础库 STM32CubeF1 HAL;使用 StdPeriph...
MCU进阶篇(二)——Linux搭建STM32基础工程
MCU进阶篇(二)——Linux搭建STM32基础工程前言: 本篇在 Linux 下从零搭建一个 STM32F103ZET6 的裸机工程:用 arm-none-eabi-gcc 编译,用 CMake 管理工程,最后通过 GPIO 点亮 M144Z-M3 开发板上的 LED0 和 LED1。工程按 core、drv、strtup、lnk、cmake 分层组织,先不引入 RTOS,先做一个纯裸机工程。固件的下载和调试不在本文范围内,可以参考《OpenOCD 基础篇(二)——烧录和调试》。 1 目标与硬件1.1 最终目标 完成这篇文章后,应该得到这样一个工程: 在 Linux 终端里一条命令完成编译,生成 .elf、.hex、.bin。 工程按 core、drv、strtup、lnk、cmake 分层组织,结构清晰,便于后续扩展。 板载 LED0 每 500 ms 翻转一次,LED1 每 1000 ms 翻转一次。 本文不依赖 Keil、IAR 或 STM32CubeIDE,编译和链接全部在 Linux...
自娱自乐,我的博客(二十一)——CDN加速及图片在线压缩
自娱自乐,我的博客(二十一)——CDN加速及图片在线压缩前言: 文章中介绍了在Hexo博客中添加游戏功能,本文将介绍如何通过CDN加速游戏加载,减少流量消耗。 1 介绍 CDN(内容分发网络)是一种通过在全球范围内部署服务器,将内容分发到离用户最近的节点,从而加速网站访问速度的技术。对于Hexo博客来说,使用CDN可以显著提高页面加载速度,尤其是对于包含大量静态资源(如图片、视频、游戏文件等)的博客。CDN也可以起到节省流量的作用,因为它可以缓存资源,减少对源服务器的请求次数,从而降低带宽消耗。我在原来在腾讯云上部署了存储桶图床,每月花费高达七十多元,这其中流量消耗占了很大一部分,还有一部分是由于我使用的是原图未进行压缩,导致花费远高于正常的博客访问量。这篇文章将介绍如何通过CDN加速Hexo博客的加载速度,并减少流量消耗。 顺便一提,腾讯云的存储桶上传图片时可以选择图片质量,建议选择压缩成75%,可以有效减小图片大小,从而节省流量。 2 为存储桶COS添加CDN域名 在腾讯云上配置...
通讯传输
通讯传输前言: 在现代通信系统中,通讯传输速率是一个关键的性能指标,直接影响到数据传输的效率和用户体验。本文将介绍通讯传输速率的定义、计算方法以及影响因素。 1 通讯传输速率的定义 通讯传输速率(Data Transfer Rate)是指在单位时间内传输的数据量,通常以比特每秒(bps)或字节每秒(Bps)为单位。它反映了通信系统的效率和性能。比如,常见的通讯传输速率有10 Mbps、100 Mbps、1 Gbps等。串口通讯中常说的波特率(Baud Rate)也是一种传输速率的表示方式,指每秒钟传输的符号数量。 2 通讯传输速率2.1...
CMake进阶篇(二)——搭建Qt6工程
CMake进阶篇(二)——搭建Qt6工程前言: 本篇文章探讨通过CMake搭建一个Qt6工程。 1 下载
激光雷达原理
激光雷达原理前言: 。本文介绍激光雷达原理 相关缩写: 缩写 全称 描述 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 变量命名规则如下 必须以字母或下划线 _...







