自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 框架_C语言_数据包解析代码框架

当我们要发送数据时,我们需要先调用具体的报文发送函数将数据存入到帧结构的数据段中,之后调用组包函数添加数据包的帧头以及校验位,最终调用底层发送函数发送出去。

2025-03-13 18:28:37 990

原创 协议_CAN协议

CAN控制器根据CAN_L和CAN_H上的电位差来判断总线电平,总线电平分为显性电平(CAN_H与CAN_L压差 = 2v)、隐性电平(CAN_H与CAN_L压差 = 0v),发送方通过总线电平的变化,将消息传递给接收方,其中显性电平对应逻辑0、隐形电平对应逻辑1。单片机的CAN接口通过TJA1050芯片与CAN总线进行连接,TJA1050会将单片机的逻辑信号转换成CAN_H和CAN_L。

2025-02-09 19:59:16 831

原创 4. LwIP_网络数据包管理

TCP/IP协议栈的实现,本质上就是对数据包的管理。在LwIP中,定义了一个pbuf结构体对数据包进行管理。1、用户产生要传输的数据2、用户在内存堆/内存池中申请一个pbuf结构体3、将数据拷贝到申请的内存中,加上应用层的首部4、依次加上各层的首部,直至发送出去,而不是每层之间相互独立。next:当一个数据段需要分段来管理时会有多个pbuf,这些pbuf以链表形式进行连接payload:指向数据区的指针tot_len:pbuf的总长度,tot_len = len+next->len+....

2025-01-19 19:06:48 736

原创 3.LwIP_网络接口

网络接口就是一个网卡,应用层数据通过层层封装到达网卡,之后网卡负责将数据发送到网络之中。因为网卡直接与硬件对接,硬件不同驱动也不同,因此LwIP只提供了统一的接口,但底层的实现需要用户自己完成。

2025-01-18 11:33:10 622

原创 2.LwIP_内存管理

LwIP有两种内存管理策略,它们分别是内存堆和内存池。

2025-01-07 21:20:40 1080

原创 1.LwIP_概述

当用户准备好数据后,首先在应用层选择相应的协议,如图中的HTTP、MQTT等;之后选择网络层的协议、网络层与数据链路层的接口;之后数据链路层添加控制信息,通过数据链路层与物理层直接的协议进行交互。当网络层的数据到来时,该数据会保存到一个缓冲区中;发送端在最上层产生用户数据,之后经过应用层、传输层、网络层,这几层对数据的首部进行添加控制信息,到达数据链路层后,添加首部和尾部控制信息,最终通过物理层传输出去。接收端接收到来自物理层的数据后,就是将首部和尾部进行一层层的拆除,最终获取到用户数据。

2025-01-05 15:57:52 266

原创 协议_SPI协议

因为是模式0,所以CPOL、CPHA的值为00,代表CLK的初始电平为低电平,采样为奇数边沿,也就是上升沿。因此数据为黄线所标注的数据。SPI具有CS、SCK、MISO、MOSI这四根线。SPI的通信是通过CS线进行片选,SCK、MISO、MOSI这三根线都是总线。SPI的工作模式主要区分的是 "SCK的初始电平" 与 "数据采样的边沿类型"。

2024-12-15 15:40:56 215

原创 3.2 串口_HAL库实现代码

串口用作调试就是配置好串口后,用串口做一些输出。对于代码层面,最终调用的是标准库printf来实现串口数据的输出。

2024-12-06 13:22:18 493

原创 4. STM32_定时器

定时器核心就是计数器,是使用精准的时基,通过硬件的方式,实现定时功能的器件。

2024-11-29 10:51:32 630

原创 3. STM32_串口

串行通信就是数据逐位按顺序依次传输并行通信就是数据各位通过多条线同时传输。

2024-11-28 21:32:40 1022

原创 2. STM32_中断

EXTI就是外部中断事件控制器,主要作用是管理内部/外部的唤醒事件或者中断。F1包含20个产生事件/中断请求的边沿检测器,即总共:20条EXTI线,其中0~15是外部事件,其余是内部事件。

