<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[weixin_64685646的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/weixin_64685646</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; weixin_64685646]]></copyright><item><title><![CDATA[ESP32通过TTL转RS485接口和风速风向变送器，检测风速风向数据（vs code附完整代码）]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/140858108</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/140858108</guid><author>weixin_64685646</author><pubDate>Fri, 09 Aug 2024 00:46:48 +0800</pubDate><description><![CDATA[我们学校生产实习项目之一——智能环境节点检测，我负责本模块的开发。这是我第一次遇到单片机TTL转RS485模块，其中的难点在ESP32上通过ttl转rs485接口实现串口接收modbus格式的数据。编写代码以解析Modbus数据帧，提取风速和风向数据。将解析后的风速和风向数据进行处理和显示，风速单位为m/s，风向为16方位法如N(北风)，NNE（东北偏北风），NE(东北风)等。将代码封装成头文件和接口函数，使用者调用函数即可实现功能。]]></description><category></category></item><item><title><![CDATA[proteus仿真c51单片机（四）双机串口通信（电路设计及代码）]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/141003984</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/141003984</guid><author>weixin_64685646</author><pubDate>Wed, 07 Aug 2024 23:54:55 +0800</pubDate><description><![CDATA[1.通过甲机的按键给乙机发送控制字符，同时也可以实现乙机给甲机发送控制字符2．用PROTEUS软件根据所给电路画出电路图，用KEIL软件调试程序和编译，最后在PROTEUS软件中实现仿真。3.甲乙两个单片机通过串口进行通信，甲机用一按键向乙机发送控制命令，乙机根据收到的控制命令字符完成各种功能。1、打开PROTEUS软件选取元件，连线绘制电路图。2、打开KEIL软件编制程序进行调试、编译。3、将编译的HEX代码装入PROTEUS软件绘制的电路图的单片机中。]]></description><category></category></item><item><title><![CDATA[proteus仿真c51单片机（三）多定时任务的编程——时分秒发生器]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/141003858</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/141003858</guid><author>weixin_64685646</author><pubDate>Wed, 07 Aug 2024 23:41:09 +0800</pubDate><description><![CDATA[1、打开PROTEUS软件选取元件，连线绘制电路图。2、打开KEIL软件编制程序进行调试、编译。3、将编译的HEX代码装入PROTEUS软件绘制的电路图的单片机中。4、仿真运行观察实验现象，若与要求的实验现象不同，检查程序和电路图找出错误。5、将编译好的HEX文件用单片机编程器下载进单片机，并在实验板电路上运行观察实验现象。]]></description><category></category></item><item><title><![CDATA[proteus仿真c51单片机（二）中断控制流水灯（电路设计及代码）]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/140940199</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/140940199</guid><author>weixin_64685646</author><pubDate>Tue, 06 Aug 2024 00:34:54 +0800</pubDate><description><![CDATA[8路流水灯，K1和K2都未按下时，主程序执行LED流水灯程序，K1按下时，左右4只LED交替闪烁，K2按下时8只LED全部闪烁4次，设置外部中断1为高优先级。5、将编译好的HEX文件用单片机编程器下载进单片机，并在实验板电路上运行观察实验现象。中断允许寄存器IE中，中断允许控制寄存器IP，定时器/计数器控制寄存器TCON。4、仿真运行观察实验现象，若与要求的实验现象不同，检查程序和电路图找出错误。3、将编译的HEX代码装入PROTEUS软件绘制的电路图的单片机中。]]></description><category></category></item><item><title><![CDATA[proteus仿真c51单片机（一）流水灯程序（电路设计及代码）]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/140939997</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/140939997</guid><author>weixin_64685646</author><pubDate>Tue, 06 Aug 2024 00:24:46 +0800</pubDate><description><![CDATA[利用PROTEUS电路设计与仿真软件和KEIL软件进行51单片机开发，是我大二时接触嵌入式的入门，Proteus为单片机开发入门者提供了一个方便、高效、低成本的学习和开发平台。通过使用Proteus，可以更容易地掌握单片机开发的相关知识和技能。以下分享我在Proteus和keil下完成的第一个实验——流水灯，接下来我还会分享这个系列我做过的中断、计时器和双机通信实验。我在这里只分享我的电路设计和代码设计、实现，Proteus和keil使用方法请大家自行查询（教程网上很多）。]]></description><category></category></item><item><title><![CDATA[socket网络编程——多进程、多线程处理并发]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/139509336</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/139509336</guid><author>weixin_64685646</author><pubDate>Thu, 06 Jun 2024 20:53:49 +0800</pubDate><description><![CDATA[如果客户端暂时没发数据，服务端会在 recv()阻塞。此时，其他客户端向服务器发起连接后，由于服务器阻塞了，无法执行 accept()接受连接，也就是其他客户端发送的数据，服务器无法读取。服务端接受一个客户端的连接后，创建一个线程或者进程，然后在新创建的线程或进程中循环处理数据。主线程（父进程）只负责监听客户端的连接，并使用 accept()接受连接,不进行数据的处理。如下图所示， 当一个客户端与服务器建立连接以后，服务器端 accept()返回，进而准备循环接收客户端发过来的数据。]]></description><category></category></item><item><title><![CDATA[代码实操学会socket网络编程]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/139452788</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/139452788</guid><author>weixin_64685646</author><pubDate>Tue, 04 Jun 2024 20:25:23 +0800</pubDate><description><![CDATA[创建和管理套接字：网络编程接口提供了函数和方法，用于创建和管理套接字。开发者可以使用这些函数和方法来创建套接字对象，设置套接字的属性（如端口号、IP地址等），以及管理套接字的连接状态。监听队列有两种，一个是存放未完成三次握手的连接，一种是存放已完成三次握手的连接。例如，对于服务器端应用程序，网络编程接口提供了函数和方法来监听连接请求，接受连接并处理客户端请求。connect()方法一般由客户端程序执行，需要指定连接的服务器端的 IP 地址和端口。TCP 提供的是面向连接的、可靠的、字节流服务。]]></description><category></category></item><item><title><![CDATA[socket网络编程——套接字地址结构]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/139422404</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/139422404</guid><author>weixin_64685646</author><pubDate>Mon, 03 Jun 2024 19:25:42 +0800</pubDate><description><![CDATA[TCP/IP 协议族有 sockaddr_in 和 sockaddr_in6 两个专用 socket 地址结构体，它们分。通常，人们习惯用点分十进制字符串表示 IPV4 地址，但编程中我们需要先把它们转化为整数方能使用。sa_family 成员是地址族类型（sa_family_t）的变量。地址族类型通常与协议族类型对应。二、专用 socket 地址结构。一、通用 socket 地址结构。三、IP 地址转换函数。]]></description><category></category></item><item><title><![CDATA[Linux代码实操——共享内存]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/139003719</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/139003719</guid><author>weixin_64685646</author><pubDate>Fri, 17 May 2024 14:33:34 +0800</pubDate><description><![CDATA[所有进程都可以访问共享内存中的地址，就好像它们是由 malloc 分配的一样。如果某个进程向共享内存写入了数据，所做的改动将立刻被可以访问同一段共享内存的任何其他进程看到。共享内存为多个进程之间共享和传递数据提供了一种有效的方式。共享内存是先在物理内存上申请一块空间，多个进程可以将其映射到自己的虚拟地址空间中。下面我们来编写代码实现：进程 a 向共享内存中写入数据，进程 b 从共享内存中读取数据并显示。由于它并未提供同步机制，所以我们通常需要用其他的机制来同步对共享内存的访问。]]></description><category></category></item><item><title><![CDATA[linux代码实操——信号量]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/138817330</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/138817330</guid><author>weixin_64685646</author><pubDate>Mon, 13 May 2024 20:09:01 +0800</pubDate><description><![CDATA[信号量是一个特殊的变量，一般取正数值。它的值代表允许访问的资源数目，获取资源时，需要对信号量的值进行原子减一，该操作被称为 P 操作。释放资源时，需要对信号量的值进行原子加一，该操作被称为 V 操作。信号量的值如果只取 0,1，将其称为二值信号量。如果信号量的值大于 1，则称之为计数信号量。：进程 a 和进程 b 模拟访问打印机，进程 a 输出第一个字符‘a’表示开始使用打印 机，输出第二个字符‘a’表示结束使用，b 进程操作与 a 进程相同。临界资源：同一时刻，只允许被一个进程或线程访问的资源。]]></description><category></category></item><item><title><![CDATA[编译链接过程]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/138467880</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/138467880</guid><author>weixin_64685646</author><pubDate>Sun, 05 May 2024 15:55:29 +0800</pubDate><description><![CDATA[合并各个 section，调整 section 的起始位移和段大小，合并符号表，进行符号解析， 给符号分配虚拟地址；处理所有的条件预编译指令，“#if”、“#ifdef”、“#endif”等;处理“#include”预编译指令，将被包含的文件插入到该预编译指令的位置;添加行号和文件名标识，以便于编译器产生调试用的符号信息及编译时产生编译错。将汇编指令翻译成二进制格式，生成各个 section，生成符号表。删除所有的“#define”，并且展开所有的宏定义;词法分析、语法分析、语义分析，代码优化，汇总符号。]]></description><category></category></item><item><title><![CDATA[linux代码实操——信号的使用]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/138467467</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/138467467</guid><author>weixin_64685646</author><pubDate>Sun, 05 May 2024 15:42:53 +0800</pubDate><description><![CDATA[在键盘上按下 Ctrl+c 时，会给当前终端前台执行的进程发送 SIGINT 信号，用 signal 修。信号是系统响应某个条件而产生的事件，进程接收到信号会执行相应的操作。修改信号的响应方式 – signal()发送信号 – kill()]]></description><category></category></item><item><title><![CDATA[linux代码实操——进程ps命令详解]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/138253612</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/138253612</guid><author>weixin_64685646</author><pubDate>Sat, 27 Apr 2024 17:34:37 +0800</pubDate><description><![CDATA[作用：查看系统进程，比如正在运行的进程有哪些，什么时候开始运行的，哪个用户运行的，占用了多少资源。j:显示进程归属的进程组id、会话id、父进程id。%cpu:表示进程占用了cpu计算能力的百分比。f:以ascii形式显示出进程的层次关系。%mem:表示进程占用了系统内存的百分比。tpgid:值为-1，表示进程为守护进程。-x     显示没有控制终端的进程。u:显示进程的归属用户及内存使用情况。command:表示进程的层次关系。–sort     按照列名排序。x:显示没有关联控制终端的进程。]]></description><category></category></item><item><title><![CDATA[linux代码实操：进程间通信——管道]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/138093012</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/138093012</guid><author>weixin_64685646</author><pubDate>Mon, 22 Apr 2024 21:44:31 +0800</pubDate><description><![CDATA[管道可以用来在两个进程之间传递数据，如： ps -ef | grep “bash”, 其中‘|’就是管道，其作用就是将 ps 命令的结果写入管道文件，然后 grep 再从管道文件中读出该数据进行过滤。管道是一种半双工通信方式（通信方式有单工、半双工、全双工）进程 a 要将从键盘获取的数据循环传递给另一个进程 b。无论有名还是无名，写入管道的数据都在内存中。下面我们一起通过一个例子学习有名管道——无名管道主要应用于父子进程间的通信。有名管道可以在任意两个进程之间通信。命令创建： mkfifo FIFO。]]></description><category></category></item><item><title><![CDATA[linux代码实操：Makefile四个常用函数]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/138089693</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/138089693</guid><author>weixin_64685646</author><pubDate>Mon, 22 Apr 2024 20:32:55 +0800</pubDate><description><![CDATA[函数名称：模式替换函数—patsubst。函数名称：取文件名函数——notdir。函数名称：获取匹配模式文件名函数—wildcard。
foreach 函数：函数“foreach”不同于其它函数。它是一个循环函数。类似于 Linux 的 shell 中的 for 语句。
“foreach”函数的语法： $(foreach VAR,LIST,TEXT)]]></description><category></category></item><item><title><![CDATA[linux代码实操：exec系列函数进程实验]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/138044220</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/138044220</guid><author>weixin_64685646</author><pubDate>Sun, 21 Apr 2024 20:41:31 +0800</pubDate><description><![CDATA[， 接着调用exec系列函数（实验中使用execl()函数）， 这个函数在/bin/ls目录中搜索程序ls，然后它将会替换exec_demo本身的进程， 程序运行结果与在终端中使用以下所示的shell命令一样，如下图。前面我有一篇文章介绍到了使用fork()函数启动一个子进程，事实上，这是并没有太大作用的，因为子进程跟父进程都是一样的， 子进程能干的活父进程也一样能干，因此世界各地的开发者就想方设法让子进程做不一样的事情， 于是诞生了。， 在执行完之后，原调用进程的内容除了进程号外，其他全部。]]></description><category></category></item><item><title><![CDATA[Makefile基础小实验练习]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/138009220</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/138009220</guid><author>weixin_64685646</author><pubDate>Sat, 20 Apr 2024 20:01:15 +0800</pubDate><description><![CDATA[为了直观地演示Makefile的作用，我们使用一个示例进行讲解，首先使用编辑器创建一个名为“Makefile”的文件，输入如下代码并保存，要注意在“ls -lh”、”touch test.txt”等命令前要使用Tab键，不能使用空格代替。]]></description><category></category></item><item><title><![CDATA[代码实操linux命令（四）：用户管理命令]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/137938697</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/137938697</guid><author>weixin_64685646</author><pubDate>Thu, 18 Apr 2024 21:54:15 +0800</pubDate><description><![CDATA[系统存储用户信息的文件/etc/passwd 存储用户基本信息/etc/group 存储用户组的信息/etc/shadow 存储用户的密码添加新用户useradd newname 添加一个新的用户 newname选项： -g 执行新用户的主组-G 将新用户添加到副组-s 指定新用户默认使用的 shell 终端-d 指定新用户登录默认进入的目录创建新用户需要管理员身份，创建新用户成功后，会在/home 下生成该用户的家目录。修改用户密码。]]></description><category></category></item><item><title><![CDATA[liunx代码实操：进程管理命令]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/137872663</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/137872663</guid><author>weixin_64685646</author><pubDate>Wed, 17 Apr 2024 14:50:10 +0800</pubDate><description><![CDATA[ps默认显示与当前终端有关的进程信息-e 显示系统中所有的进程信息-f 显示更多的进程属性信息（全格式）-L 显示进程中的线程 IDpstree以树状图形式显示进程之间的关系kill结束或者挂起一个进程-9 强制结束进程-stop 挂起进程pkill结束一组同名的进程后台运行程序jobs。]]></description><category></category></item><item><title><![CDATA[linux代码实操：复制进程 fork（详解及练习）]]></title><link>https://blog.youkuaiyun.com/weixin_64685646/article/details/137838475</link><guid>https://blog.youkuaiyun.com/weixin_64685646/article/details/137838475</guid><author>weixin_64685646</author><pubDate>Tue, 16 Apr 2024 20:23:10 +0800</pubDate><description><![CDATA[fork 函数会新生成一个进程，调用 fork 函数的进程为父进程，新生成的进程为子进程。在父进程中返回子进程的 pid，在子进程中返回 0，失败返回-1。下列程序分别输出几个“A”？父子进程并发运行的理解。]]></description><category></category></item></channel></rss>