自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 理解四种嵌入式串行通信总线:UART、I2C、SPI、CAN 新手可视化指南

UART、I2C、SPI、CAN 没有绝对好坏,只有适不适合。总线一句话理解UART两个设备简单聊天,不需要共享时钟I2C两根线挂多个低速设备,通过地址找人SPI主机指挥从机,高速全双工传数据CAN多个节点抢总线,优先级高的先发,适合复杂现场如果只是调试串口,UART 最方便;如果要少占 IO 挂多个传感器,I2C 很合适;如果要高速读写 Flash 或屏幕,SPI 更合适;如果系统运行在汽车、工业、机器人等强干扰环境中,CAN 通常更稳。

2026-05-11 10:14:49 488

原创 FPGA 实时图像预处理调试:从 RGB565 到 3x3 行缓存、均值滤波与 Sobel

像素流输入-> valid 对齐-> 行缓存保存历史行-> 水平移位寄存器保存历史列-> 形成 3x3 滑动窗口-> 组合运算-> 寄存输出-> VGA 显示灰度、二值化、通道分离、亮度调节属于逐像素处理;均值滤波和 Sobel 属于邻域窗口处理。两类功能看起来不同,但在工程里都遵守同一个原则:数据和 valid 同步推进,每个有效像素只走固定延迟,最终交给 VGA 的永远是一条节奏稳定的像素流。工程链接:FPGA_project: FPGA小项目,万年历,打地鼠,贪吃蛇等游戏。

2026-05-05 18:40:18 445

原创 从 OV7670 到 VGA:一条 FPGA 图像采集与稳定显示链路

obsidian这份工程的目标很直接:把 OV7670 摄像头输出的 DVP 图像流稳定显示到 DE0-CV 的 VGA 接口上。看起来只是“采集再显示”,但真正让画面稳定下来的关键,不在某一个孤立模块,而在时钟、配置、像素拼接、跨时钟 FIFO、SDRAM 帧缓存和 VGA 扫描之间的配合。工程链接:FPGA_project: FPGA小项目,万年历,打地鼠,贪吃蛇等游戏。

2026-05-05 13:30:13 447

原创 Linux 输入系统应用编程完全指南

fd + 1设备认知(01):通过 IOCTL 获取设备信息,了解设备能力;基础读取(02):理解阻塞 / 非阻塞差异,掌握事件读取基本方法;优雅等待(03):poll 是嵌入式 Linux 输入处理的首选方案;经典方案(04):select 适合跨平台场景,需注意nfds规则;异步通知(05):最高效的事件处理方式,适合复杂业务场景。

2026-03-27 18:36:16 505

原创 嵌入式linux--文件IO中dup/dup2的使用

要理解dupdup2dupdup2:复制的是,新、旧文件描述符会(包括文件偏移量、访问模式),这是后续代码解析的关键。

2026-03-23 22:59:14 375

原创 linux -- 文件IO

umaskUserMASK(用户权限掩码)它是一个权限过滤器用来"屏蔽"掉某些权限创建新文件/目录时,它决定默认权限。

2026-03-19 21:51:52 455

原创 嵌入式linux学习--makefile的使用以及通用解析

(foreach):当你需要对一个列表中的每个元素执行相同的转换或添加操作时使用(如为目录加前缀)。$(filter):当你需要从一个混合的文件列表或字符串中根据类型进行筛选或排除时使用(如分离源文件和目标文件)。:这是你自动发现项目源文件的主要工具,使得 Makefile 无需在每次增删文件时都手动更新文件列表,极大提高了可维护性。这三个函数组合使用,可以构建出非常灵活和强大的自动化构建规则,是编写专业级 Makefile 的基石。4、Makefile实例clean:a. 改进:支持头文件依赖。

2026-02-23 21:09:24 605

原创 makefile通用解析

自动化依赖管理:通过-MD -MF自动生成头文件依赖,解决了手动维护依赖的痛点递归构建:支持多级目录,每个目录独立管理灵活配置:支持全局、目录级、文件级三级编译选项易于维护:新增文件只需在对应目录的Makefile中添加一行高效构建:只重新编译修改过的文件及其依赖对于嵌入式Linux开发,这套系统尤其重要,因为:嵌入式项目通常有多个模块和目录需要支持交叉编译编译参数复杂(优化级别、架构选项等)头文件依赖关系复杂。