2024-11-28 19:16:17 1100

原创 1.1 STM32_GPIO_基本知识

GPIO全称为通用输入输出端口,可以对外设的信息进行采集以及对外设进行控制。GPIO可以进行快速翻转,。例如STM32的晶振为72MHz,那么GPIO的最快翻转速度为72/2 = 36MHz。对于F1,手册上标注的最快速度为50MHz,该数值是在超频下测量,而不是72MHz。GPIO以大写字母ABC...进行分组,每一个组最多有16个IO,最终标注为PA0~PA15等等。

2024-11-28 10:43:54 1423

原创 7、ARM_栈

栈的本质就是一段内存,程序运行时用于保存一些临时数据,如局部变量、函数的参数、返回值、以及程序跳转时需要保护的寄存器等。

2024-11-13 16:02:33 1243

原创 6. ARM_ARM指令寻址

寻址方式就是CPU去寻找一个操作数的方式。

2024-11-12 20:14:40 517

原创 5. ARM_指令集

立即数就是能够写在指令后面的数,例如 " MOV R0 #1 " 这个#1当中的数就是立即数。立即数的本质就是包含在指令当中的数,属于指令的一部分。

2024-11-12 19:20:56 1546

原创 C_刷题错题整理

3、2、1、

2024-11-11 20:58:15 242

原创 4.ARM_异常处理

异常处理机制就是处理器在遇到异常时的处理方法,不同的处理器的异常处理机制是不同的。对于不同的处理器,异常处理机制大致相同,但在细节上有所不同。比如处理器认为哪些事情是异常、处理异常的动作是什么,如何跳转到异常处理程序、如何处理异常,跳到异常处理程序后要做些什么、异常处理结束后如何返回断点。

2024-11-10 11:23:33 891

原创 3. ARM_寄存器组织

寄存器是。

2024-11-09 14:25:36 915

原创 2.ARM_ARM是什么

ARM内核不是完整的CPU,而是CPU芯片中的核心部分,它需要与其他组件(如缓存、输入/输出接口等)一起集成到一个芯片上,才能构成一个完整的CPU。SOC就是系统级芯片,也叫片上系统,它指的是将CPU和该产品所需的外设集成在一个芯片中的技术。ARM产品的命名发展为:ARM7->ARM9->ARM11->ARM-Cortex。其中Cortex分为A、R、M,不同的类型应用场景也不同。ARM-Cortex A系列:针对开放式操作系统的高性能处理器,应用于智能手机、数字电视、智能本等高端运用。

2024-11-07 19:37:19 810

原创 1.ARM_计算机基础知识

总线是计算机中各个部件之间传送信息的。

2024-11-06 15:18:20 924

原创 数据库_SQLite3

1、更新软件源:2、下载SQLite3:3、验证:sqlite3启动数据库,出现以下界面代表运行正常。输入 .exit 可以退出数据库4、安装sqlite3的库sudo apt-get install libsqlite3-dev,之后编译c代码时需要加上 -l sqlite35、打开数据库sqlite3

2024-11-03 19:25:41 1714

原创 项目_Linux_网络编程_私人云盘

网络相关的代码封装在my_net.c、my_net.h中。基本功能就是实现服务器与客户端可以相互通信。这里先使用单线程的方式进行框架的搭建。

2024-11-01 20:23:26 1182

原创 13.5 Linux_网络编程_域名解析

h_aliases:主机的备用名称数组,以NULL结尾h_addrtype:AF_INET或AF_INET6h_length:单位字节。AF_INET时为4,AF_INET6时为16。

2024-10-22 15:06:20 231 1

原创 13.4 Linux_网络编程_套接字属性

socket中可以设置的属性种类很多,比如socke的选项、传输层TCP/UDP的选项、数据链路层的选项。这些选项在不同的层级,这就是选项的级别。

2024-10-21 11:31:20 504

原创 13.3 Linux_网络编程_多路复用I/O接入多客户端

