自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ESP32通过TTL转RS485接口和风速风向变送器,检测风速风向数据(vs code附完整代码)

我们学校生产实习项目之一——智能环境节点检测,我负责本模块的开发。这是我第一次遇到单片机TTL转RS485模块,其中的难点在ESP32上通过ttl转rs485接口实现串口接收modbus格式的数据。编写代码以解析Modbus数据帧,提取风速和风向数据。将解析后的风速和风向数据进行处理和显示,风速单位为m/s,风向为16方位法如N(北风),NNE(东北偏北风),NE(东北风)等。将代码封装成头文件和接口函数,使用者调用函数即可实现功能。

2024-08-09 00:46:48 2134

原创 proteus仿真c51单片机(四)双机串口通信(电路设计及代码)

1.通过甲机的按键给乙机发送控制字符,同时也可以实现乙机给甲机发送控制字符2.用PROTEUS软件根据所给电路画出电路图,用KEIL软件调试程序和编译,最后在PROTEUS软件中实现仿真。3.甲乙两个单片机通过串口进行通信,甲机用一按键向乙机发送控制命令,乙机根据收到的控制命令字符完成各种功能。1、打开PROTEUS软件选取元件,连线绘制电路图。2、打开KEIL软件编制程序进行调试、编译。3、将编译的HEX代码装入PROTEUS软件绘制的电路图的单片机中。

2024-08-07 23:54:55 1291

原创 proteus仿真c51单片机(三)多定时任务的编程——时分秒发生器

1、打开PROTEUS软件选取元件,连线绘制电路图。2、打开KEIL软件编制程序进行调试、编译。3、将编译的HEX代码装入PROTEUS软件绘制的电路图的单片机中。4、仿真运行观察实验现象,若与要求的实验现象不同,检查程序和电路图找出错误。5、将编译好的HEX文件用单片机编程器下载进单片机,并在实验板电路上运行观察实验现象。

2024-08-07 23:41:09 373

原创 proteus仿真c51单片机(二)中断控制流水灯(电路设计及代码)

8路流水灯,K1和K2都未按下时,主程序执行LED流水灯程序,K1按下时,左右4只LED交替闪烁,K2按下时8只LED全部闪烁4次,设置外部中断1为高优先级。5、将编译好的HEX文件用单片机编程器下载进单片机,并在实验板电路上运行观察实验现象。中断允许寄存器IE中,中断允许控制寄存器IP,定时器/计数器控制寄存器TCON。4、仿真运行观察实验现象,若与要求的实验现象不同,检查程序和电路图找出错误。3、将编译的HEX代码装入PROTEUS软件绘制的电路图的单片机中。

2024-08-06 00:34:54 543

原创 proteus仿真c51单片机(一)流水灯程序(电路设计及代码)

利用PROTEUS电路设计与仿真软件和KEIL软件进行51单片机开发,是我大二时接触嵌入式的入门,Proteus为单片机开发入门者提供了一个方便、高效、低成本的学习和开发平台。通过使用Proteus,可以更容易地掌握单片机开发的相关知识和技能。以下分享我在Proteus和keil下完成的第一个实验——流水灯,接下来我还会分享这个系列我做过的中断、计时器和双机通信实验。我在这里只分享我的电路设计和代码设计、实现,Proteus和keil使用方法请大家自行查询(教程网上很多)。

2024-08-06 00:24:46 956

原创 socket网络编程——多进程、多线程处理并发

如果客户端暂时没发数据,服务端会在 recv()阻塞。此时,其他客户端向服务器发起连接后,由于服务器阻塞了,无法执行 accept()接受连接,也就是其他客户端发送的数据,服务器无法读取。服务端接受一个客户端的连接后,创建一个线程或者进程,然后在新创建的线程或进程中循环处理数据。主线程(父进程)只负责监听客户端的连接,并使用 accept()接受连接,不进行数据的处理。如下图所示, 当一个客户端与服务器建立连接以后,服务器端 accept()返回,进而准备循环接收客户端发过来的数据。

2024-06-06 20:53:49 1730 1

