自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux进程间通信

由于read()函数在读不到数据时会阻塞,因此我们在读数据的进程创建命名管道,并阻塞等待写数据的进程向命名管道写入数据 ,在创建命名管道时,给管道的权限建议是0600,即可读可写可执行。进程间通信一共有6种方式:无名管道、命名管道、消息队列、共享内存、信号和信号量。消息队列是一个存储信息的链表,全双工通信,即使进程终止后,数据也不会丢式。子进程在无名管道中写入信息,父进程从无名管道中读取子进程写入的信息。共享内存允许两个或多个进程共享一个给定的存储区。

2023-08-21 11:41:51 445

原创 Linux进程

程序:存储在磁盘上的某个可执行文件进程:程序被执行后称为进程命令ps -aux:查看系统中所有用户的进程状态。

2023-07-14 17:49:54 332

原创 基于树莓派4B的智能家居

本博文的智能家居使用的树莓派4B作为驱动板,当然也可以使用搭载了freeRtos的STM32驱动板,由于时间匆忙,没办法把从0到1的教程写到博文中,以后有时间的话会出一篇从0到1搭建这个智能家居的博文,到时候也会添加一些新的功能,如触摸屏、红外遥控、等等。工厂模式就最常用的设计模式之一,属于创建型模式,提供一种创建对象的最佳方式。在工厂模式中,创建对象时,不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。即工厂模式把创建对象和使用对象的两个过程分离,对于使用者无需关心对象时如何创建

2023-05-18 14:57:42 1760

原创 STM32之MPU6050获取欧拉角

mpu6050 集成了三轴 MEMS 陀螺仪,三轴 MEMS 加速度计,以及一个可扩展的数字运动处理器 DMP(Digital Motion Processor)。辅助I2C接口可以连接一个第三方的数字传感器,比如磁力计。扩展了磁力计之后就可以通过其主要I2C接口输出一个 9 轴的信号(否则只能输出一个6轴的信号)。mpu6050 也可以通过其辅助I2C接口连接非惯性的数字传感器,如压力传感器。总之,mpu6050 就是通过陀螺仪和加速度计来分别测量三轴的角速度和角加速度的数据,继而获得俯仰角(Pitch)

2023-04-19 21:17:33 4995 8

原创 STM32之增量式编码器电机测速

编码器,是一种用来测量机械旋转或位移的传感器。它能够测量机械部件在旋转或直线运动时的位移位置或速度等信息,并将其转换成一系列电信号。

2023-04-15 17:14:10 5221 2

原创 STM32之智能小车,手把手从0到1,模块化编程

本博文将会从0到1实现一个智能小车,该小车实现功能:1. 摇头避障模式、2. 跟随模式、3. 循迹模式、4. 小车测速并显示在OLED屏幕、5. 语音控制小车等等。

2023-04-01 09:43:40 9728 1

原创 51单片机之喝水提醒器

LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。字符型液晶显示模块是一种专门用于显示字母、数字和符号等的点阵式LCD,常用16×1,16×2,20×2和40×2等的模块。一般的LCD1602字符型液晶显示器的内部控制器大部分为HD44780,能够显示英文字母、阿拉伯数字、日文片假名和一般性符号。

2023-03-21 22:19:56 2894

原创 STM32之IIC

主机(MCU)设置输出1状态,此时因为MCU无法输出1,相当于释放了SDA数据线,此时外部器件可以主动拉低SDA数据线/释放SDA数据线(同样由上拉电阻提供“输出1的功能”),实现SDA数据线的高低电平变化。由于SDA引脚既要作为输出又要作为输入,我们可以将SCL引脚配置成输出引脚,SDA引脚不进行配置,在gpio.c中定义一个函数,以便随时可以修改SDA引脚为输入引脚或者输出引脚。IIC的SDA引脚既要作为输出,又要作为输入,使用开漏输出模式,很好实现了输入输出共用,避免IO模式频繁切换带来的麻烦。

2023-03-17 19:05:26 3180

原创 STM32之bxCAN

CAN(Controller Area Network),是ISO国际标准化的串行通信协议。为了满足汽车产业的“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求。低速CAN(ISO11519)通信速率10~125Kbps,总线长度可达1000米。高速CAN(经典CAN)(ISO11898)通信速率125Kbps~1Mbps,总线长度≤40米。CAN FD通信速率可达5Mbps,并且兼容经典CAN,遵循ISO11898-1 做数据收发。CAN总线以“帧”形式进行通信。

2023-03-16 17:10:35 1267

原创 STM32之ADC