返回值:成功返回有数据的文件描述符,失败返回-1nfds:最大的文件描述符,值为readfds,writefds,exceptfds中最大的文件描述符+1readfds:可读集合,常用writefds:可写集合,不常用exceptfds:异常集合,不常用timeout:超时时间。NULL永久阻塞,0非阻塞fd_set就是一个整型数,每一个bit位代表一个文件描述符fd。当fd可操作时,对应的位就会自动置1,读取之后需要手动清零。

2024-10-20 15:55:11 567

原创 9.6 Linux_I/O_IO模型

用户进程中的一个完整I/O分为 "用户进程空间->内核空间->设备空间(磁盘、网卡)" 这两个阶段。I/O可以分为内存I/O、网络I/O、磁盘I/O1、对于线程的请求调用,同步与异步区别在于是否要等这个比如read函数,它就是只有读完了数据,存入到了buf中,才会执行下一步,这就是同步比如aio_read函数,它就是只发送请求数据,不论是否读完,它都会执行下一步,这就是异步。2、对于多线程,同步与异步区别在于是否要、是否要。

2024-10-18 15:12:50 588

原创 13.2 Linux_网络编程_UNIX域套接字

UNIX域套接字是使用套接字进行本地通信,TCP/UDP是使用套接字进行网络通信。UNIX域套接字也有域流式套接字和域数据报套接字,这两种形式域TCP/UDP的含义类似,使用步骤也完全一致。

2024-10-18 11:08:12 385

原创 7.计算机网络_IP包头

假设TCP传输的本次数据共有3800个字节,IP数据报的长度MTU为1400个字节。那么第一个分片就是0~1399,第二个就是1400~2799,第三个就是2800~3799。就像TCP接收应用层数据将数据抽象成一字节一字节并以一段一段的方式进行传输一样,IP接收到TCP的数据,也会将大的数据抽象成一段一段的数据进行处理。这一段一段的数据就叫IP数据报分片。MTU就是数据报的最大长度,MTU<=65535。分析见"片偏移过程"

2024-10-17 16:19:05 417

原创 6.计算机网络_UDP

从下图可以看到,当应用层将报文传给UDP后,UDP会在报文前面加一个头部构成一个UDP报文。即:UDP对应用层的数据并不进行处理,而是原样发送。UDP的包头只有8个字节,是固定的长度。其中包括伪头部、源端口、目的端口、长度(数据长度)、检验和这5部分。

2024-10-17 15:30:38 543

原创 5.计算机网络_抓包工具wireshark

223.109.82.41是通过ping命令获取到的百度服务器的ip。2、打开wireshark,设置捕获tcp协议的数据包,并开启捕捉。nc不用加sudo,因为443是百度服务器的端口,不是本机的端口。3、使用nc 223.109.82.41 443连接百度服务器。使用nc命令连接百度,分析tcp三次握手、四次挥手的过程。1、ping www.baidu.com获取百度的ip。4、通过wireshark捕捉到了tcp的包。

2024-10-17 15:02:51 386

原创 4.计算机网络_TCP

握手就是TCP建立连接的过程,三次握手指的是TCP采用的连接方式是三报文握手,在客户端与服务器之间交换三个TCP报文段。目的是防止已失效的连接请求报文段突然又传输到了,因而产生TCP连接建立错误。

2024-10-17 12:31:22 1334

原创 1.计算机网络_基本知识

计算机网络由。

2024-10-15 10:27:45 1074 1

原创 13.1 Linux_网络编程_TCP/UDP

socket处在应用层与内核之间。在应用层中实现的是与应用相关的代码,在内核中实现的是网络通信相关的代码。在OSI结构中,应用层就是OSI的应用层、表示层、会话层,内核就是运输层、网络层、数据链路层、物理层。三元组指的是IP地址、端口号、协议。该数据通过bind函数进行绑定。IP地址:标识计算机,找到与网络中的哪一个计算机进行通信。端口号:标识进程,找到与计算机中哪一个进程进行通信。协议:指定数据以什么样的方式进行传递。主要指TCP、UDP。