原创 代码实操学会socket网络编程

创建和管理套接字:网络编程接口提供了函数和方法,用于创建和管理套接字。开发者可以使用这些函数和方法来创建套接字对象,设置套接字的属性(如端口号、IP地址等),以及管理套接字的连接状态。监听队列有两种,一个是存放未完成三次握手的连接,一种是存放已完成三次握手的连接。例如,对于服务器端应用程序,网络编程接口提供了函数和方法来监听连接请求,接受连接并处理客户端请求。connect()方法一般由客户端程序执行,需要指定连接的服务器端的 IP 地址和端口。TCP 提供的是面向连接的、可靠的、字节流服务。

2024-06-04 20:25:23 705

原创 socket网络编程——套接字地址结构

TCP/IP 协议族有 sockaddr_in 和 sockaddr_in6 两个专用 socket 地址结构体,它们分。通常,人们习惯用点分十进制字符串表示 IPV4 地址,但编程中我们需要先把它们转化为整数方能使用。sa_family 成员是地址族类型(sa_family_t)的变量。地址族类型通常与协议族类型对应。二、专用 socket 地址结构。一、通用 socket 地址结构。三、IP 地址转换函数。

2024-06-03 19:25:42 532

原创 Linux代码实操——共享内存

所有进程都可以访问共享内存中的地址,就好像它们是由 malloc 分配的一样。如果某个进程向共享内存写入了数据,所做的改动将立刻被可以访问同一段共享内存的任何其他进程看到。共享内存为多个进程之间共享和传递数据提供了一种有效的方式。共享内存是先在物理内存上申请一块空间,多个进程可以将其映射到自己的虚拟地址空间中。下面我们来编写代码实现:进程 a 向共享内存中写入数据,进程 b 从共享内存中读取数据并显示。由于它并未提供同步机制,所以我们通常需要用其他的机制来同步对共享内存的访问。

2024-05-17 14:33:34 515

原创 linux代码实操——信号量

信号量是一个特殊的变量,一般取正数值。它的值代表允许访问的资源数目,获取资源时,需要对信号量的值进行原子减一,该操作被称为 P 操作。释放资源时,需要对信号量的值进行原子加一,该操作被称为 V 操作。信号量的值如果只取 0,1,将其称为二值信号量。如果信号量的值大于 1,则称之为计数信号量。:进程 a 和进程 b 模拟访问打印机,进程 a 输出第一个字符‘a’表示开始使用打印 机,输出第二个字符‘a’表示结束使用,b 进程操作与 a 进程相同。临界资源:同一时刻,只允许被一个进程或线程访问的资源。

2024-05-13 20:09:01 328

原创 编译链接过程

合并各个 section,调整 section 的起始位移和段大小,合并符号表,进行符号解析, 给符号分配虚拟地址;处理所有的条件预编译指令,“#if”、“#ifdef”、“#endif”等;处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置;添加行号和文件名标识,以便于编译器产生调试用的符号信息及编译时产生编译错。将汇编指令翻译成二进制格式,生成各个 section,生成符号表。删除所有的“#define”,并且展开所有的宏定义;词法分析、语法分析、语义分析,代码优化,汇总符号。

2024-05-05 15:55:29 269

原创 linux代码实操——信号的使用

在键盘上按下 Ctrl+c 时,会给当前终端前台执行的进程发送 SIGINT 信号,用 signal 修。信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。修改信号的响应方式 – signal()发送信号 – kill()

2024-05-05 15:42:53 578

原创 linux代码实操——进程ps命令详解

作用:查看系统进程,比如正在运行的进程有哪些,什么时候开始运行的,哪个用户运行的,占用了多少资源。j:显示进程归属的进程组id、会话id、父进程id。%cpu:表示进程占用了cpu计算能力的百分比。f:以ascii形式显示出进程的层次关系。%mem:表示进程占用了系统内存的百分比。tpgid:值为-1,表示进程为守护进程。-x 显示没有控制终端的进程。u:显示进程的归属用户及内存使用情况。command:表示进程的层次关系。–sort 按照列名排序。x:显示没有关联控制终端的进程。

