自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 使用 Docker 运行 macOS 虚拟机

配置项作用示例持久化存储映射保留虚拟机磁盘文件端口映射宿主机访问虚拟机服务(SSH),(Web UI)环境变量配置虚拟机参数祝你玩转 Docker macOS 虚拟机愉快!

2025-05-31 21:15:08 958

原创 裸机嵌入式 (STM32 等)和操作系统程序 (Linux 等)程序启动对比

步骤说明内存地图传递U-Boot等引导程序传递物理内存可用范围内核占用内存范围由链接脚本和启动代码符号确定内核占用内存区块空闲内存管理memblock 和 buddy allocator 管理剩余可用内存。

2025-06-23 17:13:21 383

原创 简说 MISRA-C++

MISRA-C++ 是嵌入式系统中广泛采用的C++编码规范,旨在提高代码安全性、可靠性和可维护性。遵循MISRA-C++虽然可能增加开发成本,但能显著降低系统风险,尤其在航空、汽车、医疗等安全关键领域至关重要。MISRA-C++ 通过严格限制语言特性和编程模式,确保嵌入式系统的安全性和可靠性。

2025-06-23 00:50:33 655

原创 嵌入式环境下的C++最佳实践

};栈分配优先,堆分配慎用。使用内存池、arena、slab 等技术提升分配性能。为 STL 配容器写自定义 allocator 与内存池结合。减少碎片化从分配模式设计和内存布局入手。constexpr 和编译时计算🚀为什么要用编译时计算?提高运行时性能 → 把计算尽量提前到编译期。增强类型安全 → 编译器在编译时检查逻辑。减少代码膨胀 → 条件编译更智能。

2025-06-23 00:37:37 792

原创 掌握C++核心特性

