
嵌入式开发
文章平均质量分 78
Linux在秋名山
一起学习嵌入式!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Wireshark 显示过滤实战技巧:快速锁定你要的包
《Wireshark显示过滤实用指南》摘要:本文介绍了Wireshark显示过滤器的核心用法,帮助用户从海量数据包中精准定位目标。关键技巧包括:1)端口/IP地址过滤(如udp.port==12345、ip.src==192.168.1.100);2)逻辑组合(AND/OR/NOT);3)协议筛选(http/dns等);4)右键快速生成表达式等实用功能。文章还提供了保存常用过滤器和自定义颜色高亮等进阶技巧,通过"协议.字段 运算符 值"的标准表达式格式,让网络流量分析更加高效直观。原创 2025-07-08 20:30:58 · 592 阅读 · 0 评论 -
深入理解 C++ 中的引用:左值引用与右值引用
本文介绍了C++的左值引用与右值引用原创 2025-06-27 22:09:52 · 284 阅读 · 0 评论 -
C++左值、右值你分清了吗
本文简明解析了C++中左值(Lvalue)与右值(Rvalue)的核心区别。左值是有名称、可获取地址的持久实体(如变量),右值则是临时生成、无法取地址的表达式结果(如计算值或函数返回值)。通过具体代码示例和对比表格,文章清晰展示了两者在身份、地址获取、生命周期等方面的关键差异。理解这一基础概念对C++编程、调试和优化至关重要,特别是掌握"是否有名""能否取地址""是否临时"三个判断标准,能够帮助开发者正确处理相关编译问题。原创 2025-06-15 19:21:35 · 228 阅读 · 0 评论 -
GTest进阶:使用Test Fixture、Mock与覆盖率构建可维护的单元测试
本文通过一个加法器案例,详细讲解了GTest的高级应用技巧。首先介绍了Test Fixture(测试夹具)的使用方法,通过继承::testing::Test来共享测试初始化和清理逻辑;其次演示了如何使用Mock模拟依赖对象的行为;最后指导了如何利用lcov工具生成代码覆盖率报告。文章通过具体代码示例,展示了如何测试加法器的正常和溢出场景,并分析了覆盖率未达100%的原因。这些方法可以帮助开发者编写更清晰、可维护的测试代码,并评估测试的完原创 2025-06-07 14:39:26 · 1004 阅读 · 0 评论 -
使用GTest进行单元测试的简明指南
本文介绍了如何使用Google Test(GTest)框架进行C++单元测试。通过一个简单的加法函数示例,展示了从零搭建测试环境的过程,包括项目结构、代码实现、测试编写和CMake配置。文章强调单元测试的重要性,它能早期发现bug、增强代码信心、提供文档和满足流程要求。示例项目包含头文件、实现文件和测试文件,使用CMake管理构建流程,演示了基本的EXPECT_EQ断言用法。最后指出单元测试的实际价值并提供了代码仓库地址,鼓励开发者将单元测试作为开发习惯。原创 2025-06-01 16:34:47 · 721 阅读 · 0 评论 -
为什么要学会Rebase,而不总是用Merge
摘要: 本文深入解析git rebase的核心机制,通过与git merge对比,揭示其"重写分支基础"的本质。当主分支更新时,rebase将特性分支的提交重新应用到最新主分支节点(如C→C'),形成线性历史,避免冗余合并节点。操作流程包括:创建分支→主分支更新→执行rebase→处理冲突。关键注意:rebase会改写提交历史,适合本地分支整理,但需谨慎用于已共享的远程分支。掌握该技巧可使Git历史更简洁清晰。(150字)原创 2025-05-24 21:09:13 · 745 阅读 · 0 评论 -
Git时间旅行:优雅地改写历史提交
本文介绍了如何在 Git 中优雅且安全地修改提交历史。首先,文章解释了 Git 历史的本质,强调每个提交都有唯一的哈希值,任何修改都会生成新的哈希。接着,文章详细讲解了在个人分支上修改历史的方法,包括使用 --amend 修改最近一次提交和通过 rebase 修改更早的提交。最后,文章提醒在多人协作中修改历史的风险,建议谨慎使用强制推送,并提出了三个问题以帮助判断是否适合修改历史。文章旨在帮助开发者更好地维护 Git 提交记录,同时避免在协作中引发问题。原创 2025-05-18 12:06:50 · 401 阅读 · 0 评论 -
Git Merge实战手册:分支合并的智慧
本文详细介绍了Git合并的原理、策略及冲突解决方法。合并的本质是寻找两个分支的共同祖先,通过差异对比生成新版本。常见的合并策略包括普通合并(Fast-Forward)、保留历史的合并(--no-ff)和压缩合并(Squash),分别适用于不同场景。合并冲突时,Git会标记冲突部分,开发者需手动解决并提交。文章还提供了合并前的预演、日志分析、更新本地分支等建议,帮助开发者避免常见问题,提升团队协作效率。掌握这些技巧,能有效应对合并中的各种挑战。原创 2025-05-10 15:50:59 · 322 阅读 · 0 评论 -
C++ 数据结构之std::vector介绍
std::vector是C++标准库中的动态数组,能够自动管理内存大小,适用于处理不确定数量的数据。其关键特性包括动态伸缩、快速访问和内存连续排列。核心操作包括创建与初始化、增删元素和随机访问。进阶操作涉及处理动态对象,如游戏中的敌人。性能优化建议包括预分配空间、选择正确的构造方式、高效删除技巧和利用现代C++特性。避坑指南提醒避免盲目使用[]操作符、在循环中反复扩容和忽视迭代器失效问题。std::vector是处理动态数组时的首选工具,合理使用可显著提升程序效率。原创 2025-05-02 22:27:48 · 238 阅读 · 0 评论 -
C++ UML 类图介绍
UML类图是面向对象分析与设计中的核心工具,用于描述系统的静态结构。它通过展示类、接口、属性、方法及其之间的关系,帮助开发者理解系统架构,减少沟通成本,并为系统实现提供可视化方案。类图的核心组成部分包括类(Class)和接口(Interface),类用矩形表示,分为类名、属性和方法三部分,接口则用带<<interface>>的矩形表示,仅包含方法声明。类之间的关系包括依赖(Dependency)、关联(Association)、聚合(Aggregation)、组合(Compositi原创 2025-04-03 21:40:37 · 1182 阅读 · 0 评论 -
在C语言中,可以用free释放NULL吗?
在C语言中,动态分配的内存需要通过free函数手动释放,以避免内存泄漏。当指针可能为空时,调用free(ptr)是否安全?根据C99标准,free函数在ptr为空指针时不执行任何操作,因此释放空指针是安全的,不会导致程序崩溃或未定义行为。这一特性简化了代码编写,并提高了程序的健壮性。在实际编程中,建议在释放指针后将其设置为NULL,以避免悬空指针问题。这一设计避免了额外的检查负担,确保了free(NULL)的安全性。原创 2025-03-14 21:46:47 · 432 阅读 · 0 评论 -
C++ 格式化输出浮点数
在性能分析或日志记录中,打印时间戳并比较其差异时,C++默认的浮点数输出格式可能导致时间戳显示不直观。默认情况下,C++会根据数值大小自动选择固定小数格式或科学计数法格式,当数值超出[1e-4, 1e6]范围时,会使用科学计数法。为了解决这一问题,可以使用std::fixed强制浮点数以固定小数格式输出,并结合std::setprecision控制小数点后的位数。通过这种方式,可以确保时间戳以固定小数格式输出,清晰展示具体的时间值。原创 2025-02-28 18:51:54 · 427 阅读 · 0 评论 -
Windows安装Ubuntu24.04双系统指南
本文详细介绍了在Windows电脑上安装Ubuntu 24.04双系统的步骤。首先,准备工作包括备份数据、下载Ubuntu ISO镜像、制作启动U盘,并通过磁盘管理为Ubuntu腾出至少50GB的空间。接着,系统设置部分指导用户关闭Windows的快速启动功能,并在BIOS中确保启动模式为UEFI、关闭安全启动、将SATA配置为AHCI模式。最后,安装Ubuntu的步骤包括从U盘启动、选择语言、键盘布局、网络连接、安装方式(选择与Windows共存)、创建用户、选择时区等。安装完成后,用户可以通过GRUB菜原创 2025-02-15 12:24:32 · 4594 阅读 · 1 评论 -
如何将tag推送到远程仓库
在多人协作的软件开发项目中,tag(标签)是Git中用于标记和管理版本的重要机制。通过为特定版本打上标签,可以方便集成人员拉取代码,提高版本的可追溯性。推送标签到远程仓库的操作包括:推送单个标签(git push origin <tag_name>)、推送多个标签(git push origin <tag_name_1> <tag_name_2>)、推送所有本地标签(git push origin --tags)以及删除远程标签(git push origin --del原创 2024-12-07 17:40:11 · 1006 阅读 · 0 评论 -
GDB调试进阶
在实际工作中,掌握这些高级功能可以大大提高开发和调试效率。如果你还没用过这些功能,不妨在下次调试中尝试一下~最后,欢迎大家关注我的公众号《嵌入式3分钟》,一起学习嵌入式~原创 2024-11-30 20:25:30 · 542 阅读 · 0 评论 -
SSH免密登陆的原理与应用
SSH免密登录通过非对称加密技术实现,使用公钥和私钥进行身份验证,提高了登录效率和安全性。其工作原理包括连接建立、公钥验证、挑战-响应和响应验证四个步骤。具体应用时,首先在客户端生成密钥对,然后将公钥配置到远程服务器的authorized_keys文件中,最后即可实现免密登录。为确保安全,需正确设置远程服务器上相关文件的权限。这种方法不仅减少了密码输入的麻烦,还降低了密码泄露的风险。原创 2024-10-15 08:43:02 · 900 阅读 · 0 评论 -
GDB基本使用指南
GDB(GNU Debugger)是一个强大的调试工具,主要用于调试 C、C++ 和其他语言编写的程序。它让我们可以监控、控制程序的执行,从而查找并修复错误。原创 2024-10-15 08:41:47 · 527 阅读 · 0 评论 -
Float类型的有效位数有几位
C语言中的Float类型是单精度浮点数,占用4个字节(32位),按照IEEE 754标准存储。Float类型的有效位数是7位,这意味着它可以精确表示7位十进制数。当数值超过16777216时,Float类型无法精确表示所有整数,导致精度丢失。例如,Float可以表示16777218,但无法表示16777217,因为后者的有效位数超过了24位二进制的限制。通过理解有效位数和科学计数法,可以更好地掌握Float类型的精度和表示范围。原创 2024-09-16 11:27:21 · 2561 阅读 · 0 评论 -
Linux 如何将pwd的结果同步复制到剪贴板
pwd命令用于显示当前路径,但通常我们还需要复制路径,操作繁琐。通过结合xclip工具,可以实现显示路径的同时将其复制到剪贴板。具体步骤为:安装xclip,使用echo -n $(pwd) | xclip -selection clipboard && pwd命令,既显示路径又复制路径。为简化操作,可以将该命令设置为别名cpwd,并添加到.bashrc或.zshrc中。此外,通过X11转发功能,cpwd命令也可在远程登录时使用,方便复制远程路径。这一方法显著提升了路径复制的效率,适用于本地和原创 2024-09-07 10:40:46 · 1149 阅读 · 0 评论 -
Linux 如何存储Core dump文件
在Linux开发中,程序崩溃如Segmentation fault是常见问题,尤其在问题不易复现或处于生产环境时,直接使用gdb调试效率较低。此时,core dump文件的重要性凸显,它是程序崩溃时自动生成的内存快照,包含寄存器状态、调用栈等信息,可用于分析崩溃原因。默认情况下,Linux可能不会生成core dump文件,需通过ulimit -c unlimited解除大小限制,并配置/proc/sys/kernel/core_pattern指定存储路径。通过编写故意崩溃的C程序,可验证core dump原创 2024-08-31 14:45:47 · 793 阅读 · 0 评论 -
C语言 分析声明的方法
本文详细解析了C语言中声明的组成和解析方法。声明由声明说明符和声明符组成,声明说明符描述数据项的性质,声明符描述数据项的名字和额外特点。通过两条规则——由内而外和遇事不决找括号,可以解析复杂声明符。文章通过多个实例,如指针数组、函数指针等,逐步展示了如何应用这些规则来理解复杂的C语言声明。最终,文章帮助读者更好地掌握C语言中的声明解析技巧,提升代码阅读和编写能力。原创 2024-08-23 22:28:07 · 1070 阅读 · 0 评论 -
C语言 Windows下使用gcc制作静态库与动态库
前言将函数封装成库不仅有利于代码的复用, 还可以在不公开源码的情况下给他人使用函数的功能。本文记录了Windows下使用gcc制作静态库的过程。一、测试代码编写测试函数为一个加法函数,它将被制作成静态库,并被函数main()调用。各个文件如下所示,它们被放在同一个目录下。add.hint add(int a, int b);add.c#include "add.h"int add(int a, int b){ return a + b;}main.c#in.原创 2021-03-30 19:21:31 · 5696 阅读 · 3 评论 -
嵌入式系统概述
嵌入式系统是一种专为执行特定任务而设计的计算机系统,广泛应用于家用电器、汽车、医疗设备等领域。其特点包括专用性、实时性、资源受限、稳定性和低功耗。嵌入式系统结构分为软件层和硬件层,软件层包括应用层、中间件、操作系统层、HAL层和BSP,硬件层则包括处理器、内存、输入输出接口等。随着物联网、智能家居和汽车电子系统的发展,嵌入式系统的需求不断增加。从事嵌入式软件开发需要掌握编程语言、操作系统、驱动程序开发及调试测试等技能。嵌入式系统在现代科技中扮演着重要角色,具有广阔的发展前景。原创 2024-08-16 23:21:42 · 1494 阅读 · 0 评论 -
嵌入式开发——程序跑飞原因总结
前言在嵌入式软件开发中,程序跑飞是一个比较棘手的问题。为什么说棘手,那是因为当程序跑飞时,往往没有任何错误信息报出来,Log停止的地方通常也不是出现问题的地方,因此这让我们很难定位问题。基于以上原因,我将嵌入式开发中一些常见的程序跑飞原因以及相关解决方案记录在这篇博客下。程序跑飞的原因与相关解决方案1. 栈溢出说明:这可能是最常见的问题了,往往是因为我们定义了较大的局部变量,使得栈空间不够了。解决方案:使用static关键字或者将局部变量定义为全局变量。2. 访问了不该访问的内存说明:这.原创 2021-03-09 20:23:17 · 9989 阅读 · 0 评论