2026-02-23 21:08:46 659

原创 嵌入式Linux学习-GCC编译器使用详解以及与makefile对比

本文介绍了GCC编译器在嵌入式开发中的交叉编译应用。主要内容包括:1)区分本地编译与交叉编译,说明在x86开发环境下为ARM架构生成程序必须使用交叉编译器;2)详解GCC编译的四个阶段(预处理、编译、汇编、链接)及对应选项;3)重点讲解常用编译选项,如-Wall警告、-g调试、-O优化等级、-I头文件路径等;4)介绍相关工具链命令如objdump和objcopy的使用场景。文章为嵌入式开发者提供了完整的交叉编译指南,涵盖从开发调试到发布优化的全流程关键命令。

2026-02-23 14:23:25 605

原创 Exlink嵌入式多功能调试器复刻--功率板主控

数据手册如下:CH334F一款一款。它在一个芯片内融合了两种核心功能,是设计的理想选择。简单来说,:它把来自电脑的一个USB连接,扩展成一个,并且其中。参考此电路图来设计电路图。

2026-02-07 15:57:15 938

原创 嵌入式多功能调试器复刻--功率控制板电源部分

开关控制:单片机通过POWER_CTRL引脚控制MOS管开关,从而接通或断开负载电源。电流感知:负载电流流经采样电阻R28​ 产生微小压降 → 被差分放大器U87​ 精确放大 → 输出一个与电流成正比的、强度合适的电压信号,送至功率监测芯片的电流检测输入端。电压感知VOUT电压可能直接测量,VOUT_BUS电压经过高阻抗分压网络(R106-R110)​ 衰减和滤波(C21, C22)​ 后,送至功率监测芯片的电压检测输入端。计算与上报功率监测芯片(U8)

2026-01-31 17:02:41 840

原创 数据结构-排序-排序的七种算法(2)

重复遍历列表,比较相邻元素,如果顺序错误就交换它们最好:O(n)(已有序时)平均:O(n²)最坏:O(n²):O(1):稳定实现简单对部分有序数据效率较高每轮将最大元素"冒泡"到末尾。

2025-06-01 14:55:49 1177

原创 数据结构-排序(1)

给定一个包含n个元素的序列和一个关键码Ki(通常是记录Ri的一个属性),排序的目标是找到一个排列,使得关键码序列满足一个特定的或关系。就是把一堆杂乱无章的数据,按照某种规则(比如数字大小、字母顺序、日期先后)排列整齐的过程。

2025-05-28 21:10:51 1169

原创 数据结构-查找(1)

适用于数据频繁变动的场景,通过动态平衡结构(如AVL树、B+树)维护操作效率。:平均 𝑂(log⁡log⁡𝑛)O(loglogn),最坏 𝑂(𝑛)O(n)。:平均 𝑂(log⁡𝑛)O(logn),最坏 𝑂(𝑛)O(n)(退化为链表)。:适用于数据固定的场景,以预处理(如排序)换取高效查询,典型方法为二分查找。:平均 𝑂(1)O(1),最坏 𝑂(𝑛)O(n)(冲突严重时)。)采用哈希表,支持平均 𝑂(1)O(1) 的查找。:严格 𝑂(log⁡𝑛)O(logn)。:是否依赖数据结构的

2025-05-26 21:31:58 954

原创 数据结构-树(2)

二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两颗互不相交的,分别称为根结点的左子树和右子树的二叉树组合。 如图: 特点:每个结点最多 2 子树,区分左右顺序如下思维导图:性质一:第 i 层最多 2^(i-1) 个结点(i≥1)性质二:深度为 k 的二叉树最多 2^k-1 个结点。性质三:终端结点数 n₀ = 度为 2 的结点数 n₂ + 1(n₀ = n₂ + 1)。终端结点数 n₀ = 度为 2

2025-05-12 15:29:02 1226

原创 数据结构-树(1)

其中 data 是数据域,frstchikd 为指针域,存储该结点的第一个孩子结点的存储地址,rightsib是指针域,存储该结点的右兄弟结点的存储地址。这种方法克服了浪费空间的缺点,对空间利用率是很高的,但是由于各个结点的链表是不相同的结构,加上要维护结点的度的 数值,在运算上就会带来时间上的损耗。任一棵树,它的结点的第一个孩子如果存在就是唯一的,它的右兄弟如果存在也是唯一的。这种方法对于树中的各个结点的度相差很大时,显然是很浪费空间的,因为有很多的结点,它的指针域是空的。每个结点有多个指针域,其中。