2024-04-27 17:34:37 487

原创 linux代码实操:进程间通信——管道

管道可以用来在两个进程之间传递数据,如: ps -ef | grep “bash”, 其中‘|’就是管道,其作用就是将 ps 命令的结果写入管道文件,然后 grep 再从管道文件中读出该数据进行过滤。管道是一种半双工通信方式(通信方式有单工、半双工、全双工)进程 a 要将从键盘获取的数据循环传递给另一个进程 b。无论有名还是无名,写入管道的数据都在内存中。下面我们一起通过一个例子学习有名管道——无名管道主要应用于父子进程间的通信。有名管道可以在任意两个进程之间通信。命令创建: mkfifo FIFO。

2024-04-22 21:44:31 562

原创 linux代码实操:Makefile四个常用函数

函数名称:模式替换函数—patsubst。函数名称:取文件名函数——notdir。函数名称:获取匹配模式文件名函数—wildcard。foreach 函数:函数“foreach”不同于其它函数。它是一个循环函数。类似于 Linux 的 shell 中的 for 语句。“foreach”函数的语法: $(foreach VAR,LIST,TEXT)

2024-04-22 20:32:55 1869

原创 linux代码实操:exec系列函数进程实验

, 接着调用exec系列函数(实验中使用execl()函数), 这个函数在/bin/ls目录中搜索程序ls,然后它将会替换exec_demo本身的进程, 程序运行结果与在终端中使用以下所示的shell命令一样,如下图。前面我有一篇文章介绍到了使用fork()函数启动一个子进程,事实上,这是并没有太大作用的,因为子进程跟父进程都是一样的, 子进程能干的活父进程也一样能干,因此世界各地的开发者就想方设法让子进程做不一样的事情, 于是诞生了。, 在执行完之后,原调用进程的内容除了进程号外,其他全部。

2024-04-21 20:41:31 2111 1

原创 Makefile基础小实验练习

为了直观地演示Makefile的作用,我们使用一个示例进行讲解,首先使用编辑器创建一个名为“Makefile”的文件,输入如下代码并保存,要注意在“ls -lh”、”touch test.txt”等命令前要使用Tab键,不能使用空格代替。

2024-04-20 20:01:15 584

原创 代码实操linux命令(四):用户管理命令

系统存储用户信息的文件/etc/passwd 存储用户基本信息/etc/group 存储用户组的信息/etc/shadow 存储用户的密码添加新用户useradd newname 添加一个新的用户 newname选项: -g 执行新用户的主组-G 将新用户添加到副组-s 指定新用户默认使用的 shell 终端-d 指定新用户登录默认进入的目录创建新用户需要管理员身份,创建新用户成功后,会在/home 下生成该用户的家目录。修改用户密码。

2024-04-18 21:54:15 580 1

原创 liunx代码实操:进程管理命令

ps默认显示与当前终端有关的进程信息-e 显示系统中所有的进程信息-f 显示更多的进程属性信息(全格式)-L 显示进程中的线程 IDpstree以树状图形式显示进程之间的关系kill结束或者挂起一个进程-9 强制结束进程-stop 挂起进程pkill结束一组同名的进程后台运行程序jobs。

2024-04-17 14:50:10 493 1

原创 linux代码实操:复制进程 fork(详解及练习)

fork 函数会新生成一个进程,调用 fork 函数的进程为父进程,新生成的进程为子进程。在父进程中返回子进程的 pid,在子进程中返回 0,失败返回-1。下列程序分别输出几个“A”?父子进程并发运行的理解。

2024-04-16 20:23:10 648 1

原创 linux代码实操:用 Vi/Vim 软件编写简单的 sh 脚本