ADC全称: Analog-to-Digital Converter,指模拟/数字转换器,是指将连续变化的模拟信号转换为 离散的数字信号。

2023-03-12 23:11:57 5132

原创 STM32之SPI

SPI是串行外设接口(Serial Peripherallnterface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议比如AT91RM9200。W25Q128是华邦公司推出的一款SPI接口的NOR FIash芯片,其存储空间为128 Mbit,相当于16M字节。

2023-03-11 15:28:59 3509

原创 STM32之DMA

DMA(Direct MemoryAccess,直接存储器访问)提供在外设与内存、存储器和存储器、外设与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,而不需要依赖于CPU,在这个时间中,CPU对于内存的工作来说就无法使用。

2023-03-07 19:10:30 5261

原创 STM32之关门狗

在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片俗称“看门狗“(watchdog)。

2023-03-05 18:53:07 3929 1

原创 STM32之USART

串口通信串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简 单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。设备之间的一种通信的方式(数据交互)数据只能一位一位的进行传输全双工通信数据传输速度较慢全双工通信(打电话)

2023-03-03 21:46:37 2430

原创 STM32之PWM

PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,周期是频率的倒数,如驱动sg90舵机时PWM信号的频率大概为50HZ,即周期为20ms(Tout,也就是定时时间)配置定时方式,定时时间为0.5ms(即PSC为71,ARR为499),PWM的相关信息(选择PWM模式1)由于需要手动改变PWM的占空比,所以设置为0。

2023-03-02 17:20:12 6505

原创 STM32之定时器

可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1个定时器控制另外一个定时器)16位向上、向下、向上/向下(中心对齐)自动装载计数器(TIMx_CNT)计数器从0开始计数(递增),计数到自动加载值(TIMx_ARR) - 1后。计数器从0开始计数(递增),计数到自动加载值(TIMx_ARR)后。计数器从自动加载值(TIMx_ARR)开始计数(递减),计数到0后。并从自动加载值(TIMx_ARR)开始计数(递减),计数到1后。外部时钟模式1:外部触发输入(TIMx_ETR)

2023-03-01 19:30:15 2245

原创 STM32之中断和事件

当CPU正在执行程序时,由于发生了某种事件,要求CPU暂时中断当前的程序执行,转而去处理这个随机事件,处理完以后,再回到原来被中断的地方,继续原来的程序执行,这样的过程称为中断。当检测到某一个动作的触发(电平边沿)了就会产生某种事件,如检测到了下降沿,上升沿等等。即事件是中断的触发源。

2023-02-28 20:22:05 2680

原创 认识STM32和如何构建STM32工程

单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种/0口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

2023-02-27 20:50:08 716 1

原创 STM32单片机之温湿度检测系统(DTH11、OLED、LCD1602)

用户发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集, 用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集, 如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。

2023-02-26 17:25:20 10791 1

原创 LinuxC实现FTP云盘

FTP云盘使用C语言进行编写,在ubuntu环境下运行,相关知识有Linux进程,Linux网络编程、Linux文件编程、结构体、字符串等等。返回值:如果字符串s1包含字符串s2,返回包含字符及后面字符,如果字符串s1不包含字符串s2则返回NULL。读入成功时,返回读取的字节数(如果读文件开始前光标到达文件尾端则返回0)读入失败时,返回-1。写入成功时,返回写入的字节数,写入数据为空返回0,写入失败返回-1。读入成功时,返回读取的字节数,读入失败时,返回-1。

2022-11-12 15:31:09 1935 1

原创 Java之线程

例如A线程是第一个访问这个房间的,那么A线程就直接领取房间门口的钥匙进入房间,后面的线程B和线程C也来到房间门口,但线程B和线程C需要阻塞等待(进入中断状态)线程A从房间出来归还钥匙后才能领取钥匙进入房间。创建一个Thread对象,参数target是Runnable接口类型的对象,此构造方法将实现Runnable接口的类的对象放在Thread对象中,启动线程时会执行target对象的run()方法。//设定某个线程的优先权,默认为5,最低为1,最高为10,处于就绪队列中的线程优先权越高,越先被执行。

2022-11-09 20:55:38 680

原创 Java之异常