特性单继承多继承虚函数纯虚函数动态绑定关系一个基类多个基类实现多态实现接口运行时确定函数优点简单易维护灵活多态行为强制派生类实现多态支持缺点功能受限易引发二义性增加内存开销不能实例化基类性能略低于静态绑定继承与vptr重新赋值的背景每个对象的vptr用来指向当前对象所属类的虚函数表(vtable当你创建一个派生类对象时,这个对象其实包含了基类子对象部分。在构造过程中,随着构造函数的调用,vptr会被设置为对应类的vtable。

2025-06-22 22:38:11 891

原创 从C语言思维转换到C++面向对象思维

public:// 用 :: 作用域定义静态成员变量void MyClass::display() { // 定义成员函数类是用户自定义的数据类型,是把数据(成员变量)和操作数据的函数(成员函数)封装在一起的蓝图。public: // 访问权限:public 表示外部可访问int age;class关键字定义类。成员变量(nameage)存储对象属性。成员函数(sayHello)定义行为。访问控制(publicprivate)控制权限。类只是模板,要用它,你得。

2025-06-22 01:50:15 291

原创 Armbian 开机启动点灯脚本

👉 你的 rc.local、/etc/init.d/ 脚本,其实是 systemd。✅ 当你写启动脚本时,如果用 init.d,其实还是跑在 systemd 的框架下。很好,你想在 Armbian (基于 Debian/Ubuntu) 上查看。✅ Armbian 基于 Debian / Ubuntu,默认就是用。,包括 init 脚本、systemd 服务等。这个命令能看出多用户模式下启动的所有服务和目标。这说明 PID 1 是 systemd。(如果你用的是 init.d 脚本)

2025-06-21 20:59:43 561

原创 机器学习入门的一些基本概念

👉线性回归是一种最简单、最基础的预测方法,用一条直线去拟合数据的趋势。目标:用公式y = wx + b(或多维的找到最合适的w(权重) 和b(偏置),让预测值和真实值尽量接近👉线性回归 = 用直线(或高维超平面)去拟合数据,用最小误差原则找到最合适的权重和偏置。👉决策树是一种像树一样的模型,用一连串的条件一步步把数据分成不同的类别或预测数值。它就像玩二十个问题游戏一样:每次问一个问题,把可能性减半,最后得出答案。👉。

2025-06-21 16:21:50 416

原创 简说MQTT

✅。

2025-06-21 11:29:42 569

原创 物联网与嵌入式设备数据展示和控制的主流思路

物联网和嵌入式设备数据展示与控制正逐步由传统APP转向基于浏览器的Web解决方案Web前端实时数据可视化结合WebSocket实现了跨平台、低成本、高实时性的展示与交互配合MQTT等消息协议,实现数据的可靠传输和灵活订阅适合快速开发、快速迭代与部署,降低门槛和维护成本未来结合AI和大数据可实现更智能的物联网应用。

2025-06-20 23:11:03 907

原创 嵌入式C++学习路线

从C语言基础到嵌入式C++高手的完整路径。

2025-06-20 20:10:00 383

原创 简说 STM32的ADC

通道功能主要用途温度传感器监测芯片内部温度芯片温度保护、温度补偿、环境检测VREFINT内部稳定参考电压ADC校准、电压检测、电源监控很棒的问题!电池快没电时,内部参考电压(VREFINT)会不会降低,咱们来详细说说。电池没电时,VREFINT在芯片正常工作区间内是比较稳定的,不会明显降低。但电池电压低到芯片供电不足时,VREFINT会下降,芯片可能进入异常状态。所以,测量VREFINT既能做ADC校准,也能用来监测电池电压是否健康。内部参考电压VREFINT的典型值约为1.2V。

2025-06-20 01:36:08 324

原创 用 STM32 HAL/LL + Arduino 混合编程

💡 用 STM32 HAL/LL + Arduino 混合编程,这样可以在 Arduino 简易框架下实现 STM32 的底层高级功能(比如高性能 ADC、DMA、PWM 等)。下面梳理一下步骤、注意事项和示例代码。**

2025-06-19 22:37:14 588

原创 nm 命令行工具

nm。

2025-06-19 17:21:12 392

原创 C99 标准引入的重要关键字/特性 inline restrict _Bool _Complex

👉 查看test.scat test.s没有符号、没有call add= 内联成功有或call add= 内联没发生或只部分发生✅很好!restrict的效果确实可以通过生成的汇编来直观看出内存优化区别。我来详细教你怎么做 + 演示差异!

2025-06-19 16:52:53 775

原创 C语言关键字const、 volatile、static

/ 中断代码。

2025-06-19 16:29:26 620

原创 简说 Arduino 库与 C++

简说 Arduino 核心代码(包括库、用户 Sketch)中用到的 C++ 特性,并说明它们是如何在微控制器环境中被使用的。这里用到的特性:✅ 类✅ 继承✅ 虚函数(多态)✅ 覆盖✅ 内联(可能被编译器内联)✅ 用:❌ 避免:Arduino 为了适配微控制器资源受限的特点,并没有完整使用 C++ STL(标准模板库),但它重新实现了 STL 中一些常用的功能,具体包括:✅ 没有完整重新实现 的 STL 部分包括:💡 示例差异假如写一个简单串口回显程序,使用 和 :✅ STL 功能强大,但:

2025-06-19 15:35:10 720

原创 man 的用法

man。

2025-06-18 22:52:11 237

原创 v4l-utils 包

v4l2-ctl是 Linux 下调试、配置视频设备(特别是摄像头)非常常用的命令行工具,它来自包。下面详细讲讲它的用法、常用选项、例子和注意事项。

2025-06-18 19:10:43 414

原创 简说 Linux 用户组

💡用户组 = 权限管理的好帮手💡善用组可以高效、安全地控制资源访问💡组 + 权限 + ACL(访问控制列表)= 强大安全体系这是个 USB 转串口的字符设备文件属主是 root属组是 dialout所有人都可以读写(可能是手动修改过权限)需求命令示例查看当前用户组groups给设备文件增加所有用户权限给设备文件增加属主属组权限修改设备文件所属组修改设备文件属主。

2025-06-18 18:08:53 824

原创 KiCad 9.0 入门教程

符号库:偏好设置 → 管理符号库封装库:偏好设置 → 管理封装库本教程帮助你快速掌握 KiCad 9.0 的基础流程,从原理图到 PCB 输出制造文件。KiCad 是一款灵活强大的 EDA 工具,更多高级功能如自动布线、高级 DRC、插件扩展、Python 脚本等也值得探索!

2025-06-18 17:37:13 732

原创 简说 python

先明确需求优先用标准库主流、活跃、文档好的第三方包参考社区和教程多试用pip install 包名import 包名或from 包名 import 模块/函数调用包里的功能实现需求。

2025-06-17 23:23:00 711

原创 简说 ThingsBoard + ESP32 OTA 方案

/ 循环调用 esp_https_ota_perform(ota_handle)// 检查 esp_https_ota_is_complete_data_received(ota_handle)// 完成后 esp_https_ota_finish(ota_handle)👉 可实现进度条、断点续传、下载中校验等功能。

2025-06-17 22:15:57 746

原创 简单对比 **HTTP**、**MQTT** 和 **CoAP** 这三种通信协议

维度HTTPMQTTCoAP资源开销🚀 高👍 低🏆 最低安全🛡️ HTTPS成熟🛡️ TLS支持好🛡️ DTLS适合物联网消息模式请求/响应发布/订阅请求/响应 + 观察订阅适用Web/REST物联网实时消息超低功耗IoT。

2025-06-17 14:28:02 577

原创 开源物联网(IoT)平台对比

一些。

2025-06-16 19:32:49 948 1

原创 简说ping、telnet、netcat

简说 ping和 telnet命令的作用、用法和区别,方便理解它们在网络诊断中的用途。

2025-06-14 20:34:20 626

原创 用 PlatformIO + ESP-IDF 框架开发 ESP32

用开发 ESP32,是一个现代化、高效的方案。

2025-06-13 19:25:31 446

原创 调试`build.sh` 和用 `CMake` 编译出来的 `.elf` / `.bin` / `.hex` 文件大小或行为不同?

build.sh是你完全掌控编译流程,CMake 如果不特别配置,会加进很多 GCC 默认行为 —— 包括启动代码、链接库、调试符号、浮点支持等。这就导致生成文件大小、内容、行为都可能不同。Cmake 需要加 add_link_options(-nostartfiles -nostdlib)

2025-06-11 23:22:39 431

原创 对比**CMake** 和 **PlatformIO** 构建嵌入式项目方式

场景推荐工具原因桌面应用(Linux/Windows)✅ CMake灵活支持多平台,通用构建系统跨平台库开发✅ CMake支持静态/动态库构建,容易集成简单 Arduino / ESP32 项目快速开发,封装上传、串口监控、库管理等复杂嵌入式系统(RTOS、HAL)✅ CMake (高级)灵活性高但更复杂,需要手动设置工具链和链接脚本快速集成第三方库一行配置即可添加,适合原型设计工具优点缺点CMake灵活强大,通用于任何项目类型;支持复杂构建逻辑;跨平台。

2025-06-11 18:32:23 601

原创 STM32开发GCC常用编译选项

选项作用示例-c编译为.o,不进行链接-o <file>指定输出文件名(可用于.o或可执行)选项作用示例-I添加头文件搜索路径配套使用和-c一起用于编译.c文件和-mthumb是 GCC 针对ARM 架构(特别是嵌入式开发)的编译选项,用于控制生成的机器指令和目标架构。Thumb 是 ARM 指令集的子集,使用16 位压缩指令(后来也支持 32 位扩展指令)。✅ 优点:体积小、执行快(特别在低带宽内存系统中)⚠️ 缺点:功能不如完整 ARM 指令丰富目标芯片推荐选项。

2025-06-11 16:04:45 994

原创 如何用 `.map` 看函数/变量是否被优化

map有没有被编译进来大小是否被优化缩小段地址是否变了是否被裁剪或内联。

2025-06-11 02:12:47 119

原创 比较两种在汇编中定义STM32中断向量表的方式

场景推荐方式说明裸机开发静态定义保证向量表完整性和启动流程可靠动态定义(如 COMDAT)支持灵活配置不同镜像的栈/ISR 映射方案如需,我可以帮你写出一个完整的例子,同时包含两种定义方式,并用宏进行切换。是否需要?

2025-06-10 18:48:52 514

原创 C语言运行时

如果你是做系统开发或高级语言(如 Python、Java)开发,这种“运行时”的理解会帮助你更清晰掌握程序行为背后的逻辑。指的是程序在运行时依赖的一组代码、机制或服务,叫做“运行时库”(runtime library)或“运行时系统”(runtime system)。的执行流程,是理解 Linux 下程序运行机制的关键。下面我们分阶段详解它的全过程,包括涉及的关键符号、运行时库(CRT)、系统调用等。这是“时间”上的意义,指从程序启动开始执行,到退出这一段时间。到了这一步,程序正式进入你编写的逻辑。

2025-06-10 16:23:20 714

原创 对比 STM32 裸机开发和 Linux 应用开发

在 Linux 应用中,.bss.data段的初始化是由操作系统(内核)和 glibc一起完成的,开发者完全不需要关心启动流程中的段初始化问题,这和你在裸机中必须自己清零.bss是根本不同的。

2025-06-10 16:15:03 365

原创 简说stm32的startup.s文件和ld链接脚本

在嵌入式开发中,除了 文件和链接脚本(通常是 文件)对程序的初始化、内存布局以及执行流程有着重要影响。 是汇编语言编写的启动文件,通常用于初始化硬件和设置运行环境。以下是它可能影响的代码部分:堆栈初始化:解释: 会初始化堆栈指针(SP),确保 C/C++ 程序能够正确使用堆栈进行函数调用和局部变量存储。全局变量初始化:解释: 负责将 段从 Flash 复制到 RAM,并清零 段中的全局变量。如果这些步骤未正确完成,程序中依赖于全局变量的代码可能会出现异常行为。主函数调用:解释: 最终调用 函数

2025-06-09 23:13:50 619

原创 简说USB枚举

设备插入↓主机发送RESET (10~20ms)↓设备复位,地址=0↓主机发送Set Address请求(地址=新地址)↓设备响应ACK,切换到新地址↓主机发送Get Descriptor请求↓设备返回设备描述符和配置描述符↓主机发送Set Configuration请求↓设备配置端点,准备通信↓设备正常工作。

2025-06-09 20:55:13 527

原创 简说C编译选项LTO

优点缺点+ 更小的代码体积- 编译/链接时间变长+ 更快的运行速度- 调试难度增加+ 跨文件优化能力强- 与裸汇编或部分库不兼容。

2025-06-09 14:15:07 384

原创 使用CMSIS开发STM32麦克风采样应用

CMSIS-Core:定义了 Cortex-M 核心寄存器、异常向量表、系统启动代码等。CMSIS-DSP:提供数字信号处理库(滤波器、FFT 等)。CMSIS-RTOS:定义 RTOS 的接口,如 CMSIS-RTOS2(兼容 RTX、FreeRTOS)。:标准化外设驱动接口(用于与中间件配合)。CMSIS-Pack:管理芯片包和设备支持文件。特性实现方式双缓冲adc_buffer分为两半触发机制DMA1 HT / TC 中断触发数据处理实时性与稳定性。

2025-06-06 13:46:20 983

原创 简说 FIR 和 IIR 数字滤波器在音频和图像上的使用

属性FIRIIR稳定性固有稳定需设计保证稳定线性相位易实现难实现计算复杂度高(滤波器阶数大)低(阶数小)反馈结构无有实现难度简单复杂在音频处理🎧追求高保真音质 → 用 FIR例如专业音频软件、数字音频工作站(DAW)、母带处理系统可使用对称 FIR 滤波器以实现线性相位和低失真🧠追求效率/实时处理 → 用 IIR例如手机语音、助听器、耳机DSP芯片可使用巴特沃斯、切比雪夫等经典IIR设计FIR 是主力军,IIR 用得少。因为图像处理要处理二维数据。

2025-06-06 12:54:27 592

原创 Armbian 命令行下(无图形界面)使用蓝牙连接音箱并播放音乐

但需要手动配置几个组件,包括蓝牙连接、音频传输(A2DP),和音频输出。板上无蓝牙模块,可以插入USB 蓝牙模块。

2025-06-02 17:57:54 364

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除