- 博客(92)
- 收藏
- 关注
原创 TCP通信代码实现
在整个流程中,主要涉及四个接口socket() : 创建套接字,使用的套接字类型为流式套接字connect() : 连接服务器send() : 数据发送recv() : 数据接收2.socket函数代码连接服务器要调用的函数为connect代码最后使用网络调试助手进行测试基于socket发送数据需要调用send函数代码使用网络调试助手进行测试基于socket接收数据需要调用recv函数使用网络助手进行测试在上述流程中,相对于客户端主要增加以下新的流程bind : 绑定ip。
2025-03-25 17:50:09
715
原创 TCP粘包原因分析以及解决方案
这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据,这样就一次取到了多包数据。协议进行数据传输时,多个数据包被连续存储于缓存中,在对数据包进行读取时由于无法确定发送方的发送边界,而采用某一估测值大小来进行数据读取,使得发送方发送的若干个数据包到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
2025-03-25 17:21:51
392
原创 UDP通信实现
TCP/IP 五层网络模型的应用层编程接口称为Socket API,Socket(套接字,它是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈是应用程序通过网络协议进行网络通信的接口Socket可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。为什么需要Socket1.普通的I/O操作打开文件->读/
2025-03-25 16:43:10
999
原创 家庭网络结构之局域网通信
拨号上网,然后通过家庭路由器,将网络连接到家里所有的可以联网的设备。家庭网络中,所有设备联网方式完全相同,所以只需要学习一个设备和其他设备之间如何通讯,即可理解家庭网络。整个互联网非常复杂,涉及到很多知识,学习互联网不能一蹴而就,所以这里从最简单的家庭网络开始学习。:通过Wi-Fi(2.4GHz/5GHz频段)连接路由器,输入密码认证。:通过网线直连路由器或交换机,自动获取IP(DHCP)或手动配置。:Wi-Fi/Zigbee(通过网关接入局域网)。:设备需在同一局域网,且支持相同投屏协议。
2025-03-25 15:43:30
898
原创 网络体系架构
网络采用分而治之的方法设计,根据网络的功能划分为不同的模块,以分层的形式有机组合在一起。每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供 的服务网络体系结构即指网络的层次结构和每层所使用协议的集合两类非常重要的体系结构:OSI七层模型 与TCP/IP五层模型二, OSI七层模型(理论参考模型)国际标准化组织(ISO)提出的开放式系统互连模型层级名称功能协议/设备7应用层用户接口,提供网络服务(如HTTP、FTP)6表示层。
2025-03-25 15:36:20
424
原创 网关、子网掩码和DNS服务
子网掩码是一个32位地址,是与IP地址结合使用的一种技术。它的主要作用有两个,一是用于屏蔽IP地址的一部分以区分网络标识和主机标识;二是用于将一个大的IP网络划分为若干小的子网络。获取网络标识网取主机标识/2410.0.0.0/8。
2025-03-25 15:02:42
990
原创 IP地址介绍
我们接入因特网的计算机与我们接入电话网的电话很相似。我们每台计算机或者路由器都有一个由授权机构分配的号码,称为IP地址。例如我们中国的代号是086,如果中国境内某单位的电话号码为85225566,所在的地区号为029,那么,这个单位的电话号码完整的表述应该是。该电话号码在全世界范围内是唯一的,这是一个很典型的分层结构的电话号码的定义方式。同样,IP地址也是采用分层结构。我们的IP地址由网络号和主机号两部分组成。其中网络号用来标识一个逻辑网络,主机号用来标识我们网络中的一台主机。
2025-03-25 14:46:23
809
原创 stm32hal库寻迹+蓝牙智能车(STM32F103C8T6)
这个小车的芯片是STM32F103C8T6,其他的芯片也可以照猫画虎,基本配置差不多,要注意的就是,管脚复用,管脚的特殊功能,(这点不用担心,hal库每个管脚的功能都会给你罗列,很方便的.)由于我做的比较简单,只是用到了几个简单外设.主要是由带霍尔编码器电机的车模,电机驱动tb6612,(注意:选择驱动的时候不要选择那种小红色的驱动。
2025-02-20 15:44:10
1953
2
原创 i.MX6ULL-CAN总线
5.1 FlexCan控制器介绍FLEXCAN (Flexible Controller Area Network)模块是一种根据CAN 2.0B协议规范实现CAN协议通信控制器。CAN协议主要设计用于满足该领域具体要求的车辆串行数据总线:实时处 理,车辆在EMI(电磁干扰)环境中可靠运行,成本效益和所需带宽。FLEXCAN模块是CAN协议规范的完整实现,它支持标准和扩展消息帧。Flexcan模块支持64 Message Buffers5.2 工作模式。
2025-02-18 13:12:26
630
原创 i.MX6ull-wire单总线
一、单总线介绍1-wire单总线是Maxim(美信公司)全资子公司Dallas(达拉斯)的一项专有技术与目前多数标准串行 数据通信方式,如SPI 、I2C不同,它采用单根信号线,既传输时钟,又传输数据,而且数据传输是双 向的。它具有节省I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。1-wire单总线适用于单个主机系统,能够控制一个或多个从机设备。当只有一个从机位于总线上时,系 统可按照单节点系统操作;而当多个从机位于总线上时,则系统按照多节点系统操作。
2025-02-18 12:10:42
816
原创 i.MX6ull-SPI总线
一、SPI介绍串行外围设备接口。是由Motorola公司开发,用来在微控制器和外围 设备芯片之间提供一个低成本、易使用的接口。这种接口可以用来连接存储器、AD转换器、DA转换 器、实时时钟、LCD驱动器、传感器、音频芯片、甚至其他处理器。与标准的串行端口不同,SPI是一个同步协议接口,所有的传输都参照一个共同的时钟,这个同步时钟 信号由主机(理器)产生。接收数据的外设(从设备)使用时钟对串行比特流的接收进行同步化。当有多个 芯片连接到主机的同一个SPI接口上。
2025-02-18 10:38:35
1049
原创 I.MX6ull-I2C
一,I2C总线介绍I2C(Inter-Integrated Circuit 集成电路)总线是Philips公司在八十年代初推出的一种串行、半双工的总 线,主要用于近距离、低速的芯片之间的通信;I2C总线有两根双向的信号线,一根数据线SDA用于收 发数据,一根时钟线SCL用于通信双方时钟的同步;I2C总线硬件结构简单,简化了PCB布线,降低了系 统成本,提高了系统可靠性,因此在各个领域得到了广泛应用。I2C总线是一种多主机总线,连接在 I2C总线上的器件分为主机和从机。
2025-02-15 18:42:48
582
原创 I.MX6ull-ADC
一,ADC简介ADC即模拟数字转换器(英语:Analog-to-digital converter)是用于将模拟形式的连续信号转换为数 字形式的离散信号的一类设备。ADC 用于将模拟值从现实世界转换为数字值,如1和0。那么这些模拟值是什么?这些是我们在日常生 活中看到的,比如温度、速度、亮度等。但是ADC 能否将温度和速度直接转换为0和1等数字值?当然 不是。ADC只能将模拟电压值转换为数字值。因此,无论我们想要测量哪个参数,都应该先将其转换为 电压,这种转换可以在传感器的帮助下完成。
2025-02-15 17:53:59
838
原创 I.MX6ull 看门狗
一、看门狗介绍WatchDog是为了能够防止程序跑飞而使用的一种硬件模块。如果你的程序没有跑飞,那么你的程序会 定时的去喂看门狗;如果你的程序跑飞了,那么就不会再去喂狗了,如果超过了喂狗的时间,那么狗就会 自己生成一个信号来重新reset你的CPU,让程序重新开始。这是一种在很重要的情况下防止系统跑飞的 一种方法。二、I.MX6ull Watchdog Timer看门狗定时器(WDOG)通过提供一种方法来避免意外事件或编程错误,从而防止系统故障一旦激活了WDOG,就必须由软件定期对其进行服务。
2025-02-15 17:10:19
855
原创 I.MX6ULL-中断处理
一、中断的概念中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入 处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。(在ARM内核中有八种工作方式,六种异常工作方式,如何创建中断向量表,中断优先级,如何寻找中断位寻址,等等,异常在ARM内核的知识有很多,这里对太底层的原理不过多赘述,只是简单的介绍和配置,感兴趣的可以去好好找找其他关于ARM异常的资料)二、CPU处理事情的方式2.1 轮询方式不断查询是否有事情需要处理,如果有则处理。
2025-01-01 10:59:16
710
原创 I.MX6ULL-串口通信
一、串行与并行通信介绍通信方式是指通信双方之间的工作方式或信号传输方式,终端与其他设备(例如其他终端、计算机和外 部设备)通过数据传输进行通信,根据数据的传输方式,有串行通信和并行通信。1. 并行通信利用多条传输线将一个数据的各位同时传送,其特点是传输速度快,适用于短距离通信。2. 串行通信利用一条传输线将数据一位一位地顺序传送,特点是通信线路简单,成本低,适用用于远距离通 信。二、串口介绍串口全称叫做串行接口,通常也叫做COM 接口。
2025-01-01 10:33:47
869
原创 I.MX6ull-PWM
一、PWM介绍PWM(Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的 一种非常有效的技术,广泛应用在测量、通信、工控等方面。
2025-01-01 10:10:53
914
原创 I.MX6ULL-GPT实现延时
一,定时器介绍定时器简单来说,就是设置一个时间,然后开始定时,等定时时间到达设定时间的时候,则发生一些动作,如:响铃。
2025-01-01 09:47:10
1086
原创 C语言-IO
本质上就是通过复用一个进程来处理多个IO请求本质上就是通过复用 个进程来处理多个IO请求由内核来监控多个文件描述符是否可以进行I/O操作,如果有就绪的文件描述符,将结果告知给用户进程,则用户进程在进行相应的I/O操作类似于下图的老师检查学生作业一、select函数的概念和用法函数原型:nfds:要监视的文件描述符的范围,通常设置为最高文件描述符值加 1。readfdswritefdsexceptfds:分别是指向要监视的可读、可写和异常文件描述符集合的指针。可以为NULL。
2024-09-27 21:20:59
1245
1
原创 C语言-线程
在 C 语言中,线程是程序执行的最小单位,它是进程中的一个实体,是被系统独立调度和分派的基本单位。2、线程的特点轻型实体:线程是一个轻型实体,它只拥有必不可少的资源,如程序计数器、一组寄存器和栈等。与进程相比,线程的创建、切换和销毁的开销要小得多。独立调度:线程是独立调度的基本单位,在多线程操作系统中,线程的调度不需要经过进程切换,因此可以提高系统的并发性和响应速度。共享进程资源:同一进程中的多个线程可以共享该进程的资源,如代码段、数据段、文件描述符等。这使得线程之间的通信和数据共享更加方便和高效。
2024-09-27 20:59:15
1557
原创 进程间的通信
Linux下的进程通信手段基本上是从Unix平台上继承而来的每个进程都有自己独立的地址空间,当两个不同进程需要进行数据交互时,就需要使用进程间通讯进程间通讯分为单个计算机的进程间通讯和局域网的进程间通讯进程间通讯方式有管道,信号,消息队列,共享内存,网络管道的本质是在内存建立一段缓冲区,由操作系统内核来负责创建与管理。具体通讯模型如下一、无名管道的特点单向通信:无名管道只能在一个方向上传输数据,即从一个进程的写入端(write end)流向另一个进程的读取端(read end)。
2024-09-27 20:23:36
1017
原创 C语言-进程
在 C 语言中,进程通常被认为是一个正在执行的程序的实例。从操作系统的角度来看,进程包含了程序的代码、数据、堆、栈以及各种系统资源(如文件描述符、信号处理等)。每个进程都在自己独立的内存空间中运行,与其他进程相互隔离,以确保安全性和稳定性。在 C 语言编程中,可以通过系统调用和库函数来操作进程。例如,可以使用fork系统调用创建一个新的进程,新创建的子进程会继承父进程的一部分资源,但拥有独立的内存空间和运行状态。
2024-09-27 19:15:27
1266
原创 C语言指针
对于初学者来说,指针是一个难点,原因就是,它与内存息息相关,同时指针也是C语言最为重要的一个内容,基本是贯穿C语言的学习,C语言和数组,函数,结构体,动态内存,还有之后的io,线程等等,一系列相关的内容.指针的重要性不言而喻.在学习指针之前,内存是一大前提.在 C 语言中,内存管理是一个重要的概念,而指针在内存操作中起着关键作用。一、C 语言中的内存划分栈(Stack)
2024-08-29 12:14:06
1010
原创 C语言数组
C语言中,可以用数组来保存相同类型的一组数据。1. 数组的定义// 定义了一个可以存储10个元素的整型数组2. 数组的使用通过 数组名[下标] 进行访问。
2024-08-28 09:49:10
814
原创 C语言的选择结构
在 C 语言中,选择结构(主要是if语句和switch语句)具有重要的作用和意义,具体如下:实现程序的分支控制根据不同的条件决定程序的执行路径,使程序能够根据不同的情况做出不同的反应。例如,在一个成绩评定程序中,可以根据学生的考试成绩划分不同的等级。如果成绩大于等于 90 分,输出 “A 等”;如果成绩在 80 到 89 分之间,输出 “B 等”,以此类推。以下是用 C 语言实现的示例代码:int score;printf("请输入学生成绩:");printf("A 等\n");
2024-08-28 09:03:02
887
原创 C语言循环语句
whilewhile以下是一个使用while在这个例子中,首先初始化变量i为 1,然后在while循环中,只要i小于等于 10,就将i累加到sum中,并将i的值增加 1。当i大于 10 时,循环结束。while。
2024-08-27 18:06:53
1154
原创 C语言中的运算符
加法(+):用于两个数相加。例如 int a = 3 + 5;,结果 a 的值为 8。减法(-):两个数相减。如 int b = 7 - 4;,b 的值为 3。乘法(*):两数相乘。,c 为 12。除法(/):整数除法会截断结果的小数部分。例如 int d = 10 / 3;,d 的值为 3。取余(%):也叫模运算,用于计算两个整数相除的余数。例如 int e = 10 % 3;,e 的值为 1。
2024-08-27 11:46:42
2081
原创 C语言函数
程序员根据自己的需求编写的函数。可以根据具体的问题和程序结构来定义合适的函数,以实现特定的功能。二,常见函数这些常见函数都是库函数,只需要导入对应的头文件就可以使用,例如(#include <stdio.h> 这样就可以使用main函数,这里需要注意main函数也是有参数的)一、输入输出函数printf()用于格式化输出数据到标准输出设备(通常是屏幕)。可以输出各种数据类型,如整数、浮点数、字符和字符串等。,这里会输出变量x的整数值,并换行。scanf()
2024-08-26 18:15:00
978
原创 C语言中的数据类型和C语言的命名规则
了解和正确使用这些数据类型对于编写高效、可靠的 C 语言程序至关重要。C语言数据类型两大种基本数据类型和派生数据类型.
2024-08-26 17:30:09
846
原创 C语言的变量和常量
变量在使用前必须先进行定义,定义变量包括指定变量的类型和名称。int a;定义了一个名为 “a” 的整型变量。(数据类型总共有两大类,1,基本数据类型2,派生数据类型,这里不过多赘述,类型名称需要自己定义,但是要更符合C语言的命名规则)int b = 5;将变量 “b” 初始化为 5。(这里int 就是基本数据类型的一种,b则是我们,命名的变量名称),定义了一个名为 PI 的常量,其值为 3.14。在程序编译前,所有出现 PI 的地方都会被替换为 3.14。
2024-08-26 17:11:18
364
原创 Vim编译器的介绍及使用
我们想要编写C语言代码,可以使用linux系统提供的工具进行代码的编写。代码编写完成之后,我们还需要验证书写的代码是否正确。这就需要编译器来进程验证。linux系统为我们提供了比较好的开发工具。vim 编辑器 : 书写代码的工具gcc 编译器 : 编译代码的工具。
2024-08-26 14:58:46
1099
原创 linux常见基础命令
功能: print work directory的缩写,显示当前目录的绝对路径。(一般都是rm-rf一起用,这类命令需要谨慎使用,一旦删除就没法撤回了,)功能: change directory的缩写,切换目录。功能:默认删除文件,加上指定的修饰符后,可删除文件夹。功能: list的缩写,列出当前目录的内容。相对路径:以当前目录为起点,遍历到子目录。绝对路径:以/为起点,遍历到子目录。功能:拷贝文件/文件夹到指定的目录。<1>移动文件或文件夹到指定目录。功能:在当前目录下新建目录。- 上一次操作所在路径。
2024-08-26 10:32:11
494
原创 Linux文件系统及常见快捷键
Linux 的文件系统以根目录(/)为起点,所有的文件和目录都在这个根目录下形成一个层次结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。存取文件时一定要清楚存放在哪个磁盘的哪个目录下。Windows操作系统将硬盘进行分区,然后用。中,无 论操作系统管理几个磁盘分区,这样的目录树只有一个.windows文件系统。<6>鼠标指针移除虚拟机。<1>开启一个新的终端。ctrl+alt+回车。
2024-08-26 10:19:27
823
原创 Linux开发环境搭建,虚拟机安装
(注意:在安装的时候可能会有一些问题,切记你不要装在c盘,可能在安装的时候会出现下图错误,这个是win11系统自带的保护措施,下面这个博客就是解决办法,如果没有出现就不要操作了)通过设置合适的安装源,您可以获得最新版本的软件和补丁,以修复已知的漏洞和错误。它的主要功能是可以给用户在单一的桌面上同时运行不同的操作系统,它也是可进行开发、测试、部署新的应用程序的最佳解决方案。(vim 和 gcc是必须安装的,vim是编译c/c++的工具,gcc是执行c/c++的工具,在一般的软件是将二者合在一起了.)
2024-08-26 09:55:37
947
原创 开发环境待
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。Vue.js 是前端的主流框架之一,和 Angular.js、React.js 一起,并成为前端三 大主流框架!2 vue的优点1.体积小 压缩后 33K2.更高的运行效率 用 JQuery 或者原生的 JavaScript DOM 操作函数对 DOM 进行频繁操作的时候,浏览器要不停的渲染新的 DOM 树,导致页面看起来非常卡顿。
2024-05-06 21:00:19
871
原创 数据结构-二分搜索树(Binary Search Tree)
1. 叶子结点出现在二叉树的最底层,除叶子结点之外的其它结点都有两个孩子结点。2. 一个层数为k 的满二叉树总结点数为:3. 第i层上的结点数为:4. 一个层数为k的满二叉树的叶子结点个数(也就是最后一层):4、二叉树不一定是“满”的。
2024-02-24 18:08:30
1275
原创 数据结构-Queue队列
System.out.println("扩容完成:this.front=" + this.front + ",this.tail=" + this.tail);System.out.println("入队:this.front=" + this.front + ",this.tail=" + this.tail);System.out.println("出队:this.front=" + this.front + ",this.tail=" + this.tail);// 用来保存实际存放元素的个数。
2024-02-23 16:59:52
1733
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人