- 博客(89)
- 资源 (3)
- 收藏
- 关注
原创 ARM架构运行模式学习笔记
ARM处理器支持多种运行模式,包括用户模式(普通应用)、特权模式(如FIQ/IRQ中断处理、系统管理等)以及安全扩展模式(TrustZone)。不同模式具有各自的寄存器组和访问权限,适用于从嵌入式系统到移动设备等多样化场景。ARMv8架构引入异常级别(EL0-EL3)替代传统模式,支持64位操作和安全监控。Cortex-M系列则简化为线程模式和处理模式,优化实时性能。开发时需注意合理分配任务、优化中断处理并遵循安全原则,以充分发挥各模式特性。
2026-03-22 12:33:43
439
原创 i.MX6ULL NAND Flash 烧录脚本说明
本脚本用于通过UUU(Universal Update Utility)工具将完整的Linux系统烧录到MYS-6ULL-Y2开发板的NAND Flash中。
2026-03-20 17:13:58
387
原创 U-Boot学习笔记(NXP IMX6ULL)
本文档全面介绍U-Boot引导加载程序,包括其功能特点、目录结构、启动流程和开发方法。U-Boot支持多种处理器架构,提供硬件初始化、命令行交互和内核加载等功能。文档详细解析了U-Boot的模块化目录结构,区分了U-Boot提供和厂商定制的内容,并阐述了启动流程的关键阶段。此外,还提供了硬件初始化方法、常用GPIO操作函数,以及编译所需的工具链和具体编译步骤,为嵌入式开发者快速上手U-Boot开发提供了实用指导。
2026-03-20 13:23:11
407
原创 ONNX 与 RKNN 模型处理详细对比笔记
本文对比了ONNX和RKNN模型在目标检测任务中的差异。ONNX作为通用格式适用于多种硬件平台,采用NCHW输入格式;而RKNN专为Rockchip芯片优化,使用NHWC输入格式并利用NPU加速。两种模型的输出均为6维向量,但坐标表示方式不同:ONNX输出绝对坐标,RKNN输出归一化坐标。预处理步骤都包含图像缩放、BGR转RGB和归一化处理,但数据布局转换方式有所区别。这些差异直接影响模型在不同硬件平台上的部署方式和性能表现。
2026-02-06 13:57:18
850
原创 由Yolov8n 的PT模型转换而来的ONNX模型推理C++接口类
本文介绍了基于YOLOv8模型的ONNX检测器实现,对比了Python(Ultralytics库)和C++(ONNX Runtime)两种实现方式的关键差异。Python版本提供结构化结果输出(自动NMS处理),而C++版本需要手动解析原始张量并实现NMS算法。重点展示了C++实现中的ONNXDetector类设计,包含模型加载、预处理、推理和后处理完整流程。该类封装了图像缩放、格式转换、IoU计算和NMS等核心功能,支持自定义置信度阈值,并提供检测结果可视化方法。代码结构清晰,通过头文件和源文件分离实现模
2026-02-03 10:29:46
235
原创 C++ ONNX Runtime 与 Python Ultralytics 库实现 YOLOv8 模型检测的区别
本文对比了Python Ultralytics库与C++ ONNX Runtime实现YOLOv8目标检测的差异。Python方案通过ultralytics库一键安装,仅需1-2行代码即可完成完整推理流程,自动处理预处理、推理和后处理。而C++方案需手动安装依赖库,编写预处理(图像缩放、格式转换)、推理(ONNX Runtime API调用)和后处理(NMS算法实现)代码,输出需手动解析原始张量数据。Python适合快速开发,C++更适合性能优化场景,两者在环境配置、代码复杂度和开发效率上存在显著差异。
2026-02-02 17:14:15
748
原创 Rust多线程编程学习笔记
本文介绍了Rust语言中的多线程编程基础和实践方法。主要内容包括:同步线程编程(线程创建、通信、共享状态、返回值和线程池)、异步线程编程(Tokio运行时、异步任务和通道)、线程安全机制(所有权、同步原语、Send/Sync trait)以及性能优化技巧。Rust通过独特的所有权系统和类型系统保障线程安全,避免数据竞争问题。文章提供了详细的代码示例,展示如何实现线程间通信、状态共享和任务处理,并比较了同步与异步编程的特点和适用场景,为开发者提供了Rust多线程编程的全面指导。
2026-01-30 11:53:50
657
原创 YOLOv8n 输入输出格式笔记
本文详细介绍了YOLO模型的输入输出格式,包括PyTorch和ONNX两种版本。PyTorch模型输入为torch.Tensor,形状为(batch_size, 3, height, width),输出包含原始检测结果和后处理结果;ONNX模型输入为numpy.ndarray,输出为List[ndarray]。两种模型都支持自动预处理,输出格式在多类别和单类别模型中有所不同,主要区别在于第4、5索引的含义。Ultralytics库可统一处理两种模型的输入输出,简化使用流程。
2026-01-30 11:35:18
796
原创 C++ 多线程【笔记】
本文深入解析C++多线程编程技术,涵盖同步和异步两种编程范式。在同步编程方面,详细介绍了互斥锁(Mutex)、条件变量(Condition Variable)等基础同步原语的使用方法,以及读写锁(Read-Write Lock)和屏障(Barrier)等高级同步模式的实现。异步编程部分重点讲解了Future/Promise模式,展示了如何通过std::async创建异步任务,以及使用std::promise主动设置异步操作结果。代码示例涵盖了线程安全计数器、有界缓冲区、线程安全哈希表等典型应用场景,并介绍了
2026-01-03 16:00:02
257
原创 C++ 引用【笔记】
本文深入探讨了C++引用的核心概念与应用。首先分析了引用的本质与内存布局,对比了引用与指针的关键区别。然后详细介绍了左值引用与右值引用,包括移动语义的实现原理。接着讲解了模板中的万能引用和完美转发技术,以及引用限定成员函数的用法。文章还涵盖了引用生命周期延长规则和临时对象处理的注意事项,最后展示了引用在函数式编程中的典型应用场景。这些内容系统性地覆盖了C++引用机制的核心知识点,为深入理解现代C++编程提供了重要参考。
2026-01-03 15:49:44
297
原创 C++ 模板【笔记】
本文系统介绍了C++模板编程的核心概念与高级技巧。首先阐述了模板编译的两阶段机制,包括实例化过程和语法检查阶段。随后深入解析了函数模板的推导机制、完美转发、SFINAE等特性。在类模板部分,重点讲解了特化、可变参数和模板元编程技术。最后介绍了模板设计模式,包括CRTP和策略模式等实用技巧。全文通过丰富的代码示例,展示了模板编程的强大功能与灵活性,为开发高效、类型安全的C++程序提供了有力工具。
2026-01-03 15:46:50
344
原创 C++智能指针【笔记】
智能指针是现代C++中管理资源的核心工具,遵循RAII原则实现自动资源管理。unique_ptr提供独占所有权,通过删除拷贝构造函数确保资源唯一性,支持移动语义和自定义删除器。shared_ptr采用引用计数机制实现共享所有权,但需注意循环引用问题,可通过weak_ptr解决。weak_ptr作为弱引用不增加计数,需通过lock()检查对象有效性后使用。这些智能指针共同构成了C++安全高效的内存管理方案,有效防止资源泄漏。
2026-01-03 15:43:32
270
原创 STM32 F4移植LVGL 9.4.0版本教程(Keil工程,裸机)
本文介绍了在STM32F4项目中移植LVGL 9.4.0的详细步骤。主要内容包括:1)下载并精简LVGL源码,保留核心文件和目录;2)将LVGL添加到Keil工程,配置头文件路径和源文件;3)修改配置文件(lv_conf.h)和显示接口(lv_port_disp.c);4)实现屏幕驱动,包括初始化、刷新缓冲区和画点API;5)为LVGL提供tick计数和任务处理。文章特别强调了文件结构完整性、关键配置项的修改以及显示驱动的实现方法,为在STM32平台使用LVGUI提供了实用指南。
2025-11-20 15:52:25
694
4
原创 STM32H7+FreeRTOS+LwIP移植EtherCAT开源主站SOEM
摘要:本文介绍了在FreeRTOS系统下移植EtherCAT主站协议栈的关键代码修改,主要包括:1) 在osal.c中实现高精度定时和延时功能,使用TIM17硬件定时器提供微秒级精度;2) 在oshw.c中添加大小端转换宏定义;3) 在nicdrv.h中定义FreeRTOS互斥量操作接口,替换原系统调用。这些修改使协议栈能在FreeRTOS实时操作系统中稳定运行,满足EtherCAT通信的实时性要求。
2025-08-05 14:46:40
1234
1
原创 STM32CubeIDE最新汉化教程
本文介绍了为Eclipse IDE安装中文语言包的详细步骤:1)提供官方中文包软件源地址;2)通过"Help > Install New Software"添加软件源;3)选择简体中文语言包进行安装;4)信任软件源证书;5)完成安装后重启Eclipse;6)最终实现界面中文化。整个过程包含6个关键步骤,并配有操作截图说明,帮助用户快速完成Eclipse的本地化设置。
2025-07-23 13:31:57
1182
原创 CANopen 学习笔记(2)
修改映射参数后执行sendPDOevent(&CanFestival_Master_Data);/* 发送PDO事件 */则会触发PDO传输。还有一直就是定时器异步发送,配置发送类型为0xFE,定时器发送时间为0x64,则会以100ms的周期发送PDO。发送类型设置为0xFE或0xFF。
2025-01-14 11:28:45
462
原创 CANopen 学习笔记(1)
为复位节点通讯(让节点的 CAN 和 CANopen 通讯重新初始化,一般用于总线收到干扰,导致节点总线错误被动,或者总线关闭时)。PDO 通信参数,定义了该设备所使用的 COB-ID、传输类型、定时周期等。为复位节点应用层(让节点的应用恢复初始状态,比如列车门都恢复打开状态);为进入预操作状态(让节点进入预操作状态);为启动命令(让节点进入操作状态);为停止命令(让节点进入停止状态);
2025-01-09 11:00:44
949
原创 FreeRTOS Lwip Netconn APi TCP Server 1对多
FreeRTOS Lwip Netconn APi TCP Server 1对多
2024-12-31 10:50:29
342
转载 LwIP 官方 socket api 示例
源文件#include "socket_examples.h"#include "lwip/opt.h"#if LWIP_SOCKET && (LWIP_IPV4 || LWIP_IPV6)#include "lwip/sockets.h"#include "lwip/sys.h"#include <string.h>#include <stdio.h>#ifndef SOCK_TARGET_HOST4#define SOCK_TARGE
2024-12-27 15:30:55
315
原创 C++ STM32 F4xx USART LL库 DMA + IDLE ISR 驱动裸机 +FreeRTOS 任务通知
C++ STM32 F4xx USART LL库 DMA + IDLE 收发 ISR 驱动裸机 +FreeRTOS 任务通知
2024-12-26 18:06:05
402
原创 最新Keil V6编译器,完美解决串口重定向打印,卡BKPT的问题(不使用MicroLIB)
最新Keil V6编译器,完美解决串口重定向打印,卡BKPT的问题(不使用MicroLIB)
2024-12-12 16:02:45
739
原创 使用Keil V6编译 FreeRTOS CMSIS V2版本 ETH + Lwip 编译报错问题解决方式
STM32CUBE+KEIL+FREERTOS+LWIP+Compiler V6 使用Keil V6编译 FreeRTOS CMSIS V2版本 ETH + Lwip 编译报错问题最新解决方式
2024-12-12 11:19:43
1774
原创 STM32 使用ARM Compiler V6 编译裸机 LWIP协议栈报错的解决方法
stm32 lwip使用keil v6 编译报错的解决办法。
2024-11-27 16:44:17
881
原创 1553B总线控制器 BU64843模式配置
寄存器地址#define INT_SHIELD_REG 0x0000u //中断屏蔽寄存器#define CONFIGURE_REG1 0x0001u //配置寄存器1#define CONFIGURE_REG2 0x0002u //配置寄存器2#define RESET_REG 0x0003u //启动/复位寄存器(写)#define BC_RT_CMDREG
2024-11-19 11:16:31
996
原创 STM32 HAL库 定时器编码器模式的使用
当配置定时器为编码器模式时,TIM_CH1、TIM_CH2为编码器脉冲输入;默认使用CH1做基准,判断CH2的下降沿来确定编码器运转方向。当定时器使用编码器模式时,TIM_CH3和TIM_CH4可以用作PWM脉冲输出,但是脉冲的频率取决于编码器输出脉冲的频率。
2024-07-28 17:19:37
1835
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