自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C语言】详解C语言字节打包:运算符优先级、按位或与字节序那些坑

本文详解C语言字节打包中的常见问题,重点分析运算符优先级和按位或操作的正确使用。通过实例代码展示新手常见错误:加法运算符优先级高于移位运算导致逻辑错误,以及使用加法替代按位或的潜在风险。文章提出最佳实践方案:使用括号确保运算顺序,优先采用按位或进行字节拼接,并讨论字节序对代码移植性的影响。最终给出修正后的大端序实现代码,总结出5个核心要点,帮助开发者编写更健壮、可移植的字节处理代码。

2026-01-17 19:14:32 628

原创 【Git】Git临时回退查看版本?这3种安全方式必收藏

摘要: 本文介绍3种安全查看Git历史版本的方法,避免影响当前开发分支: git checkout:进入分离头指针状态,临时查看指定提交(git checkout <提交ID>),查看后切回原分支即可。 git switch --detach(Git 2.23+推荐):功能与checkout相同,但语义更清晰。 git worktree:创建独立目录并行查看多版本(git worktree add <路径> <提交ID>),适合对比代码场景。 避坑提示:避免使用git r

2025-12-12 09:47:16 944

原创 【RTT】网页版本RTT LOG

【RTT】网页版本RTT LOG 使用DAPLink。

2025-10-28 15:56:08 122

原创 理解电力系统中的有功功率与视在功率及其计算方法

本文介绍了电力系统中的有功功率和视在功率概念及其计算方法。有功功率(P)反映电路实际消耗的功率,计算为电压电流瞬时值乘积的平均值;视在功率(S)是电压电流有效值的乘积,表示电路总容量。功率因数(PF)为P/S,衡量电能利用效率。文章详细推导了有效值、有功功率的计算公式,并提供了C语言示例代码。理解这些概念对电力系统设计与能效优化至关重要。

2025-09-22 11:03:08 1632

原创 【C语言】环形缓冲区ringbuffer

环形缓冲区

2025-08-07 20:48:59 326

原创 【698协议】bit-string 数据类型

bit string

2025-08-06 10:02:26 314

原创 使用 Wireshark 抓取类似的 HTTP 请求包

使用 Wireshark 抓取类似的 HTTP 请求包

2024-10-04 20:23:15 2511 1

原创 windows+vscode+arm-gcc+openocd+daplink开发arm单片机程序

windows+vscode+arm-gcc+openocd+daplink开发arm单片机程序,脱离keil。目前发现的最佳解决方案是,使用vscode+embedded ide插件。

2024-09-28 13:33:06 1033

原创 【698协议】帧校验算法

【698协议】帧校验算法

2024-05-26 16:44:02 927

原创 【python】串口双向透传python小程序

串口双向透传python小程序。

2024-05-24 00:12:55 296

原创 【数据处理】中位数绝对偏差,排除异常值,少数服从多数

MAD数据处理,排除异常值,少数服从多数,c语言实现

2024-03-19 00:21:48 3162

原创 【JavaScript】MQTTX-脚本-自定义函数-payload json格式化

【代码】【JavaScript】MQTTX-脚本-自定义函数-payload json格式化。

2023-10-25 10:05:19 713

原创 【JavaScript】MQTTX-脚本-自定义函数-payload过滤

【代码】【JavaScript】MQTTX-脚本-自定义函数-payload过滤。

2023-10-25 09:59:42 923

原创 【c/c++】c和cpp混合编译

在这段代码中,#ifdef __cplusplus 和 #endif 之间的代码是为了在 C++ 中使用 C 语言的函数声明和定义时,确保编译器正确地处理 C 和 C++ 之间的语法差异。这是因为 C 和 C++ 有一些不同之处,包括函数名的重载、类型转换等。在这段代码中,extern “C” 是一个 C++ 的特性,它告诉编译器要按照 C 的方式来处理其中的函数。:这个条件编译指令检查是否正在编译 C++ 代码。__cplusplus 是一个宏,当编译器编译 C++ 代码时,它会被定义。

2023-09-01 18:58:41 3740 1

原创 【windows】查看和开放特定的端口