键),输入下列代码后,保存文件并退出(退出插入模。命令的作用是将其后面的文本内容直接输出到终端上。Vim 的基本操作就介绍完了,最后我们尝试用。并回车),注意以下内容全为英文符号。然后进入插入模式(在一般模式下按“i。式,进入命令行模式后,输入。此脚本文件中的 echo。的脚本,熟悉 Vim。退出后回到终端,通过。可以看到终端会输出“

2024-04-14 16:37:59 661 1

原创 代码实操liunx文件压缩与解压命令

tar将文件打包或者解包:c 创建包文件f 指定目标为文件而不是设备v 显示详细过程t 显示包中的内容而不释放x 释放包中的内容z GNU 版本新加的,使得 tar 有压缩和解压的功能下图为 tar 打包过程:

2024-04-12 12:17:19 268

原创 代码实操linux常用命令(3):vim文件编辑命令

Vim 的三种模式一般模式(normal mode):一般模式用来浏览文本,查找内容,但是不可以编辑,在该模式下的键盘输入会被当成快捷键,如复制粘贴等。打开 Vim 时,默认是工作在一般模式。插入模式(insert mode):插入模式下具有普通编辑器的功能,该模式下的键盘输入会被当 成文本内容。命令行模式(command-line mode):命令行模式支持保存、退出、替换等命令,以及 Vim 的高级功能。

2024-04-12 11:43:23 695

原创 代码实操liunx常用命令(二):文件查看命令

当一个文件的内容超过一个屏幕能显示的行数,使用 more 可以分屏显示文件内容。文本内容查看器,查看文件内容,但是文件内容不会显示到界面上.使用方式: more filename。

2024-04-11 11:53:45 313 1

原创 代码实操linux常用命令(一):基础命令

代码实操linux常用命令(一):基础命令

2024-04-11 11:39:52 322 1

原创 五分钟一串代码,学会C++继承与派生

这就是C++中的继承与派生的基本概念。需要注意的是,除了公有继承(),这些继承方式有不同的访问规则,需要根据具体的需求来选择。对象,并调用了它们的公有方法。方法,同时也可以调用它们自己特有的方法。下面是一个简单的例子,我们将定义一个基类。,并从这个基类派生出两个子类。)外,C++还支持私有继承(函数中,我们创建了一个。

2024-04-10 20:07:26 330 1

原创 多维数组的初始化及多维数组的遍历

多维数组是指数组中包含其他数组的数组。它可以理解为一个表格或者矩阵,其中的每个元素都有多个维度的索引来定位。静态初始化。动态初始化。下标遍历:多维数组可以使用嵌套的循环来实现。例如,对于一个二维数组,可以使用两个嵌套的循环来遍历每个元素:多维数组的解引用遍历可以使用指针来实现。首先定义一个指向多维数组的指针,然后使用指针进行遍历。例如,对于一个二维数组,可以使用指向整型指针的指针来进行解引用遍历:

2024-04-10 16:40:49 562 1

原创 数组的应用:冒泡排序和数组查找功能

遍历数组,逐一比较查找目标与数组元素,如果找到目标则返回其索引位置;否则返回-1表示未找到。

2024-04-08 21:36:29 328

原创 C语言编程训练——递归函数(详细解析)

2.猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。:假设有三根柱子分别为A,B,C,其中A柱上有n个盘子,如果我们要把A最下面的那个盘子拿出来放到C柱上,我们需要把上面(n-1)个盘子借助C柱全部挪到B柱上,然后将A柱上最大的盘子放到C柱,最后再将B柱上的盘子放回到C柱上。,在一根柱子上,从下往上按照大小顺序摞着n片圆盘。并且规定,在移动过程,小圆盘上不能放大圆盘,:斐波那系数是前两项加起来等于后一项:1,1,2,3,5,8,13…,当n=1或2时,返回1,然后到。

2024-04-08 21:13:11 1153

原创 C++中的“引用”

【代码】C++中的“引用”

2024-04-07 15:18:47 322

原创 C++中new和delete运算符

`delete`运算符用于释放由`new`运算符分配的内存。当使用`new`在堆上创建对象或数组后,一旦你完成了对这些内存的使用,就应该使用`delete`来释放这些内存,以防止内存泄漏。1. 使用`new`创建的任何对象或数组都必须使用`delete`或`delete[]`来释放。

2024-04-07 14:46:21 548 1

空空如也

空空如也

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

TA关注的人

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