2025-05-12 11:32:15 1232

原创 数据结构之串

定义:串是由零个或多个字符组成的有限序列,记作 s="a1​a2​…an​",例如 "data structure"、"123" 等。空串:无任何字符,长度为 0,用""表示,例如短信内容为空时即为空串。空格串:由一个或多个空格组成,有长度,例如 " "(3 个空格)。子串与主串:子串是主串中连续字符序列。生活实例:回文诗 “上海自来水来自海上” 是一个串,其正读和反读相同,体现了串的逆序特性;英文单词 “friend” 中,“end” 是子串,“friend” 是主串。

2025-05-08 17:16:30 1213

原创 数据结构之栈与队列

栈:队列:plaintext 队列: plaintext 4、典型应用场景 场景 栈的应用 队列的应用 函数调用 存储函数调用的参数、返回地址(系统栈自动管理)。 无直接应用,函数调用本质是栈结构。 表达式处理 后缀表达式求值、中缀转后缀(处理运算符优先级)。 无相关应用。 括号匹配 检测括号是否正确嵌套(如)。 无相关应用。 任务调度

2025-05-07 21:39:50 2491

原创 数据结构的基本概念以及算法的基本内容

数学模型及其操作的集合,与具体实现无关。

2025-05-03 17:59:57 1287

原创 总结C++中的STL

STL 即标准模板库,是 C++ 标准程序库的重要组成部分,包含常用数据结构和算法,体现了泛型化程序设计思想,基于模板实现,提高了代码的可复用性 2. deque 特性:双端队列,由多个固定大小的数组块组成,支持在两端快速插入和删除元素,同时也支持随机访问。 优缺点:优点是在两端插入和删除元素的时间复杂度为常数,适合需要频繁在两端操作的场景。缺点是随机访问的效率略低于 。 常用操作: 3. list 特性:双向链表,每个节点包含数据和指

2025-05-01 21:55:55 1144

原创 C语言中结构体的字节对齐的应用

字节对齐通过优化内存布局,平衡性能与空间效率。关键点:默认对齐规则由成员类型和编译器设置决定。调整成员顺序是最简单的优化手段。显式控制对齐适用于特殊场景(如硬件访问、协议定义)。跨平台开发需谨慎处理对齐差异。

2025-04-26 16:35:47 1646

原创 C语言里位操作的应用

