- 博客(37)
- 收藏
- 关注
原创 UDC否定响应码学习
在UDS(Unified Diagnostic Services,统一诊断服务)协议中,当诊断仪向ECU发送请求后,ECU可能返回否定响应,表示无法执行请求。否定响应有固定的报文格式。
2025-08-27 10:40:24
260
原创 深入浅出UDS:现代汽车诊断的核心协议
UDS作为汽车诊断领域的“通用语言”,其结构化的6大类26种服务共同构成了一个功能强大、灵活且安全的体系。随着汽车电子化、智能化程度不断提高,UDS的重要性愈发凸显。理解UDS协议,对于从事汽车研发、测试、售后维修以及相关技术爱好者而言,已成为一项不可或缺的核心技能。欢迎在评论区留言讨论!
2025-08-26 15:38:34
373
原创 深入浅出理解动态链接库(DLL)
动态链接库的英文全称是,在 Windows 世界裡,它的文件扩展名通常是.dll。你可以把它想象成一个公共代码仓库。函数:比如计算、加密、文件操作等功能的代码块。类:面向对象编程中的类定义。资源:如图标、图片、字符串、对话框模板等。驱动程序:与硬件通信的代码。它的核心思想是“共享”和“动态”。多个应用程序可以共享使用同一个DLL文件,而“链接”这个操作发生在程序运行时(动态),而非编译时。动态链接库是现代操作系统的基石之一,它通过共享和运行时链接。
2025-08-26 14:49:04
389
原创 编译与链接学习
阶段 | 输入 | 输出 | 核心任务 | 常见命令 (GCC) |编译main.c(源代码) |main.o(目标文件) | 翻译单个文件,生成机器码,但存在未解决的引用 |链接main.omath.olibsa.out(可执行文件) | 合并所有模块,解析符号分配最终地址但背后依然是先逐个编译,再统一链接的过程。编译错误:通常是语法错误,比如漏了分号、拼错关键字。发生在gcc -c阶段。链接错误:通常是,意味着找不到函数或变量的定义。发生在链接阶段。
2025-08-26 14:00:53
925
原创 正则表达式学习(基础)
这张图几乎涵盖了正则表达式最核心、最常用的语法。学习顺序:先理解元字符(是什么),再掌握限定符(有多少),然后用或运算符和字符类构建更复杂的关系,最后在需要精确控制时使用懒惰匹配。如何练习一定要动手!打开或regexr.com,把例子输进去,自己修改、测试,观察结果。这是最快的学习方法。常见用途验证字符串^\d{11}$(11位数字)提取信息(从日志中提取年月日)替换文本:将\bMr\b替换为Mr.(确保Mr后面有点)别怕:它看起来像乱码,但其实逻辑清晰。分解。
2025-08-25 18:01:56
1169
原创 QT中的trimmed() 方法(1)
是 Qt 框架 中 类提供的一个方法,用于 去除字符串首尾的空白字符(whitespace characters)。它的作用类似于标准 C++ 中的 的 操作,但专为 Qt 的字符串设计。移除字符串开头和结尾的所有空白字符,包括:空格 ()制表符 ()换行符 (、)其他 Unicode 空白字符(如全角空格)不会修改字符串内部的空白字符。返回一个新的 ,是原字符串去除首尾空白后的副本。原字符串不会被修改(因为 是隐式共享的)。3. 示例4. 对比其他相似方法方法作用是
2025-08-08 13:55:33
228
原创 用 Enigma Virtual Box 把 Qt 程序压成单文件 EXE——从编译、收集依赖到一键封包
关键词:Qt、windeployqt、Enigma Virtual Box、单文件、绿色软件。
2025-08-07 15:15:42
484
原创 学习的智能硬件QT教程笔记——(4)信号与槽学习
右键点击转到槽,在里面选择合适的信号,这里选择点击,即点击控件执行函数,(所执行的函数需要写在下图中的函数体中)。此时代码中会自动在设置的.ui文件对应的.cpp和.h文件中添加相应的槽函数。connect();// 连接信号与槽 (谁发出信号 发出什么信号(宏) 谁处理信号 怎么处理信号)链接:https://pan.quark.cn/s/e69d78830a0d?启动新进程,需在.h头文件中包含相应的类( #include )打开「夸克APP」即可获取。
2025-08-04 14:34:19
247
原创 为什么要烧录固件?——从生产到运维的全流程解析
烧录固件(Firmware)是嵌入式系统和电子设备开发、生产、维护中的关键步骤,其核心目的是。STM32单片机的固件决定了它是控制电机,还是处理CAN总线数据。
2025-07-30 11:26:18
552
原创 C++ 结构体struct学习
元素描述关键作用是否必须?成员变量结构体存储的数据项描述对象的状态核心,通常有成员函数操作成员变量的函数封装操作、实现对象行为常见,推荐使用构造函数特殊函数,对象创建时自动调用初始化对象状态强烈推荐有(至少默认)析构函数特殊函数,对象销毁时自动调用清理资源(内存、文件等)需要管理资源时必须访问说明符publicprivateprotected控制访问权限,实现封装良好设计推荐使用静态成员static变量/函数,属于结构体本身而非实例共享数据、提供类级别工具函数按需使用嵌套类型。
2025-07-22 15:36:46
641
原创 (qt代码解释1)代码解释:private: Ui::Widget *ui
的私有指针,用于在代码中操作你在设计器里拖出来的控件。,它包含了你在设计器里添加的所有控件的指针(例如。在这个头文件里,定义了一个命名空间。创建一个界面文件(如。
2025-07-22 14:07:08
176
原创 # 条件编译`#ifdef`、`#ifndef`等补充
/ 编译时定义宏:g++ -DUSE_OPTIMIZED_VERSION=1 main.cpp// 优化版本#else// 基础版本#endif。
2025-07-21 10:22:27
411
原创 C++ 中的 `#ifndef` 和 `#endif` 详解 (c++学习 )
C++ 中的 和 详解在 C++ 中, 和 是预处理指令,用于条件编译。它们共同构成了 C/C++ 程序中防止重复包含头文件的核心机制。工作原理首次包含头文件:后续包含头文件:避免重复定义错误:提高编译效率:防止循环包含:宏命名的通用规范命名格式:(全大写)示例: → → → 其他常见用法1. 功能开关编译时可通过 禁用日志功能3. 调试模式控制与 的比较特性/标准支持C/C++ 标准编译器扩展可靠性10
2025-07-19 17:59:55
325
原创 Keil 中代码缩进规则总结.md
Keil μVision IDE中代码缩进主要依赖手动控制,建议采用4空格缩进(而非Tab)以保持一致性。遵循层级缩进原则,函数体、条件语句、循环等代码块需增加一级缩进。推荐使用K&R大括号风格({不换行)。通过Edit→Configuration设置Tab为4空格并勾选"Insert spaces for tabs"。避免混用空格和Tab,复杂表达式可手动对齐。全项目应保持统一缩进风格,必要时可用Astyle等工具辅助格式化。
2025-07-19 14:58:55
395
原创 &在C++中的语法格式
C++中&符号有三种主要用法,各有严格语法规范:1) 取地址运算符&var(无空格);2) 引用声明Type& ref(类型后无空格);3) 位与运算a & b(前后加空格)。Keil等嵌入式环境特别强调区分引用声明和位与运算的格式差异,避免混淆。最佳实践要求取地址和引用声明时&紧贴标识符,位与运算保留空格,项目内保持风格统一,必要时用括号明确优先级。错误格式如& var或Type & ref会导致代码规范问题。
2025-07-19 14:34:12
514
原创 C++ 中,运算符 .、::、: 和 -> 的区别
C++中主要运算符的区别:.用于对象实例访问成员(如obj.member);::用于作用域解析,访问命名空间或类成员(如Class::staticVar);:用于初始化列表、继承和标签等语法;->用于指针访问成员(如ptr->member)。关键区别在于:.操作对象实例,::操作作用域,:是语法标记,->操作对象指针。ptr->member等价于(*ptr).member,而静态成员需用::访问。
2025-07-17 20:21:09
312
原创 (一)QCustomPlot 控件---QT Creater控件学习(自学)
中正确声明 QCustomPlot 的头文件。是 Qt 框架中一个功能强大的。
2025-07-17 19:47:58
1103
原创 面向过程和面向对象编程(自学)
摘要: 面向过程(POP)和面向对象(OOP)是两种编程范式。POP关注“步骤”,将任务分解为线性执行的函数(如菜谱步骤),适合简单逻辑。OOP关注“对象协作”,将数据和操作封装为独立对象(如厨师、锅具等),通过交互完成任务,支持封装、继承、多态,更适合复杂系统。关键区别在于:POP强调“怎么做”(函数流程),OOP强调“谁来做”(对象职责)。POP直接高效但难维护,OOP结构清晰但稍复杂。现代开发以OOP为主,但POP仍用于脚本或性能敏感场景。理解两者差异对编程思维至关重要。
2025-07-17 19:45:16
812
原创 Qt Creator 中开发一个软件的完整流程和文件层级结构
本文介绍了在Qt Creator中开发软件的基本流程和文件结构。开发步骤包括:创建项目(选择模板、设置路径和模块)、设计界面(拖拽控件、修改属性)、编写代码(声明变量、实现功能)、编译运行和调试。项目文件结构主要包含Headers、Sources、Forms、Resources文件夹和.pro配置文件。文章还详细说明了关键文件的作用,如.pro项目配置、main.cpp程序入口和UI文件关联方式,并提供了新手常见问题的解决方案(如控件查找、程序崩溃处理等)和学习建议(从基础功能入手、查阅文档)。
2025-07-17 19:38:40
1295
原创 git常用指令
Git是一个分布式版本控制系统,它帮助开发者跟踪和管理代码变更。这些命令覆盖了Git版本控制的大多数常见操作。掌握这些命令对于日常的版本控制工作非常有帮助。
2024-09-28 11:22:01
391
原创 嵌入式面试———C常见问题
数组是在创建时大小就固定的数据结构。例如,定义一个整数数组:c定义和使用在C语言中,数组是一种基本的数据结构,用于存储固定大小的相同类型的元素序列。数组的声明包括指定元素的类型和数组的长度。特点固定大小:数组的大小在声明时确定,并且不能改变。零索引:数组的索引从0开始。连续内存:数组元素在内存中是连续存储的。相同类型:数组中的所有元素必须是相同的数据类型。可以是多维的:可以定义多维数组。malloc()malloc()联合体(union):不同的数据共享同一块内存空间。结构体(
2024-09-28 11:21:18
1512
原创 嵌入式面试——常见排序
冒泡排序是一种简单的排序算法,它重复地遍历待排序的列表,比较每对相邻元素,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复进行的,直到没有再需要交换的元素为止,这意味着列表已经排序完成。选择排序是一种简单直观的排序算法。它的工作原理是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。快速排序是一种分而治之的排序算法,它通过一个轴点将数据分为两部分,对左右两部分递归进行快速排序。在实际应用中,选择哪种排序算法取决于数据的特性和算法的性能要求。
2024-09-28 11:19:54
662
原创 嵌入式面试——操作系统(gpt版本)
在嵌入式系统领域的面试中,关于操作系统的问题通常涉及操作系统的理论知识、实际应用以及与特定硬件平台的集成。
2024-09-17 14:14:51
1509
原创 嵌入式系统的面试——低功耗设计
此外,我会使用状态机和事件驱动逻辑来优化时钟门控的实现,并在设计完成后进行彻底的测试和验证,以确保时钟门控不会影响系统的性能和可靠性。回答: 为了减少无线通信中的功耗,我会采取多种策略,包括降低数据传输速率、使用省电模式、优化数据包结构、数据压缩、调度传输、使用高效的调制编码方案、动态功率控制以及设计合理的睡眠和唤醒策略。回答: 时钟门控是一种在微控制器中广泛使用的低功耗技术,它通过物理上阻断不需要的时钟信号来禁用特定模块的工作,从而减少这些模块的功耗。此外,它还可以降低模块的漏电流,进一步提高能效。
2024-09-17 14:13:52
2796
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人