原创 智能驾驶相关知识
本文从车辆坐标系出发,分析了车道保持辅助系统(LKA)中的关键参数。横向偏移反映车辆与车道线的距离,航向角偏移体现理想航向角,曲率表征道路弯曲程度,曲率变化率预示弯道变化趋势。通过车辆运动学建模,推导了横向误差与航向偏差的计算方法,当转弯半径足够大时可简化处理。研究为车道保持控制提供了理论基础,重点解决了"离车道线多远"和"如何保持正确航向"两个核心问题。
2025-11-17 14:28:25
368
原创 C++ 常用STL详解
本文摘要: C++ STL中的关联容器map与unordered_map对比分析: map特性: 基于红黑树实现,保持元素有序(默认升序) 键值唯一,查找/插入/删除时间复杂度O(logn) 支持自定义比较器,默认std::less 提供insert/emplace/operator[]等多种插入方式 迭代器稳定,删除操作需注意失效问题 unordered_map特性: 基于哈希表实现,元素无序存储 平均查找时间复杂度O(1),最坏情况O(n) 依赖哈希函数,可能存在哈希冲突 插入操作可能导致所有迭代器失效
2025-11-11 16:48:41
750
原创 C++三大特性:封装、继承、多态
本文系统介绍了面向对象编程的三大特性:封装、继承和多态。封装通过数据隐藏和接口暴露实现安全性和模块化;继承支持代码复用和层次结构建立;多态包括编译时多态(函数/运算符重载、模板)和运行时多态(虚函数),实现了接口统一和动态绑定。重点阐述了访问控制权限(private/protected/public)的作用范围,以及虚函数在实现多态时的关键作用,特别是虚析构函数的必要性。文章通过丰富代码示例展示了这些核心概念的具体应用场景和实现方式。
2025-10-31 00:00:05
569
原创 数组与指针
摘要:文章分析了数组与指针的核心区别:数组是连续内存块的别名,在编译时确定大小;指针是存储地址的变量,可动态分配内存。通过代码示例展示数组名a代表首元素地址(&a[0]),而&a则指向整个数组,二者地址相同但类型不同。a+1移动一个元素大小,&a+1则移动整个数组大小。结果验证了数组名在多数情况下会退化为指针,但二者在类型和操作上存在本质差异。(149字)
2025-10-30 09:15:12
214
原创 编译时检查vs运行时检查
尽可能在编译时发现问题(使用强类型、static_assert 等)对不可避免的运行时错误进行适当处理(异常处理、错误码等)使用工具如 ASan、UBSan 等来检测未定义行为。
2025-10-26 10:54:14
303
原创 深拷贝vs浅拷贝,引用传递vs值传递vs指针传递
本文探讨了C++中的对象拷贝机制,重点对比了浅拷贝和深拷贝的区别。浅拷贝只复制指针值,可能导致双重释放错误;深拷贝则复制指针指向的数据,更为安全。示例代码展示了值传递会触发拷贝构造函数(可能是浅拷贝或深拷贝),而引用传递则不会创建新对象。此外,文章还演示了错误的浅拷贝实现如何导致内存问题,以及正确的深拷贝实现如何避免这些问题。最后,通过引用传递的示例展示了高效安全的参数传递方式。
2025-10-24 11:05:38
160
原创 C++的四种强制类型转换(解释+代码说明)
本文介绍了C++中的四种类型转换操作符: const_cast:用于添加或移除const/volatile限定符,但修改原始常量会导致未定义行为。 static_cast:最常用的类型转换,支持相关类型间的安全转换(如数值转换、向上转型),但向下转型存在风险。 dynamic_cast:用于多态类型的安全向下转型,在运行时检查类型,失败时返回空指针或抛出异常。 reinterpret_cast:最危险的转换,用于不相关类型间的低级重新解释(如指针与整数转换),可能导致未定义行为。 每种转换都有特定用途和风险
2025-10-24 09:42:01
166
原创 C语言编程需要掌握的知识点和能力
C语言核心知识点摘要: 关键字:C90有32个关键字(如int、if等),C99新增5个(如inline、_Bool)。volatile确保变量直接从内存读取,常用于硬件寄存器、多线程共享变量。 内存机制:RAM分为栈(局部变量)、堆(动态分配)、全局/静态区、常量区。指针用于间接访问内存,const保护变量不被修改。 数据结构:结构体与共用体可嵌套,位结构体节省内存(如定义硬件寄存器)。 函数与编译:回调函数通过函数指针实现;预处理展开宏和头文件;typedef增强代码可移植性。 注意事项:数组与指针关系
2025-10-14 22:07:58
549
原创 详解最小二乘法:数学推理+举例说明
摘要:本文介绍了最小二乘法的基本原理,该方法通过最小化误差平方和来拟合数据曲线。以三次多项式曲线拟合为例,推导了求解参数的过程:构建关于多项式系数的二次凸函数,通过对各参数求偏导并令其为零,得到线性方程组。解此方程组即可获得最优拟合参数,使曲线与给定数据点的整体误差最小。该方法对异常值敏感,但数学处理简便,适用于多种曲线拟合场景。
2025-09-19 16:57:09
393
原创 单元测试工具 GTest 介绍+快速入门
本文介绍了GTest框架在C项目中的集成与应用方法,主要内容包括:1. GTest基础:详细讲解了测试用例定义、断言机制、测试固件和打桩方法,对比了GTest与Ceedling的特性差异;2. 项目结构设计:提出测试代码与产品代码隔离的镜像目录原则,展示标准的CMake项目结构;3. 构建配置:通过CMake实现自动化测试构建,包含GTest集成、测试可执行文件生成和覆盖率检测;4. 完整示例:提供从代码实现、测试编写到构建运行的完整流程,重点演示了C函数的打桩测试方法。文章强调通过合理的目录结构和自动化构
2025-09-19 15:44:15
939
原创 MCU与SoC
在汽车电子领域,汽车电子架构从分布式→域控→中央计算,要求一颗芯片既跑 Linux 又保证 us 级实时控制,常见方法有AUTOSAR 与 Linux 的混合架构:SoC 跑 Linux 负责 AI/HMI,MCU 跑 AUTOSAR CP,两者通过 PCIe-virtio 共享内存。除 CPU 外,还集成 GPU、NPU、基带、内存控制器、视频编解码、高速接口等,可直接跑 Android/Linux。典型代表:高通骁龙 8 Gen3、苹果 M2、树莓派 BCM2711。三、快速区分MCU和SOC。
2025-09-03 15:11:46
228
原创 ASPICE学习笔记
ASPICE是汽车行业软件开发流程的国际标准,源自ISO/IEC15504,2023年已迭代至4.0版本。它包含32个标准化过程,采用0-5级能力评估模型,主流要求达到Level2/3。该标准与ISO26262功能安全、ISO/SAE21434网络安全标准互补,能提升软件质量但实施成本较高,需平衡传统与敏捷开发模式。核心价值在于确保开发过程可追溯,满足OEM准入门槛,但面临体系建立成本高、评估周期长等挑战。
2025-09-03 14:38:54
663
原创 C语言单元测试工具Ceedling介绍+快速入门
摘要:Ceedling是一个基于Ruby的C语言单元测试框架,集成了常用工具链。安装需先配置Ruby环境和GCC编译器,通过gem安装。使用步骤包括:创建项目目录并初始化,生成src和test文件夹;测试文件遵循test_前缀命名规则,需包含Unity测试框架头文件;使用CMock处理外部依赖,通过IgnoreAndReturn(忽略输入)或ExpectAndReturn(精确匹配)模拟函数行为。示例演示了测试add和mul函数,其中mul测试通过mock隔离了add函数依赖。最后用ceedling tes
2025-09-02 16:36:27
1011
原创 ros2学习笔记:如何使用conda环境运行功能包
按照官网的教程安装ros2,官方安装流程使用的是 Ubuntu 系统默认的 Python 环境,所有 ROS2 的 Python 依赖(如rclpy)都通过apt安装在系统路径中(例如当你运行时,它会默认使用系统 Python。因此无法访问 Conda 虚拟环境中的包。但当我们编写程序时,我们需要依赖各种第三方库。
2025-06-10 16:41:43
1626
4
原创 ros2学习笔记-错误修正:miniconda与python3冲突
错误发生在学习ros2文档Client libraries,Writting a simple publisher and subscriber(C++)-4.build and run时。覆盖了系统 Python 路径,导致 ROS2 使用了 Conda 的 Python(缺少 ROS 相关依赖),而非系统 Python。打开.bashrc文件,在conda环境变量后,ros2环境变量前,增加。该错误发生在 ROS2 构建系统尝试解析。
2025-06-06 12:09:58
488
原创 大模型入坑指南一:本地部署大模型
在方法一中,我们使用ollama下载大模型到本地,这样的好处是该模型可以免费使用,只要配置够高,你可以下载满血版的deepseek大模型。与法一相比,该方法使用大模型需要消耗token数(也就是需要付费),但可以使用满血版的deepseek,功能更强大,而且现在注册可以免费赠送2000万token,可以使用一段时间了,而且该平台也包含免费的蒸馏版本的大模型,包括在法一中下载的deepseek-r1:1.5b等。3.点击左侧栏的第一个按钮回到对话框,在红框位置可以选择下载好的大模型,然后就可以进行聊天了。
2025-03-19 20:11:28
1789
原创 Windows 11系统基于VScode、CMake搭建C/C++编译环境
Windows 11系统基于VScode、CMake搭建C/C++编译环境
2025-01-10 15:08:27
587
原创 Linux安装Tenginx
若未报错,说明运行成功,此时可以使用windows浏览器查看虚拟机ip,出现以下页面。若Active:active (running),显示为开启,需要关闭它。步骤四:进入tengine文件夹,配置编译文件configure。步骤二:进入 /opt目录,下载Tenginx安装包。linux ip地址可以用 ip addr命令查询。步骤七:进入nginx所在文件夹。步骤六:编译源代码并安装软件包。步骤九:运行nginx程序。步骤五:创建所需文件夹。步骤一:安装前置环境。步骤三:解压缩安装包。
2024-07-31 19:23:12
355
原创 MySQL开启远程连接
步骤四:输入命令,将用户名为root的host从localhost更改为%更改成功,远程访问功能已开启。若还是无法远程连接,关闭防火墙重试。步骤一:打开mysql命令端,输入密码:进入以下页面。步骤六:输入步骤三命令,再次查看sql用户信息。步骤五:输入命令,刷新信息。
2024-07-30 19:42:45
324
原创 Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
提示:这意味着 OpenMP 运行时的多个副本已链接到程序中。最好的办法是确保只有单个 OpenMP 运行时链接到进程中,例如,避免在任何库中静态链接 OpenMP 运行时。还有一种不安全、不受支持、未记录的解决方法,您可以将环境变量 KMP_DUPLICATE_LIB_OK=TRUE 设置为允许程序继续执行,但这可能会导致崩溃或以静默方式产生不正确的结果。libiomp5md.dll文件包含了用于支持OpenMP并行编程的函数和工具,可以在程序运行时加载并使用这些函数和工具。
2024-01-16 11:01:20
900
1
原创 Matlab2023b 将多次仿真结果放入一个波形图中进行对比
这篇文章介绍了使用Simulink进行系统仿真和结果对比的完整流程:首先修改仿真设置,取消单一输出选项;接着在K1=1/5/10三种参数下进行仿真,通过示波器记录数据并分别保存为不同变量;最后编写Matlab脚本绘制三条不同参数的仿真曲线对比图,包含坐标标注和图例设置。整个过程详细说明了从仿真设置、数据记录到结果可视化的操作步骤。
2023-11-29 12:24:09
6318
1
原创 将多个txt文件合并成一个
首先将需要合并的txt文本文档放在同一个文件夹中,倘若合并有顺序要求,请将txt文本文档进行重命名,使文档按照顺序排列。接着对文件夹进行重命名,尽量将文件名设置为英文或拼音格式,方便命令输入。文件夹重命名完成后,将文件夹移动至磁盘的根目录中,方便命令输入。在命令提示符窗口中输入命令“type *.txt >>D:\merge.txt”,按Enter键开始合并txt文本文档。“D:\”表示将合并后的文件输出到D盘。“merge.txt”表示将合并后的文本文档重命名为“merge.txt”
2023-11-22 15:47:20
797
RSS订阅