右移有符号数的行为(算术右移还是逻辑右移)可能因编译器而异。:过度使用位操作会降低代码可读性,需添加详细注释。:嵌入式设备、内存敏感场景(如 IoT 设备)。:需要极致优化的代码(如图形处理、网络协议栈)。:移位操作超出变量范围会导致未定义行为(例如。:将多个小整数打包到单个变量中。:替代部分数学运算或逻辑判断。在32位整型中是合法的,但。:控制寄存器、操作外设。

2025-04-25 15:41:11 744

原创 FOC原理总结(从电机原理到功能实现)

电机旋转的本质是通过。

2025-04-11 16:47:46 2005

原创 IIC,SPI详细内容以及它们与串口通信的区别

双向数据线,用于传输数据。:时钟线,由主设备控制,同步数据传输。所有设备共享 SDA 和 SCL,通过区分设备。总线需外接(通常 4.7kΩ),以保证信号在空闲时为高电平。

2025-04-06 14:47:14 2293

原创 Modbus通信协议基础知识总结及应用

通过功能码+偏移量定位数据,长地址兼容全范围,短地址简化配置。

2025-03-18 21:23:32 3414

原创 定时器TIM输出比较及其应用

在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域 PWM参数:频率 = 1 / TS 占空比 = TON / TS 分辨率 = 占空比变化步距//配置输出比较单元//配置强制输出波形函数//配置CCR寄存器的预装功能,即影子寄存器,就是写入的值不会立即生效,而是在更新事件才会生效//配置快速使能//外部事件时清除REF信号。

2024-10-06 00:08:00 1816

原创 stm32定时器中断和外部中断

在stm32中,用来统一分配中断优先级和管理中断的EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序支持的触发方式:上升沿/下降沿/双边沿/软件触发支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断(即不能PA1和PB1组合)通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒触发响应方式:中断响应/事件响应。

2024-10-05 16:06:58 3290

原创 PWR电源控制

其中PDDS==0,进入停机模式,PDDS==1,进入待机模式//恢复初省配置//后备访问//使能PVD功能//配置PVD的阈值电压//唤醒使能//进入停止模式//进入待机模式//标志位。

2024-10-02 22:34:48 1361

原创 时间戳知识点+stm32实时时钟代码编写

stm32入门教程笔记--读写备份寄存器&实时时钟

2024-10-02 16:01:33 2074

原创 STL函数对象

函数对象(仿函数)是,不是一个函数。

2024-04-13 12:11:29 1252

原创 STL容器

set<T> st;//返回容器中元素的数目。//返回容器中元素的数目。//判断容器是否为空。//判断容器是否为空。//交换两个集合容器。//交换两个集合容器。总结:利用仿函数可以指定set容器的排序规则。统计set容器大小及交换set容器。功能描述:创建set容器以及赋值。set容器进行插入数据和删除数据。示例二:set存放自定义数据类型。利用仿函数,可以改变排序规则。示例1:set放置内置数据。

2024-04-07 01:00:34 1444 1

原创 STL容器(3)

stack是一种的数据结构,它只有一个出口。

2024-04-06 12:30:36 1088

原创 STL容器(3)--deque+案例--评委打分

/删除[beg,end]区间的数据,返回下一个数据的位置。//在pos位置插入一个elem元素的拷贝,返回新数据位置。//在pos位置插入[beg,end]区间的数据,无返回值。//删除pos位置的数据,返回下一个数据的位置。//在pos位置插入n个elem元素,无返回值。//清空容器中所有的数据。//返回索引的idx所指的数据。//返回容器中最后一个数据元素。//返回索引的idx所指的数据。//在容器头部插入一个数据。

2024-04-05 10:40:55 848

原创 STL常用容器(2)---vector容器

/将v[begin(),end()]区间中的元素拷贝给元素。//如果容器变短,则末尾超出容器长度的元素被删除。//如果容器变短,则末尾超出容器长度的元素被删除。//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。//容器预留len个元素长度,预留位置不初始化,元素不可访问。//返回容器中元素的个数。//返回容器中最后一个数据元素。解释:未预留空间时,可访问的元素较多,预留空间后,该空间的元素不可访问,可访问的元素会变少。

2024-04-04 11:03:08 1114

原创 STL常用容器(1)--string容器

/从pos位置查找s的前n个字符第一次位置。

2024-04-04 09:00:25 1289

原创 C++提高编程之STL初始

学习目标:vector中存放自定义数据类型,并打印输出1,存放对象//vector存放自定义数据类型public:int m_age;//向容器中添加数据//遍历数据it!= v.end();it++)cout

2024-04-02 00:24:45 1410

原创 C++之模板

template。

2024-03-16 23:23:42 1120

原创 C++之职工管理系统

职工管理系统可以用来管理公司内所有员工的信息主要利用C++来实现一个基于多态的职工管理系统公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责。管理系统中需要实现的功能如下:退出管理程序:退出当前管理系统增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号显示职工信息:显示公司内部所有职工的信息删除离职职工:按照编号删除指定的职工修改职工信息:按照编号修改职工个人信息。

2024-03-14 21:26:15 1940 2

原创 C++之多态以及文件处理

重写:函数返回值类型 函数名 参数列表 完全一致称为重写。

2024-03-12 16:42:01 1261

原创 C++之继承

问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?总结:同名静态成员处理方式和非静态处理方式一样,只不过有两种访问方式。class 子类 :继承方式 父类1, 继承方式 父类2...子类继承父类后,当创建子类对象,也会调用父类的构造函数。问题:继承中同名的静态成员在子类对象上如何进行访问?从基类继承过来的表现其共性,而新增的成员体现其个性。一类是从 基类继承过来的,一类是自己增加的成员。问题:父类和子类的构造和析构顺序是谁先谁后?输入cd+空格 然后复制新目录。

2024-03-11 23:55:45 885

空空如也

空空如也

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

TA关注的人

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