对于某些特殊的异常时,Java类库提供的异常类无法满足我们的需求,因此我们需要自定义的异常类来处理这些特殊的异常。自定义的异常类需要继承Exception类或者Exception类衍生出来的子类。Exception类没有定义属于自己的方法,因此可以重写Throwable类(Exception类的父类)的方法来定义自己所需要的异常信息。class 自定义异常类 extends 异常类 {//程序语句}...throw 自定义异常类对象...

2022-11-06 11:18:41 708

原创 Java之继承、封装和多态

abstract class 类名称 {数据成员;普通方法{}修饰符 abstract 抽象方法;}使用interface关键字定义接口,类使用implements实现接口接口的数据成员必须赋值,编译时会变成常量不能将接口方法声明为私有接口方法interface 接口名称 {修饰符 数据成员修饰符 普通方法;}解决命名冲突的问题,同一个包中的类名不能相同将同一个类型的类集中在一个包中,让项目整体架构更清晰一个包中能存在多个.java文件。

2022-11-04 16:29:12 842

原创 Java之封装

Java程序至少由一个或一个以上的类构成,但只有一个公有类,即使用public关键字修饰的类的名称必须跟和程序文件名称一致。类是由方法成员和数据成员组成构造方法在定义类中定义类名称(参数列表){赋值语句;}

2022-10-30 22:25:32 342

原创 Java基础

新建一个Java project文件,在这个文件里面建一个class文件。在text中输入下列代码,输出haozige。

2022-10-27 21:57:00 647

原创 51单片机之智能小车(避障、跟随、循迹)

电机模块L9110S、循迹模块、红外避障模块、超声波模块、测速模块、OLED屏、蓝牙模块、4G,模块、语音模块SU-03TL0110S模块的A、B分别控制着两个电机,如果需要控制四个电机,则需要两个L0110S模块当B-1A为高电平,B-2A为低电平时,电机反转或正转当B-1A为低电平,B-2A为高电平时,电机正转反转当B-1A为低电平,B-2A为低电平时,电机不转电机的正转和反转与跟电机的接线不同而不同,注意自己调试。

2022-10-06 19:31:51 43999 17

原创 51单片机之温湿度检测系统(DTH11、OLED、LCD1602)

向OLED写入指令0x0x和0x1x,即b(0000 xxxx)或b(0001 xxxx),例如选择第1列时,写入指令0x00,即b(0000 0000)和写入指令0x10即b(0001 0000)。向OLED写入指令0x20后,继续写入指令0x0x,即b(0000 00xx),例如选择页寻址时,写入指令0x02,即b(000 0010)。向OLED写入指令0xBx,即b(1011 0xxx),例如选择Page 3时,写入指令0xB3,即b(1011 0011)。同为低电平时可以写入指令或者显示地址,当。

2022-09-29 22:12:56 10060 4

原创 51单片机之串口通信、WiFi模块、蓝牙模块、4G模块

串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简 单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成 本,特别适用于远距离通信,但传送速度较慢设备之间的一种通信的方式(数据交互)数据只能一位一位的进行传输全双工通信数据传输速度较慢全双工通信(打电话)通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的

2022-09-27 20:52:35 13383 1

原创 51单片机之感应开盖垃圾桶

当检测到有人靠近垃圾桶时,垃圾桶通过sg90舵机开盖,并让蜂鸣器叫一秒,三秒后关盖。当发生垃圾桶震动时,垃圾桶通过sg90舵机开盖,并让蜂鸣器叫一秒,三秒后关盖。(舵机的软件PWM用定时器0实现,超声波的距离检测用定时器1实现,震动传感器用外部中断1实现)

2022-09-25 20:13:27 1615

原创 51单片机之简易报警器

当433M按下A键时,将A键引脚拉高开启报警模式,此时震动传感器检测是否发生震动,当发生震动时(震动传感器的引脚检测到低电平),拉低蜂鸣器的引脚,没有震动时(震动传感器的引脚检测到高电平),拉高蜂鸣器的引脚,当433M按下B键时,将B键引脚拉高关闭报警模式。51单片机,433M无线射频信号控制器、蜂鸣器、震动传感器。

2022-09-22 20:42:00 3360

原创 树莓派4B在驱动框架下操控I/O口

内核里的代码跟应用程序的代码访问的是虚拟地址,而不是物理地址,因此我们在驱动框架访问的I/O口应该是虚拟地址,要将树莓派I/O口的物理地址映射成虚拟地址。由芯片手册得知,GPFSELn (n= 0时控制引脚0~9,n=1时控制引脚10~19,以此类推)为功能选择寄存器,由芯片手册得知,GPFSETn (n= 0时控制引脚0~31,n=1时控制引脚32~57)为输出设置寄存器,输出设置。由芯片手册得知,GPCLRn (n= 0时控制引脚0~31,n=1时控制引脚32~57)为输出设置寄存器,输出设置。

2022-09-21 17:26:16 1192

原创 Linux内核编译

对于目的平台的Linux内核的编译,一般选择交叉编译的方式,以树莓派4B为例,在Linux虚拟机上编译一个适合树莓派4B使用的Linux内核。

2022-09-20 21:57:14 3480

原创 Linux交叉编译

交叉编译是在一个平台上生成另一个平台的可执行代码,例如我们在Windows编写的C51的代码,并编译生成在C51上可执行的xxx.hex文件,这个文件是在C51上运行的而不是在Windows运行的。由于我们使用的是交叉编译链编译目的平台的可执行文件,因此当我们需要链接第三方库时,该库应该也是目的平台的第三方库,否则该交叉编译链将不认识此库,怎么使用第三方库可以看往期博文。配置好环境变量后就能在任何目录底下使用交叉编译链来编译文件了。

2022-09-20 19:34:26 762

原创 Linux内核结构与字符设备驱动

当用户态(上层应用)调用open(“/dev/xxx”,O_RDWR,0666)时,会执行一条汇编指令(swi xxx),该指令会发生一次异常,类似于中断,中断号为0x80,0x80代表发生了一次系统调用,进入了内核态,然后内核态会调用syscall(),该函数会根据open()提供的设备名(文件名)找到主设备号从而在驱动链表找到相应的驱动(即找到结构体file_operations),然后vfs调用sys_open来调用驱动的kernel_open(),write(),read()同理,syscall()

2022-09-19 21:58:36 513

原创 Linux文件系统

文件系统称为文件管理系统(是一个程序),是操作系统用于明确存储设备组织文件的方法(即磁盘如何保存文件),文件系统常规认知为根目录。nux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux。存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问。存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜。如果你的系统上有 /var/run 目录,应该让它。存储的是当前内核运行状态的一系列特殊文件。存放所有的系统管理所需要的配置文件和子。存放着最经常使用的命令。

2022-09-18 21:35:36 244

原创 Linux第三方库的使用

Linux在使用很多额外的功能时都要用到第三方库,本文将使用curl库和sqlite库两个第三方库。

2022-09-18 20:42:11 1460

原创 Linux分文件编程与Linux动态库

本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行,就是将源代码转变成二进制格式的源代码,这就是相当于是对这部分的代码进行了加密,别人可以使用这个库,但是看不见库里面的内容,不需要提供.c的分文件。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级Linux中的静态库。我们将加减乘除的功能进行划分成四个.c文件,让主程序更加简洁。在目标程序执行前(编译的时候)就加入到目标程序中去了。是在目标程序执行时动态(临时)由目标程序去调用。主函数:my_main.c。

2022-09-17 21:49:25 557

原创 TCP/IP的三次握手、四次挥手

在连接时当服务器收到客户端的SYN包连接请求后,服务器可以直接发送SYN+ACK包,ACK包用来应答,SYN包用来同步,断开连接时,服务器收到客户端的FIN包后,可能不会马上关闭服务器,只能发个ACK包用来应答,只有当服务器的数据处理完毕,服务器才会发送FIN+ACK包关闭服务器。TCP连接是全双工的,即需要client和server两端发送消息的两个方向都要连接成功,那么为了保证两端都连接成功,至少需要三次通信来建立连接,次数增多了也是在浪费资源,所以需要三次握手。

2022-09-17 16:56:14 534

原创 C语言内存管理

程序被操作系统加载到内存的时候,所有的可执行代码(函数、main函数、字符串常量等等)都会被加载到代码区,代码区这块内存在程序运行期间是不变的。)、函数形参、局部变量,栈区是一块先进后出的内存,每个线程都有专属于自己的栈,变量离开作用域后,栈上的内存会自动释放。堆区这块内存是一块比较饱满的内存,可以使用malloc()函数分配堆区的内存,使用free()释放堆区的内存。程序和程序之间的内存是独立的,不能相互访问,每个程序都有专属于他的内存四区。函数形参属于栈区,离开作用域时,栈区的内存会被释放。

2022-09-16 21:34:05 738

原创 Linux网络编程

跟文件编程中的write()没什么区别,使用accept()返回的套接字描述符。跟文件编程中的write()没什么区别,使用accept()返回的套接字描述符。跟文件编程中的read()没什么区别,使用accept()返回的套接字描述符。跟文件编程中的read()没什么区别,使用accept()返回的套接字描述符。调用成功返回套接字描述符,返回的套接字描述符用于传输数据,调用失败返回-1。调用成功返回套接字描述符,调用失败返回-1。调用成功返回套接字描述符,调用失败返回-1。

2022-09-15 20:45:54 1026

空空如也

空空如也

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

TA关注的人

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