自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(138)
  • 问答 (1)
  • 收藏
  • 关注

原创 ESP8266模块无限重启崩溃的问题

ESP8266模块无限重启崩溃

2022-11-18 18:13:51 1128 1

原创 读者写者问题

操作系统读者写者问题模拟

2022-06-08 08:31:06 421

原创 Java高级补充(Socket服务端、客户端)、Handler类、安卓Socket传数据、WebView

Socket服务端简单地API:主要用到以下几个API:ServerSocket用来设置端口号、accept用来和服务端连接、getInputStream用来获取输入流、read用来读取输入流里面的数据,存放在提前开辟好的缓冲区里面。import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;public class Main { pu

2021-11-18 20:01:11 1008

原创 Android按键响应的几种方式、安卓页面的跳转、页面跳转传参、页面自动跳转、Activity(页面)的生命周期

按键响应的第一种方式:在XML文件里面设置按键的onClick绑定函数。就像下面的代码,给Button设置onClick属性,在按键被按下的时候,会调用java文件里面的onClickbtton1这个函数,因为现已将它和这个按钮进行了绑定。利用布局文件中的onClick属性,并在实现文件中实现该方法。注意的是这里的方法名应该和布局文件中onClick属性的方法名相同,该方法必须是public方法。 <Button android:id="@+id/btn1"

2021-11-14 21:32:12 1311 2

原创 Android相对布局(RelativeLayout)常用属性、练习使用按键、文本框等控件、线性布局(LinearLayout)属性

RelativeLayout中子控件常用属性:子控件默认是从父控件的左上角开始排列的相对于父控件 android:layout_alignParentTop="true" 和父控件的顶部对齐 android:layout_alignParentBottom="true" 和父控件的底部对齐 android:layout_alignParentRight="true" 和父控件的右端对齐 android:layout_alignParentLeft="true" 和父控件的

2021-11-12 12:06:35 4472

原创 安卓App的启动过程、安卓布局分类及布局和页面的关系

Android App 启动流程:当你想要启动一个app时,首先得点击该app桌面图标。那点击图标时到底发生了什么呢?先看个理论知识.Launcher: launcher其实就是一个app,从功能上说,是对手机上其他app的一个管理和启动,从代码上说比其他app多了一个属性,就是在AndroidManifest.xml文件中多了一个< category android:name="android.intent.category.HOME" />属性,这个属性就是在启动系统或者按Home键时

2021-10-31 20:50:10 1969

原创 eclipse安卓工程的构建、配置连接模拟器、安卓工程结构介绍

安卓工程构建及第一个安卓程序运行:首先新建安卓工程:然后填写APP信息,下面的包名一般都是公司域名的倒写,包名中不能有中文,否则会报错。然后配置一些安卓app的选项有关app启动的图标(就像QQ的企鹅一样)的设置选择app的界面(刚开始学习就选择空的界面就行,以免有些看不懂的代码):设置工程里面界面文件和布局文件的名称如图下面就构建了一个安卓工程:构建模拟器的运行环境:运行安卓程序:然后他会提示你,没有目标的设备被发现,是否要新建模拟器,我们选择NO,因为eclip

2021-10-26 20:57:06 1509

原创 java泛型、泛型类及特点、限制泛型、类型通配符声明、泛型方法

java泛型:泛型简介泛型类限制泛型可用类型类型通配声明泛型方法问题: 如果我们需要产生多个对象,每个对象的逻辑完全一样,只是对象内的成员变量的类型不同。那我们该如何去做?如果按照正常的做法就要创建多个类文件,给每个类中的成员变量设置指定的数据类型。这样做的缺点: 这样会导致类膨胀,重用太差。解决方法: 创建一个类文件,给这个类中2成员变量设置Object(是所有类的父类)数据类型。 缺点: 编译的时候正常,但运行的时候可能会出现异常。因为Object导致整个类对变量的属性很模糊。面对这样

2021-10-26 00:27:59 860

原创 多态的概念、对象上下转型、多态的应用、异常(异常概念、异常分类、java异常处理机制、try...catch...finally、throw和throws、自定义异常)

多态的概念:多态性是指同一个操作作用于某一类对象,可以有不同的解释,产生不同的执行结果。多态存在的三个必要条件: ① 需要存在继承或实现关系 ② 同样的方法调用而执行不同的操作、运行不同代码(重写) ③ 在运行时父类或者接口的引用变量可以引用其子类的对象。多态的作用: ① 多态通过分离做什么和怎么做,从一个角度将接口和实现进行分离。 ② 多态消除了类型之间的耦合关系 ③ 多态的存在提高了程序的拓展性和后期的可维护性。abstract class Animal{ abstract void e

2021-10-22 21:40:37 187

原创 继承的概念和实现 、 super关键字 、 Object常见方法、抽象类、接口、模板方法模式、成员内部类、匿名内部类

This关键字:

2021-10-21 20:44:29 224

原创 JAVA SE、EE、ME,JRE、JDK,基本数据类型,访问修饰符、函数、封装的概念、UML类图、构造方法、this关键字、static关键字、方法重载、方法重写、包(packahe)

运行第一个JAVA程序:这里使用的开发环境是eclipse,新建一个java工程,然后可以看到src这个是存放java代码的地方,然后在src文件右击新建一个class(类),然后可以看到下图,同样和C语言一样java语言也有main函数,只是写法不一样,java语言的main函数写法如下,同时java里面的打印函数和C语言也不一样,java语言用的是System.out.println,如下图进行打印,然后运行输出hello worldJAVA SE、EE、ME的区别:Java SE(Jav

2021-10-18 22:04:28 398

原创 opensll、libcurl库安装的使用,树莓派CSI摄像头的配置,树莓派调用智能API平台实现人脸识别、树莓派配置中文环境

接着上一节人工智能翔云平台介绍:人工智能OCR识别: OCR 是英文Optical Character Recognition的缩写,意思是光学字符识别,也可简单地称为文字识别,是文字自动输入的一种方法。它通过 扫描 和摄像等光学输入方式获取纸张上的文字图像信息,利用各种 模式 识别算法分析文字形态特征 可以将票据、报刊、书籍、文稿及其它印刷品转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术。可应用于银行票据、大量文字资料、档案卷宗、文案的录入和处理领域。适合于银行、税务等行业大

2021-10-09 17:54:51 1515

原创 libcurl库的安装和使用

libcurl简介:libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。libcurl的官网 、库下载。这种库使用的时候就像使用wiringPi库一样,编写完代码需要链接这个库,所以要先下载这个库。libcurl的使用(其实和socket编程时一样,

2021-10-03 18:39:10 22030 4

原创 http、https、密码学基础、GET和POST区别

http协议相关:http协议的特性: http协议是建立在TCP/IP协议之上应用层协议,默认端口为80或者8080。http协议的的特点是无状态,无连接(并不是真的没有连接,而是在请求数据的时候有连接,在数据回来的时候就断开连接,不想tcp那样是一个长连接)http协议的请求: 利用抓包工具httpwatch可以获取报文,http协议的报文传输的是ASCII码,在TCP/IP协议之上,主要主要分为三部分:请求行、请求头、请求体请求行: 第一行,包含三个信息:请求方式,url,http协议版本

2021-10-03 16:17:04 461

原创 TCP三次握手、四次挥手、socket,tcp,http三者之间的区别和原理

接着上一篇文章叙述:TCP/IP连接(在互联网的通信中,永远是客户端主动连接到服务端):手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。建立起一个TCP连接需要经过“三次握手”:第一次握手: 客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)第二次握

2021-10-03 11:35:25 303

转载 七层网络模型、TCP/IP四层模型、网络数据包、交换机路由器区别

七层网络模型(简称OSI模型):OSI 模型(Open System Interconnection model)是一个由国际标准化组织提出的概念模型,试图供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的接口。了解 OSI 模型有助于理解实际上互联网络的工业标准——TCP/IP 协议。OSI 模型各层间关系和通讯时的数据流向如图所示:七层模型介绍:显然、如果一个东西想包罗万象、一般时不可能的;在实际的开发应用中一般时在此模型的基础

2021-10-03 09:58:29 1100

原创 智能家居代码构建编写、简单工厂模式、树莓派摄像头视频监控功能实现

根据上一节内容的代码框架开始编写代码:首先编写controlDevices.h这个头文件里面的代码,这个是设备工厂每一个结点的结构体类型,而且还要在这个头文件里面进行函数的声明,也就是创建的那些设备.c文件里面的函数(为了将设备添加至设备链表的函数),其中这个头文件里面的结构体内容根据功能提前设定。同样然后再编写inputCommand.h这个头文件里面的内容,这个是指令工厂里面的头文件,也是指令链表里面的每一个结点的类型。编写完这两个头文件,然后再进行设备工厂设备文件、指令工厂指令文件和main.c文件

2021-10-02 18:52:40 4800

原创 智能家居项目开发准备工作

智能家居功能细节拆分:控制端支持语音设备的输入(用到之前所学习的LD3320语音识别模块)或者是socket客户端(这个客户端可以是ftp项目的客户端也可以是Android的app),主控芯片是树莓派,既接收语音模块的控制指令还可以接收来自客户端网络TCP的指令,然后树莓派编写程序时,会编写两个线程(一个用于语音模块串口线程、一个用于客户端线程),然后树莓派会通过IO的高低电平来控制继电器进而控制不同房间的灯的亮灭。同样是通过IO口的输入功能来检测火焰传感器电平的高低判断进而驱动蜂鸣器是否发出警报。还有就

2021-10-01 15:39:56 2492

原创 vim模式下报错E37: No write since last change No write since last change for buffer “ “

报错如下图所示:网上的解决方法:文件为只读文件,无法修改。使用命令:w!强制存盘即可在vim模式下,键入以下命令::w!存盘后在使用vim命令检查是否保存,如未保存,编辑后重复以上操作。或者报出linux中vi保存文件时的“Can’t open file for writing”E212: Can’t open file for writingPress ENTER or type command to continue出现这个错误的原因可能有两个:一是当前用户的权限不足,二是此文件可

2021-09-27 21:35:57 11760 1

原创 大学慕课数据结构单元测试——华中科技大学

第一章绪论单元测试一、单选(2分)1、​___C__ 是数据的最小单位。 A.信息项 B.数据元素 C.数据项 D.表元素 2、​以下说法不正确的是 ___B___。 A.数据元素是数据的基本单位 B.数据项可由若干个数据元素构成 C.数据可由若干个数据元素构成 D.数据项是不可分割的最小标识单位 3、‌数据结构是指 __C____ 的集合以及它们之间的关系。 A.数据 B.计算方法 C.数..

2021-09-26 22:10:12 4670 2

原创 树莓派IO口驱动代码的编写、微机总线地址、物理地址、虚拟地址、BCM2835芯片手册

地址总线:百度百科解释: 地址总线 (Address Bus;又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。CPU寻找外部的内存单元靠的是地址总线传输的数据。 如果CPU有8根地址总线,每根线上传输0或1,那么传输的数据范围为00000000~ 11111111,每一个数值都对应内存中的一个内存单元,所以可以找到编号为00000000~ 11111111号的内存单元。如果传输的数据为 001

2021-09-24 20:13:59 867

原创 linux驱动(驱动编译、字符设备驱动框架、交叉编译树莓派驱动、树莓派驱动本地编译)

用户态:是指用户编写程序、运行程序的层面,用户态在开发时需要C的基础和C库,C库讲到文件,进程,进程间通信,线程,网络,界面(GTk)。C库(是linux标准库一定有):就是Clibary,提供了程序支配内核干活的接口,调用的open,read,write,fork,pthread,socket由此处封装实现,由写的应用程序调用,C库中的各种API调用的是内核态,支配内核干活。内核态:用户要使用某个硬件设备时,需要内核态的设备驱动程序,进而驱动硬件干活,就比如之前文章里面所提到的wiringPi

2021-09-20 21:34:59 426

原创 文件系统(文件系统目录结构、磁盘分区、虚拟文件系统)、linux内核结构框图

什么是文件系统?常规认知就是根目录下那些文件,但其实并不是那样。文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。也指用于存储文件的磁盘或分区,或文件系统种类。因此,可以说"我有2个文件系统"意思是他有2个分区,一个存文件,或他用 “扩展文件系统”,意思是文件系统的种类。 比如在linux源码下文件下的文件系统代码存放在fs文件夹(

2021-09-13 19:33:37 6727

原创 linux内核开发基础(linux内核源码、树莓派源码编译、SD卡挂载)

首先下载树莓派linux内核源码:下载网址:https://github.com/raspberrypi/linux在树莓派使用指令:uname -r查看当前树莓派的版本号,然后选择对应的linux内核版本号进行下载。将linux内核源码从共享文件夹拷贝到SYSTEM文件夹:cp linux-rpi-4.19.y.zip /home/fhn/SYSTEM/然后使用指令对该压缩文件进行解压:unzip linux-rpi-4.19.y.zip树莓派等芯片带操作系统的启动过程:对于X86架构

2021-09-12 21:09:55 1006

原创 交叉编译、软硬链接

什么是交叉编译?交叉编译是一个行为,是在一个平台上生成另一个平台上的可执行代码。本地编译:本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于本地编译:比如,我们在 x86 平台上,编写程序并编译成可执行程序。这种方式下,我们使用 x86 平台上的工具,开发针对 x86 平台本身的可执行程序,这个编译过程称为本地编译。交叉编译:交叉编译可以理解为,在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该

2021-09-10 19:21:04 525

原创 LD3320语音识别模块二次开发及与树莓派间的通讯

实物图如下:

2021-09-08 17:25:19 3081

原创 树莓派GPIO口的使用(外设相关开发WringPi库的使用,超声波、继电器)

fhmhf

2021-08-16 15:43:40 2167

原创 Linux库概念及相关编程(动态库、静态库、环境变量)

分文件编程:好处:分模块编程思想,功能和责任划分清楚便与调试,main函数简洁,代码易于阅读。编程时头文件有的是使用<>这个符号括起来的,有的是" "使用的是双引号,使用尖括号括起来默认从/user/include/下面去找头文件或者是/user/local/include/下面去找,而使用双引号是默认从当前文件路径去找。一个小栗子(两个数相加):mainadd.c文件#include<stdio.h>#include"addfunc.h"int main()

2021-08-11 18:18:38 360

原创 树莓派入门(树莓派登录的几种方式)

什么是嵌入式?嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统。国内普遍认同的嵌入式系统定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等要求严格的专用计算机系统。从应用对象加以定义来说,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。事实上,所有带有数字接口的设备,如:手表、微波炉、录像机、汽车,机器人等,都使用嵌入式系统,有些嵌入式系统还包含操作系统。学习过

2021-08-10 17:23:33 1547 4

原创 python基础(文件、异常、模块、类、对象)

小甲鱼干货文件:打开文件使用open函数,open()的第一个参数是:要打开文件的路径,如果只传入文件名那么将在当前文件下查找文件并打开。第二个参数是:文件的打开模式,其他参数都是默认的。文件的打开模式如下图所示:f=open('C:\\Users\\Lenovo\\Desktop\\test.txt','r')f#这个f是文件对象<_io.TextIOWrapper name='C:\\Users\\Lenovo\\Desktop\\test.txt' mode='r' encodi

2021-07-15 16:26:46 314

原创 python基础:序列(列表、元组、字符串)、函数、字典、集合

Python语言运行环境:windowslinuxunixMacos等等博客记录内容:Python3的所有语法、面向对象思维、运用模块进行编程、游戏编程、计算机仿真。Python是什么类型的语言:Python是脚本语言,脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序。以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则,基于这项原则,使得脚本语言通常比 C语言、C++语言 或 Java 之类的系统编程语言要简单容易

2021-07-14 10:26:59 825

原创 简单的ftp服务器(客户端、服务器端、socket)

查看本机IP地址:127.0.0.1服务器功能:可以获取服务器文件使用get指令可以展示服务器有哪些文件使用ls指令进入服务器某个文件夹使用指令cd+文件夹名称上传本地文件到服务器,使用指令putpwd可以查看客户端在当前服务器的位置客户端本地功能:lls查看客户端本地文件lcd+文件名,进入客户端某个文件lpwd可以查看当前客户端自己的路径写代码的时候要写一个功能编译验证一下,不要把所有功能都写完后再编译验证,不容易调试。项目学习补充:read是有返回值n的,如果

2021-07-10 22:42:43 1079 3

原创 linux网络编程、socket编程

进程间通信:特点:依赖于内核,造成缺陷——无法实现多机通信。网络:地址:由IP地址(IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。)和端口号构成(所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号 ,端口包括逻辑端口和物理端口两种类型),

2021-07-07 23:35:38 348 5

原创 linux线程(互斥锁、条件)

线程概念:典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。进程是程序执行时的一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位。在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。首先Linux并不存在真正的线程,Linux的线程是使用进程模

2021-07-06 20:56:53 687 3

原创 进程间通信IPC(二)(共享内存、信号、信号量)

共享内存:共享内存就是允许两个或多个进程共享一定的存储区。就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。因为数据不需要在客户机和服务器端之间复制,数据直接写到内存,不用若干次数据拷贝,所以这是最快的一种IPC。注意:共享内存并未提供同步机制,也就是说,在第一个进程结束对共享内存的写操作之前,并无自动机制可以阻止第二个进程开始对它进行读取。所以我们通常需要用其他的机制来同步对共享内存的访问,例如:信号量。

2021-07-04 15:50:40 704 2

原创 Program terminated with signal SIGSEGV, Segmentation fault.

问题:在程序运行时出现了:Segmentation fault (core dumped),分段故障(堆芯转储)也就是段错误。我首先在一篇博客上面找到如何使用gdb调试:1、首先使用ulimit -a查看你的core file size是否为0.如果不是的话就请跳到步骤3, 如果是的话,请接着看下面的步骤。2、然后使用ulimit -c 1024命令修改core file size。这里我们暂且把修改为1024吧。不放心的话可以再使用ulimit -a查看core file size。3、下面再

2021-07-04 10:29:17 18792 5

原创 进程间通信IPC(一)(半双工管道和消息队列)

引言:之前学习的进程之间交换信息的方法只能由fork或exec传送打开文件,或者文件系统。但是这种通讯方式有局限性,接下来将说明进程之间相互通信的其他技术——IPC(InterProcessCommunication),过去UNIX系统IPC是各种进程间通信方式的统称,但是,其中极少能在所有UNIX系统中实现移植。随着POSIX和Open Group(以前是X/Open)标准化的推进和影响扩大,情况随已得到改善,但是差别仍然存在。以下将介绍几种实现所支持的不同形式的IPC。单机版进程间通信方式:半双

2021-07-02 13:25:44 592

原创 exec族函数、system函数、popen函数、PATH

exec族函数函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序(在exec都后面的代码不会被得到执行)。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。exec族函数功能:在调用进程内部执行一个可执行文件。可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。函数族:exec函数族分别是:execl, execlp, execle, execv, execvp, e

2021-06-29 23:44:49 527 2

原创 fork、vfork、wait、waitpid

fork函数:一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。#include <sys/types.h>#include <unistd.h&g

2021-06-28 22:47:45 385

原创 进程相关概念、C程序的空间分配

进程的定义:“进程”是操作系统的最基本、最重要的概念之一。但迄今为止对这一概念还没有一个确切的统一的描述。下面给出几种对进程的定义描述。进程是程序的一次执行。进程是可以并行执行的计算。进程是一个程序与其使用的数据在处理机上顺序执行时发生的活动。进程是程序在一个数据集合上的运行过程。它是系统进行资源分配和调度的一个独立单位。进程的特征:动态性:是程序的一次执行;发性:进程是可以并发执行;独立性:是系统进行资源分配和调度的一个独立单位;异步性:进程间的相互制约,使进程执行具有间隙;结构性:进程

2021-06-28 13:07:03 367

空空如也

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

TA关注的人

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