按下 Win + R 键,然后输入 “control” 并按下 Enter 键,打开控制面板。在控制面板中,选择 “系统和安全”,然后选择 “Windows Defender 防火墙”。在右侧窗口中,点击 “入站规则”,然后在右侧面板点击 “新建规则…可以选择 “公共”、“专用” 或 “域”,具体根据你的网络设置选择。选择 “特定本地端口”,然后输入要打开的端口号(例如,1883)。在向导中选择 “端口” 选项,然后点击 “下一步”。选择 “允许连接”,然后点击 “下一步”。检查配置,然后点击 “完成”。

2023-08-28 14:05:23 70764

原创 【c语言】snprintf和strncpy

snprintf是C语言中用于格式化字符串输出的函数,用于将格式化的数据写入一个字符串缓冲区。与printf不同,snprintf允许您指定输出的最大长度,以避免缓冲区溢出。如果传递给snprintf的第二个参数小于等于输出的字符数(包括结尾的null字符\0),snprintf会确保输出的内容不会超出指定的长度,并在缓冲区的末尾添加一个null字符来终止字符串。这样可以防止缓冲区溢出,并确保输出的字符串始终是以null字符结尾的合法字符串。

2023-08-14 18:27:51 1263

原创 【设计模式】 策略模式

(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,使它们可以相互替换,让客户端代码和算法的具体实现解耦。这样,客户端可以根据不同的需求选择不同的算法,而无需修改原有的代码。

2023-07-30 12:24:43 893

原创 【设计模式】简单工厂模式

工厂模式是一种灵活且可扩展的设计模式,它通过封装对象的创建过程,帮助我们降低代码的耦合度,并支持系统的扩展和维护。然而,工厂模式也有一些局限性,例如增加了类的数量和抽象性,可能会增加代码的复杂性和理解难度。:如果需要添加新类型的产品(图形),只需要添加一个新的产品类和对应的工厂方法即可,不需要修改现有代码,符合开闭原则。:客户端只需与抽象产品和抽象工厂进行交互,不关心具体的产品类和工厂类,隐藏了产品对象的具体实现。:每个具体产品都需要一个对应的具体工厂类,如果产品较多,会增加类的数量,增加系统复杂性。

2023-07-30 10:37:17 1157

原创 【JavaScript】 var let const 的区别

推荐使用let和const来声明变量,因为它们提供了更严格的作用域规则和更安全的变量声明方式。只有在特定情况下需要在整个函数内部使用变量时,才应该使用var。let声明的变量具有块级作用域,意味着在{}内声明的变量只在该块内部可见,在外部不可访问。let是在ES6(ECMAScript 2015)中引入的声明变量的关键字。let声明的变量可以被重新赋值,但不可以重新声明。

2023-07-25 22:40:05 324

转载 Windows 启用 SSH 作为远程主机

安装后,可从使用 PowerShell 安装了 OpenSSH 客户端的 Windows 10 或 Windows Server 2019 设备连接到 OpenSSH 服务器,如下所示。扫描列表,查看是否已安装 OpenSSH。设置完成后,回到“应用”>“应用和功能”和“可选功能”,你应会看到已列出 OpenSSH。选择“是”后,该服务器会添加到包含 Windows 客户端上的已知 SSH 主机的列表中。系统此时会提示你输入密码。打开“设置”,选择“应用”>“应用和功能”,然后选择“可选功能”。

2023-07-24 20:29:13 502

原创 freeRTOS-------任务间同步

在嵌入式系统或RTOS中,任务间的同步是一个常见且重要的需求。二值信号量提供了一种简单而有效的方式来实现这种同步。通过使用xSemaphoreTake()和xSemaphoreGive()函数,我们可以方便地实现任务的阻塞和唤醒,保证任务按照我们预期的顺序执行,从而避免潜在的竞态条件和逻辑错误。务必在使用信号量时小心避免死锁和其他同步问题,合理规划任务的优先级和同步机制,确保系统稳定可靠地运行。

2023-07-20 23:40:58 1326

原创 虚拟机防火墙怎么开放emqx网页18083端口给主机

现在,您的虚拟机防火墙应该已经开放了EMQX网页18083端口,使得主机可以访问。请确保主机和虚拟机在相同的网络中,并且您在主机上使用虚拟机的IP地址来访问EMQX网页。如果您使用的是其他防火墙管理工具(例如iptables),则需要相应地使用适当的命令来开放端口。如果防火墙状态为"not running",表示防火墙已禁用,您无需进行额外设置。如果默认区域与"public"不同,请在下面的命令中将其替换为正确的区域名称。这将在默认区域中添加一个永久的端口规则,允许通过TCP协议访问18083端口。

2023-06-15 21:21:40 2473

原创 查看centos防火墙

请注意,上述命令中的firewalld是CentOS 7及更高版本中默认的防火墙管理器。如果您使用的是CentOS 6或更早的版本,则可能使用iptables来管理防火墙。在这种情况下,您可以使用相应的iptables命令来查看和管理防火墙规则。如果您想修改防火墙设置,建议在更改之前备份防火墙配置,并确保您了解所做更改的影响。这将显示防火墙的当前状态(是否正在运行)以及其他相关信息。这将显示防火墙中活动区域的列表以及每个区域的接口。这将列出防火墙中已打开的端口列表。这将列出防火墙中已定义的服务列表。

2023-06-15 21:16:10 9788

原创 ESP 32 分区表

ESP32分区表

2023-05-27 21:19:56 241

原创 windows 10安装wsl2

启用虚拟化功能:WSL2需要启用虚拟化功能,可以在BIOS中开启虚拟化技术,并在“控制面板”-“程序”-“启用或关闭Windows功能”中勾选“虚拟机平台”和“Windows子系统Linux”。重启电脑。安装WSL2组件:在“Microsoft Store”中搜索“Ubuntu”或其他Linux发行版,选择安装并启动,会自动下载WSL2组件。如果想要将ubuntu安装到其他盘,如将Ubuntu 20.04 安装在 D:\wsla. 进入D:\wsl ,运行下面的命令下载ubuntu20.04。

2023-05-26 19:54:29 1912

原创 Ubuntu 上更换软件源的详细步骤

ubuntu 换源

2023-05-26 18:57:14 10081 1

原创 ubuntu修改环境变量的几种方法

ubuntu修改环境变量的几种方法

2023-05-25 22:04:29 6121 1

原创 C语言-------i++和++i的区别

i++和++i的区别

2023-04-30 19:33:16 3274 1

原创 替换字符串中出现的某段字符串的C语言和C++实现方式

字符串替换

2023-04-28 22:56:10 828

原创 C语言-------Linux下检测某个文件是否存在

linux下检测某个文件是否存在

2023-03-27 18:21:17 3221

原创 C语言-------宏#define

预处理时发生的宏展开。

2022-11-11 19:33:24 397

原创 Gitlab CI/CD

推荐的 关于gitlab CI/CD 搭建的教程。

2022-11-09 00:19:55 190

原创 C语言-------简单代码风格.clang-format配置文件

【代码】C语言-------简单代码风格.clang-format配置文件。

2022-10-21 13:55:16 952

翻译 clang-tidy

clang-tidy 使用

2022-10-16 15:53:02 5583

原创 如何查找linux指令或者资料的说明

如何查找linux指令或者资料的说明

2022-09-17 10:44:50 439

原创 vim 文本替换

常规替换正则匹配替换正则:

2022-06-19 01:40:40 698

原创 linux环境下查看日志文件的一些操作

linux日志查看技巧

2022-06-16 21:47:44 374

原创 linux交叉编译依赖包

linux交叉编译依赖包

2022-06-16 19:57:44 470

原创 C语言-------数组越界的问题

问题:定义一个数组array[5],那么数组包含了array[0],array[1],array[2],array[3],array[4],那array[5],array[6]…会是什么呢?很多书里面都会说array[5]会出现下标越界的错误,没错这确实是越界了,但实际上编译器并不会给你报错。下面来看一段代码#include <stdio.h>void showArray(int *array, int arrayLenth){ for (int i = 0; i < ar

2022-03-08 00:47:59 1321 1

原创 简单java类----Time类

class Time { private int hour; private int minute; private int second; private static int count = 0; public Time() { this(0, 0, 0); } public Time(int hour, int minute, int second){ this.hour = hour; this.minute = minute; this.second = secon

2022-02-27 21:02:21 1627

空空如也

空空如也

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

TA关注的人

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