- 博客(496)
- 资源 (4)
- 收藏
- 关注
原创 openssl中的SM3
SM3是中国国家密码算法标准之一,属于国密算法(SM系列)中的哈希算法。它的全称是“国家商用密码算法 SM3”,主要用于数字签名、信息认证、数据完整性校验等领域。SM3 被广泛应用于中国国内的金融、电力、通信等行业,以确保数据的安全性与完整性。SM3 是中国国家密码算法中的重要一员,主要用于保证数据完整性和安全性。作为一种高效的加密哈希函数,它在数字签名、数据校验、密码协议等多个领域中得到了广泛应用。通过其独特的设计和强大的安全性,SM3 在国内外的安全通信和数据保护中起到了重要作用。
2024-12-08 19:01:22 389
原创 Modbus功能码详细讲解
用户自定义功能码是指设备制造商或系统集成商为满足特定需求而定义的功能码。Modbus 协议本身允许用户扩展功能码,使用特定范围的功能码来实现自定义操作。这些功能码的范围通常在 0x80 到 0xFF 之间,因此它们被分配给特定的厂商或应用。功能:用户可以根据实际应用场景定义新的功能码,进行特殊的数据操作或控制功能。比如,某些设备可能需要一个特殊的读取或写入命令来进行设备配置或状态查询。格式:自定义功能码通常遵循与标准功能码相似的格式,但其具体的操作内容和响应格式由用户或厂商决定。公共功能码。
2024-12-01 20:12:09 758
原创 Modbus概述
Modbus 概述Modbus是一种用于电子设备之间通信的开放式协议,最初由 Modicon(现为施耐德电气)在 1979 年为其可编程逻辑控制器(PLC)开发。它广泛用于工业自动化系统中,尤其是用于控制和监视设备之间的数据交换。Modbus 协议具有简洁、高效、易于实现的特点,是工业控制领域中最常用的通信协议之一。Modbus 的主要特点:Modbus 是开放的,意味着任何设备和系统都可以实现 Modbus 协议,制造商不受限制,设备之间可以互联互通。
2024-12-01 17:31:10 843
原创 openssl使用哈希算法生成随机密钥
OpenSSL 提供了一套功能强大的随机数生成函数,用于生成高质量的伪随机数。OpenSSL 的随机数生成函数设计灵活,满足了从简单随机需求到高安全性应用的各种场景。OpenSSL 的随机数生成器依赖熵池,通常会自动初始化,但可以通过这些函数手动添加种子数据。OpenSSL 的随机数生成器使用熵池作为随机性的来源,依赖于系统提供的随机性(如。这里可以看到每次运行后生成的密钥都是不一样的,这样就保证了密钥的不一致性。:为随机数生成器添加种子值或熵,增强其随机性。:生成高质量的加密级别伪随机字节。
2024-11-30 16:54:56 1249
原创 openssl哈希算法
什么是哈希算法?哈希算法(Hash Algorithm)是一类特殊的数学函数,用于将任意长度的输入数据映射为固定长度的输出数据,这个输出通常称为哈希值消息摘要或指纹。哈希算法的主要特性固定长度输出无论输入数据的长度是多少,哈希算法都能产生长度固定的哈希值(例如,SHA-256 的输出始终是 256 位)。不可逆性根据哈希值,无法还原出原始输入数据。雪崩效应输入的微小变化(如改变一个字母)会导致输出的哈希值发生巨大变化。抗碰撞性。
2024-11-30 11:03:23 1179
原创 设计自己的网络通信协议
设计网络通信协议是为了建立一个标准化、可靠、安全的通信基础,使不同设备、系统和应用能够高效地协作和互通。通信协议是现代网络运行的核心,没有协议,全球互联网和数字通信将无法实现。#include // 用于字节序转换// 定义协议结构体// 消息头// 数据类型// 数据长度// CRC 校验值// 数据主体(可变长度)} Packet;结构体封装了协议的核心字段。序列化与反序列化函数保证了数据可以在网络上传输和接收。CRC 校验函数增强了数据的完整性校验。
2024-11-24 20:30:09 1022
原创 编程中的字节序问题
字节序(Endianness)是指计算机以二进制格式存储和处理多字节数据时,字节的排列顺序。它主要决定了在存储和传输过程中,数据的高字节和低字节如何被排列。字节序是计算机体系结构中非常重要的一个概念,特别是在涉及不同设备或系统之间的数据交互时。
2024-11-24 20:16:56 938
原创 QT基础教程(QT网络编程)
Qt 提供了丰富的网络编程支持,通过 Qt Network 模块可以方便地实现网络通信。这个模块提供了用于处理网络协议、创建网络应用程序和进行网络操作的类。Qt 的网络编程框架主要包括以下几个关键类:QNetworkAccessManager:用于处理网络请求和响应。QNetworkReply:表示一个网络请求的响应。QNetworkRequest:表示一个网络请求。QTcpSocket 和 QTcpServer:用于 TCP 连接和服务器。QUdpSocket:用于 UDP 连接。
2024-11-23 15:29:03 562
原创 WireShark TCP三次握手和四次挥手分析
TCP三次握手是建立TCP连接的过程,确保通信双方准备好进行数据传输。这个过程包括三个步骤:SYN(同步):SYN-ACK(同步-确认):ACK(确认):完成以上三步后,客户端和服务器之间的TCP连接就建立成功,双方可以开始数据传输。下面让我们来使用WireShark进行抓包分析下:打开流量图:通过流量图的方式可以清晰的看出TCP三次握手的过程:点击对应的信号也可以看到详细的信息:TCP四次挥手是关闭TCP连接的过程,它确保双方正确地终止数据传输。这个过程分为以下四个步骤:FIN(终止):ACK(确认
2024-11-23 15:24:53 821
原创 cJson移植使用
cJSON是一个轻量级、开源的 C 语言库,用于解析、生成、操作和打印 JSON 数据。它被设计为简单、易用和高效,适合嵌入式系统和内存受限的环境。
2024-11-17 10:11:43 129
原创 CRC校验
CRC校验(Cyclic Redundancy Check,循环冗余校验)是一种错误检测机制,常用于数字网络和存储设备中,以确保数据在传输或存储过程中未被意外篡改。CRC校验的基本原理生成多项式:CRC校验依赖于一个生成多项式(如 ( x^3 + x + 1 ) 对应二进制形式为1011二进制计算将数据按位处理,将其视为一个长的二进制数。用生成多项式对数据执行二进制除法(不带进位的异或操作)。商被丢弃,余数即为校验码。校验码附加在传输前,将计算出的校验码附加到数据后面。接收端验证。
2024-11-15 20:50:53 90
原创 单片机中的BootLoader(重要的概念讲解)
链接地址:代码和数据的存储地址,通常在 Flash 中。执行地址:代码和数据在运行时的地址,通常在 Flash(对于代码)或 RAM(对于数据)中。差异:在一些性能要求较高的情况下,数据段的链接地址和执行地址不同,以便在 Flash 中加载代码,而在 RAM 中高效执行。相对跳转:根据当前指令的偏移跳转,通常用于条件分支或循环结构,指令如B。绝对跳转:直接跳转到特定的固定地址,适合跳转到指定位置,指令如BX。BX:跳转到寄存器地址,常用于函数返回。BL:跳转并保存返回地址,用于函数调用。
2024-11-10 16:28:17 1324
原创 openssl对称加密代码讲解实战
OpenSSL 中通常结合对称加密和非对称加密,以实现性能与安全性兼备的加密方案。例如,在 SSL/TLS 协议中,服务器会先使用非对称加密交换密钥,然后使用对称加密传输数据。下面是使用 OpenSSL 实现对称加密的示例代码,采用 AES-256-CBC 算法对数据进行加密。此代码会生成一个随机的初始向量(IV),并且使用固定的密钥对数据加密。OpenSSL 是一个广泛使用的加密库,提供了丰富的对称加密和非对称加密算法。:密钥和初始向量(IV)应安全存储,并且应仅与需要解密的接收方共享。
2024-11-09 20:44:49 1333
原创 openssl加密算法简介
OpenSSL 是一个广泛使用的开源加密库,它支持多种加密算法,提供了加密、解密、证书管理、哈希运算等功能。OpenSSL 支持对称加密、非对称加密、哈希算法、消息认证码等不同类型的加密算法。OpenSSL 支持各种加密算法,用于数据加密、数字签名、身份验证等多种场景。它提供了灵活且强大的 API,允许开发人员实现多种加密方案。常见的加密方法包括对称加密(如 AES、SM4)、非对称加密(如 RSA、ECDSA)、哈希算法(如 SHA、MD5)等。密钥:数据加密和解密的核心机密值。公钥和私钥。
2024-11-09 20:07:07 1009
原创 单片机中的BootLoader(使用汇编指令进行跳转)
使用汇编语言进行跳转的好处在于它提供了对硬件的直接控制、优化的性能和灵活的自定义能力。结合 C 语言的高层抽象,开发者可以编写高效且可维护的代码,尤其是在嵌入式系统和引导加载程序的开发中。
2024-10-27 20:23:58 319
原创 嵌入式刷题(day21)
MySQL:适合需要高并发、多用户、多功能的应用,尤其是分布式和需要大量复杂查询的系统。SQLite:适合嵌入式应用、单用户系统、轻量级应用、测试环境或快速原型开发。原子操作(Atomic Operation)是指一种不可分割的操作,在计算机系统中它要么完全执行成功,要么完全不执行,即使在多线程或多进程环境下也不会被中断或打断。它是实现并发编程中线程安全的重要基础。101000// 使用 GCC 的 __sync_fetch_and_add 实现原子递增i++) {// 原子加 1。
2024-10-27 17:02:17 243
原创 嵌入式面试刷题(day20)
虚拟内存(Virtual Memory)是一种计算机系统内存管理技术,它使计算机能够通过使用硬盘或其他存储设备来扩展物理内存(RAM)的容量。虚拟内存的核心思想是为每个进程提供一个独立的、连续的内存地址空间,即使实际的物理内存不足以存放所有正在运行的程序。使用你需要频繁地随机访问元素。大多数插入和删除操作都在末尾进行。你想要连续的内存分配以提高缓存性能或降低内存占用。使用std::list你需要频繁地在中间插入或删除元素。不关心随机访问,只需顺序访问元素。
2024-10-20 14:51:21 216
原创 嵌入式面试刷题(day19)
Makefile:适合小型项目,简单直接,但手动管理依赖和跨平台支持差。CMake:适合大型跨平台项目,自动化程度高,依赖管理更方便,适用于复杂项目的维护和扩展。对于复杂的嵌入式项目或跨平台应用,CMake往往是更好的选择,而对于简单的项目,Makefile可能已经足够。网络拓扑是指网络中各个节点(如计算机、服务器、路由器等)以及它们之间的连接关系的结构。拓扑决定了数据在网络中如何流动、如何进行通信,并影响网络的性能和管理。
2024-10-20 14:43:22 241
原创 单片机中的BootLoader(BootLoader简介和写法)
本篇文章我们来为大家开始讲解BootLoader,BootLoader使用也是非常广泛的,特别是和OTA远程升级相关的时候,所以我打算开一个专栏来给大家讲解这方面的内容。
2024-10-20 11:08:37 2000
原创 如何应对嵌入式面试,嵌入式面试主要会问什么?
竞赛经历为你找嵌入式工作提供了实战经验和软硬件能力的展示机会,不仅增强了你的技术背景,还让你在面试中有更多具体案例来展示你的能力。因此,嵌入式竞赛的经历会对找工作有很大帮助,尤其是在竞争激烈的嵌入式开发领域。嵌入式面试和笔试需要你具备扎实的基础知识和实际动手能力。通过每天安排合理的复习时间,重点掌握八股文、数据结构与算法、C语言基础等核心内容,并结合实际项目经验,逐步提升自己应对笔试和面试的能力。
2024-10-13 16:00:50 259
原创 文心智能体:我的旅游小助手
全球旅游推荐官致力于为用户提供最全面和精致的旅行建议和攻略。作为一位充满热情和知识的旅游推荐官,它能帮助旅行者探索世界上最梦幻的目的地,提供详细的旅游攻略、特色景点推荐、文化背景介绍、最佳旅行时间、当地美食和活动等多方位信息。让我们来看看全球旅游推荐官的使用吧:全球旅游推荐官进入主界面会有三个引导问题教你如何去使用智能体:全球旅游推荐官会根据用户的喜好和各个景点的风景图片和人文风情来给用户推荐对应的景点,这也是全球旅游推荐官的一大优点。
2024-10-13 10:13:53 1216
原创 嵌入式笔试刷题(day2)
默认构造函数拷贝构造函数拷贝赋值运算符析构函数(C++11之后)移动构造函数和移动赋值运算符如果用户显式定义了这些函数中的任何一个,编译器将不会再自动生成对应的版本。
2024-10-05 14:54:37 392
原创 嵌入式笔试刷题专栏(day1)
问题: 包含 10 个字符 (),再加上一个结束符 (字符串的结尾标志),实际需要 11 个字节。而 只有 10 个字节的空间,因此使用 会导致内存溢出。改进:将 的大小改为 11,以确保有足够的空间来存储字符串和终止符 :结构体的大小计算:结构体的大小计算:位域 和 占用 4 位,合计 8 位(1 字节)。 占 8 位(1 字节)。 是一个 4 字节的 。因此,、 和 一共占 2 字节, 占 4 字节,总共 6 字节。但由于内存对齐,系统会根据最大成员的对齐需求(4 字
2024-10-02 14:39:16 263 1
原创 嵌入式面试刷题(day18)
本篇文章将继续给大家讲解嵌入式面试中的内容。FromISR函数的设计目标是为了在中断环境下提供安全、高效的API调用方式,避免中断上下文下的一些限制和问题。不能阻塞任务中断屏蔽与恢复任务唤醒的特殊处理中断优先级的检查这确保了在实时系统中,中断处理既能保持快速响应,又能安全与任务切换和调度机制进行交互。中断优先级是指在多个中断同时发生时,系统确定哪个中断首先被处理的机制。它的主要作用是确保关键或时间敏感的中断能够及时响应。中断优先级越高的中断越先被响应和执行。中断优先级数值越小,优先级越大。
2024-10-02 14:27:42 988
原创 USB中的传输和事务
控制事务:用于设备配置和控制指令传输,具备可靠性。批量事务:用于大量数据的可靠传输,适合无时间敏感的设备。中断事务:用于小数据量的定时传输,适用于键盘、鼠标等设备。等时事务:用于实时音视频传输,优先保证数据传输的时效性而非完整性。这些事务类型构成了USB通信中的不同传输模式,满足了不同设备和应用的需求。
2024-09-17 07:00:00 892
原创 USB数据格式
标记数据包的开始。:同步主机和设备的时钟。:标识数据包的类型。地址(Address):指定数据包的目标设备。数据(Data):实际的数据内容。CRC 校验码:校验数据的完整性。:标记数据包的结束。数据类包(Data Packets):用于传输实际数据。主要包括 DATA0 和 DATA1。握手类包(Handshake Packets):用于确认数据包的接收状态。包括 ACK、NAK 和 STALL。令牌类包(Token Packets):用于发起和控制数据传输过程。
2024-09-16 10:31:03 1229
原创 USB的电气特性
USB协议中的各种状态和信号电平定义了数据传输的机制和设备的行为。这两根数据线,并通过检测它们的电平和上拉电阻,来区分连接的设备类型和速率。通过这种方式,USB能够自动识别连接设备的速率,并进行相应的配置。这种机制确保了设备和主机之间的正确通信,并最大化了USB的兼容性。上使用上拉电阻(一般为1.5 kΩ)来区分设备的类型。这三种速率体现了USB在不同场景下的灵活性,适用于从简单设备到复杂、高速传输设备的广泛应用场景。这些状态转换是USB设备和主机通信的基本流程,保证了设备的识别、配置、通信以及功耗管理。
2024-09-16 09:26:51 1072
原创 WireShark过滤器
No.:数据包顺序Time:数据包到达时间Source:数据包发送方地址:数据包接收方地址Protocol:通信协议Length:数据包大小Info:简要说明。
2024-09-08 16:10:18 1554
原创 USB通信协议基础概念
USB(Universal Serial Bus,通用串行总线)是一种广泛使用的计算机总线标准,用于连接计算机与外部设备。它定义了一种硬件接口和通信协议,使得设备之间的数据传输和电源供给变得简单和标准化。USB设备地址是一个唯一的标识符,用于在USB总线上识别和管理设备。设备地址在设备连接时分配,并用于数据传输和通信管理。USB端口地址标识连接设备的具体端口,用于设备管理、电源控制和复位。USB端点地址用于标识设备内部的特定端点,每个端点有其唯一的地址,并用于不同的数据传输类型。
2024-09-07 15:41:06 1594
原创 嵌入式面试刷题
回调函数(Callback Function)是在编程中一种常用的概念,指的是将一个函数作为参数传递给另一个函数,并在适当的时机由该函数调用它。简单来说,回调函数就是**“在某个事件或条件触发时由别的函数调用的函数”**。概念:旨在检测和恢复系统故障。它是一种硬件计时器,要求系统在规定的时间内定期对其进行复位(喂狗)。如果系统没有及时复位看门狗,计时器将会溢出,并触发一种预定的响应,通常是系统复位或重启。防止系统卡死。
2024-09-07 08:29:59 672
原创 Linux网络编程(setsockopt函数讲解)
setsockopt函数允许你在不同的协议层(如套接字层、TCP 协议层、IP 协议层)上配置各种选项,以调整套接字的行为。根据应用需求,你可以选择启用保活机制、调整缓冲区大小、设置 Nagle 算法等。配置这些选项可以帮助优化套接字性能、提高连接稳定性和适应特定的网络环境。
2024-09-02 07:00:00 1940
原创 大模型辅助软件开发,助力工程师的开发之路
虽然书中对“大模型”的讨论并不多,但更多的是关于专业的软件开发技能,这些技能包括业务视野、技术视野以及现代软件工程方法。大模型的辅助可以提升个体能力,减少与他人之间的协同需求,从而将低层次的任务协同提升到基于价值交付单元的高层次协同。然而,实际情况是,利用大模型的效率不仅仅取决于提示词的质量,还与工程师的专业素养和认知水平息息相关。虽然大模型是强有力的助手,但真正决定开发效率的依然是工程师的专业技能和对软件工程方法的理解。“是人类工程师的能力,而不是大模型的能力,决定了大模型协作式开发的上限。
2024-09-01 10:46:29 642
原创 我的创作纪念日
那时候,我决定将自己的学习过程和经验分享给更多的技术爱好者,期望不仅能够帮助自己更好地理解技术,也能为他人提供有价值的参考。从最初的简单介绍到后来的深入分析,每一篇文章都代表了我对技术的思考和对读者的责任。在这段创作旅程中,我不仅积累了丰富的技术知识,更重要的是在实践中不断提升了自己的创作能力。通过编写文章和教程,我学会了如何将复杂的技术问题拆解成易于理解的内容,这不仅有助于我自身的学习,也帮助了许多同样热爱技术的读者。在未来的创作中,我希望能保持对技术的热爱和对读者的负责,不断创新,持续成长。
2024-09-01 09:42:22 352
原创 Linux网络编程(阻塞和非阻塞)
errno.h>是一个非常有用的头文件,它提供了一种标准化的方式来处理程序运行时的错误。通过errno变量、错误码宏、以及perror和strerror函数,程序员可以轻松地检测和报告错误,从而更好地调试和维护代码。
2024-09-01 09:25:41 1161
原创 Linux内核分析(RCU机制和内存优化)
RCU(Read-Copy-Update)是一种并发编程技术,主要用于提高多线程程序中的读操作效率,同时保持数据的一致性和安全性。RCU 被广泛应用于 Linux 内核和其他高性能系统中,用于优化数据结构的访问。RCU(Read-Copy-Update)是一种高效的并发编程技术,通过优化读操作的效率来提高系统性能。它通过延迟更新和回收旧数据副本来避免锁竞争,从而实现高效的读操作。尽管 RCU 提供了显著的性能优势,但也带来了一些挑战,如回收延迟和实现复杂性。
2024-08-18 11:15:20 814
原创 Linux内核之网络套接字
物理层 (Physical Layer):负责传输原始比特流,包括电缆、光纤和无线传输。数据链路层 (Data Link Layer):提供错误检测和纠正,控制数据帧的流量,管理节点到节点的通信。网络层 (Network Layer):处理数据包的路由选择和转发,管理不同网络之间的传输(如IP协议)。传输层 (Transport Layer):提供端到端的数据传输服务,确保数据完整性和顺序(如TCP、UDP)。会话层 (Session Layer):管理会话的建立、维护和终止,协调会话之间的交互。
2024-08-17 22:09:00 975
Cmake 3.27版本
2023-07-16
SG90舵机使用手册pdf
2023-06-13
STM32F407智能小车学习代码
2023-06-13
基于STM32智能小车
2022-12-17
智能指针的类型方法及使用方法
2023-03-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人