2024-10-14 21:22:37 1128

原创 3.计算机网络_端口号

PDU是协议数据单元,在5层结构的每一层都有一个PDU,在运输层的PDU叫做TPDU。运输层有TCP和UDP两种协议,TCP传送的数据单位协议是。

2024-10-13 12:36:40 1005

原创 2.计算机网络_IP地址

当一个主机通过两个网卡同时连接到两个网络时,此时该主机同时拥有两个IP,这种主机被称为多归属主机。

2024-10-13 10:36:52 1631 1

原创 项目_C_Ncurses_Flappy bird小游戏

Ncurses是一个管理应用程序在字符终端显示的函数库,库中提供了创建窗口界面、移动光标、产生颜色、处理键盘按键等功能。

2024-10-12 11:00:23 377

原创 8.C_Demo_产生随机值

在Linux中,可以用时间函数time的返回值作为产生随机数的种子,使用srand将这个值设置为随机种子,使用rand来产生随机数。result:用于存储时间值,单位为s。存储的值与返回值是同一个值,可以写NULL。返回值:time_t 通常为long型,可用 sizeof 查看。seed:随机种子,写入time(NULL)即可。返回值单位为s,错误时返回-1。

2024-10-12 10:04:22 340

原创 12.5 Linux_进程间通信_信号灯

信号灯也称为信号量,代表的是一类资源,其值表示系统中该资源的数量。主要用途是实现进程、线程的同步。

2024-10-10 11:25:30 855

原创 12.4 Linux_进程间通信_消息队列

消息队列是用链式队列的数据结构来实现的进程间通信方式,数据具有先入先出的特点。消息队列由ID来进行标识,每一个消息队列的ID都是唯一的。

2024-10-09 16:24:21 444

原创 12.2 Linux_进程间通信_共享内存

共享内存又叫内存映射,可以通过mmap()映射普通文件。实际上就是将磁盘中的一个文件映射到内存的一个缓冲区中去,这样进程就可以直接将这块空间当作普通内存来访问,不需要再使用I/O中的read/write去访问这个文件。映射之后,内存中读写数据就是在文件中读写数据。

2024-10-09 12:40:52 1134

3.2 串口-HAL库实现代码

3.2 串口-HAL库实现代码

2024-12-06

数据库-SQLite3-练习代码

数据库_SQLite3_练习代码

2024-11-06

项目-Linux-网络编程-私人云盘

项目_Linux_网络编程_私人云盘

2024-11-01

项目-C-Ncurses-Flappy bird小游戏

项目-C-Ncurses-Flappy bird小游戏

2024-10-15

5.C-Demo-排序

5.C-Demo-排序_快速排序

2024-09-20

6.C-数据结构-查询-哈希表

6.C_数据结构_查询_哈希表

2024-09-20

5.C-数据结构-二叉树

5.C_数据结构_二叉树

2024-09-19

4.C-数据结构-队列

4.C_数据结构_队列

2024-09-15

3.C-数据结构-栈源码

3.C-数据结构-栈源码

2024-09-08

3.门锁-STM32-矩阵按键设备实现

3.门锁-STM32-矩阵按键设备实现

2024-09-07

2.C-数据结构-线性表-线性表源码

2.C-数据结构-线性表-线性表源码

2024-09-07

2.C-数据结构-线性表-链表源码

2.C-数据结构-线性表-顺序表源码

2024-09-07

2.门锁-STM32-舵机设备实现

2.门锁-STM32-舵机设备实现

2024-09-04

1.门锁-STM32-用户功能

1.门锁-STM32-用户功能

2024-09-04

2.C-数据结构-线性表-顺序表源码

2.C-数据结构-线性表-顺序表源码

2024-08-30

分文件管理makefile文件

分文件管理makefile文件

2024-08-27

5.C基础-运算符-取余-实现多位数分离

5.C基础-运算符-取余-实现多位数分离

2024-07-30

空空如也

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

TA关注的人

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