自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 抽象类和接口

一、抽象类概念和作用1.抽象类Java中可以定义没有方法体的方法,该方法由子类来具体实现。该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类。2.抽象方法的特点3.抽象类的特点abstract class Demo1{ //抽象类 abstract public void printInfo(); //抽象方法}class Demo2 extends Demo1{ public void printInfo() { // TODO Auto-generate

2021-05-30 22:40:11 112

原创 Java继承

一、Java继承的概念和实现继承的概念生活中,继承的概念随处可见继承需要符合的关系:is - a;父类更通用更抽象,子类更特殊更具体继承背后额思想就是 基于已存在的类来构建新类;当已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求;约定:从其他类导出的类叫做子类,被导出的类叫做父类;在Java中,除了Object类之外,所以类都是子类,都只有唯一的父类。继承在OOP中不可或缺;创建一个类时,总是在继承;继承的意义:代码重用、体现不同抽象层次;父子类关系

2021-05-24 12:15:06 150 1

原创 Java封装

一、封装的概念将东西包在一起,然后以新的完整形式呈现出来将方法和字段一起包装到一个单元中,单元以类的形式实现信息隐藏,隐藏对象的实现细节,不让外部直接访问到将数据和方法包装进类中,加上具体的实现的隐藏(访问修饰符),共同被称作封装,其结果是一个同时带有特征和行为的数据类型定义类、定义其属性、方法的过程称为封装类1.封装类及类的使用class Student{ int age; String name; double score; void introduce(){ //方法=函数

2021-05-17 17:42:32 606

原创 Java如何从键盘上获取数据

import java.util.Scanner; //包public class Test { public static void main(String[] args) { //输入,C语言中使用SCANF Scanner sc = new Scanner(System.in); //Ctrl+Shift+o来导包,初始化类 int a; String str; float f; double d; System.out.println("请输入一个整数:");

2021-05-14 12:09:05 1098

原创 用C语言的思想学习Java的数组、函数

一、Java的数组和C基本一样,稍微区别public class Test { public static void main(String[] args) { int i; int a[] = {1,2,3}; //java的数组的定义,[]之间不能有具体的个数 int b[] = new int[3]; //Java空数组的定义方式1 int c[] = null; //Java空数组的定义方式2 c = new int[3]; //Java数组的遍

2021-05-14 10:58:50 287 7

原创 用C的思想学习Java的基本数据类型、选择控制、循环控制

public class Test { public static void main(String[] args) { //main int a = 10; int b = 20; int c = a + b; float f = (float)0.1; double d = 3.14159; System.out.println("a="+a); //printf("a=%d",a); System.out.println("b="+b); //printf("b=%

2021-05-13 22:31:58 77

原创 字符驱动代码的编写

#include <liunx/fs.h> //file_operations声明#include <linux/module.h> //module_init,module_exit声明#include <liunx/init.h> //__init,__exit,宏定义声明#include <liunx/device.h> //class,device声明#include <liunx/uaccess.h> //copy_

2021-05-11 13:03:35 134

原创 驱动的认知

Linux一切皆文件文件设备:鼠标、键盘、 LED、屏幕、flash、内存、网卡open如何区分文件名设备号(主设备号、次设备号)readwrite调用过程1.添加驱动1.设备名2.设备号3.设备驱动函数:操作寄存器来驱动I/O口2.调用驱动...

2021-05-11 13:03:16 497

原创 内核结构框图

2021-05-11 11:58:35 127

原创 浅谈JavaSE、JavaEE、JavaME、JRE、JDK

Java SE最标准的Java语言;可以理解为:C语言第一阶段。Java EE多了一些API,这些API用来搞服务器;可以理解为:Liinux的C。Java ME面向嵌入式设备;可以理解为:嵌入式的C,例如SMT32单片机。JREJava运行时,支持Java程序运行的环境;Java之所以可以跨平台就是因为有了它JDKJDK全称Java Development ToolKit,是Java语言开发工具包。JDK是整个Java的核心,包括了Java运行环境(Java

2021-05-11 00:24:07 230

原创 内核驱动代码的测试

1.打开树莓派2.加载内核驱动sudo insmod pin4driver.ko3.查看驱动是否装入成功lsmod4.查看是否生成pin4ls /dev/pin45.查看内核态打印的东西dmesg

2021-05-10 21:34:14 135

原创 内核驱动代码的编译

1.打开Linux内核的源码树目录,进到drivers驱动目录地下,选择字符性目录cd /home/lxy/SYSTEM/linux-rpi-4.14.ycd driverscd char2.拷贝写好的代码 cp ~/pin4driver.c .3.修改Makefilevi Makefile模块化编译obj-m += pin4driver.o4.回到Linux内核的源码树目录cd ..5.内核编译ARCH=arm C

2021-05-10 21:26:36 268

原创 文件系统

一、什么是文件系统?常规认知: 根目录。文件系统是操作系统用于明确存储设备组织文件的方法。以上说的方法:就是文件管理系统(程序),简称文件系统二、文件系统(文件管理系统的方法)的种类有哪些?FAT、VFAT、NTFS、EXT1/2/3/4、HFSvfat:boot(bootloader, kernel);ext4:根目录;tmpfs:内存文件系统。树莓派查看文件系统的命令:df -T三、什么是分区?1.windows:随意(面向普通用户PC),目录即分区。C(装系统的位置)也可

2021-05-10 17:31:52 119

原创 树莓派Linux内核编译及烧入

树莓派Linux内核编译1.编译使用下面这条指令:ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbsj4:指定用多少电脑资源进行编译;zImage:生成内核镜像;modules:要生成驱动模块;dtbs:生成配置文件注:编译之前,交叉编译工具链和Linux源码配置都得先做好,如果运行10秒左右就出错,说明前面哪些步骤没做对。判断编译是否成功:编译成功后,看到源码

2021-05-10 17:14:29 349 1

原创 树莓派Linux源码配置

树莓派Linux源码配置为什么要进行Linux源码配置?答:内核相关的人员会从事驱动代码的编写——>驱动代码的编译需要一个提前编译好的内核 ——> 编译内核就必须配置配置的最终目标是什么?答:生成 .config文件,该文件指导Makefile去把有用东西组织成内核。内核的配置方式厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码第一种方式: cp 厂家.config .config第二种方式: make menuconfig 一项项配置,

2021-05-09 12:36:33 122 2

原创 树莓派Linux源码目录树分析(扫盲)

树莓派Linux源码目录树分析Linux内核大约1.3w个C文件,1100w行代码。Linux是开源,免费,LInux开源社区工作者共同维护,爱好Linux是一个开源的,支持多架构多平台代码——非常牛逼可执行非常高但是Linux内核编译出来一般就几M因为支持多平台,多架构,所以编译之前要配置,配置成适合的目标平台来用ARM:海思,友善之臂,RK,树莓派,nanoPiX86PowerPCMIPS...

2021-05-08 20:18:51 142

原创 树莓派等芯片带操作系统的启动过程(扫盲)

树莓派等芯片带操作系统的启动过程C51,STM32(裸机)C直接操控底层寄存器实现相关业务——业务流程型的裸机代码遥控灯: while(1)垃圾桶:WemosD1 LOOP恩智浦智能车: stm32windows:X86,Intel启动过程: 电源 ——>BIOS ——>windows内核——>C,D盘——>程序启动(QQ)嵌入式产品:树莓派,mini2440,mini6410,nanopi,海思,RK(瑞芯微)…启动过程: 电源——>BootLoad

2021-05-08 20:17:16 175

原创 树莓派交叉编译(二)——交叉编译工具链的安装

一、交叉编译工具链的安装使用到的工具链:tools-master1.从共享文件夹拷贝到工作目录 cp /mnt/hgfs/share/tools-master.zip2.解压unzip tools-master.zip3.进入下面这个路径cd tools-master/cd arm-bcm2708/cd gcc-linaro-arm-linux-gnueabihf-raspbian-x64/cd bin4. pwd获得当前路径/home/CLC/lessonPI/tools-m

2021-05-08 20:12:38 221

原创 树莓派交叉编译(一)——基本概念

一、交叉编译的基本概念1.编译是什么?答:编译是在一个平台上生成在该平台上的可执行代码。2.交叉编译是什么?答:交叉编译是在一个平台上生成另一个平台上的可执行代码。例如:我们在windows上面编写C51代码,并编译成可执行代码,如xx.hex。是在c51上面运行,不是在windows上面运行。我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out。是在树莓派上面运行,不是在ubuntu的linux上面运行。3.为什么要交叉编译?答:平台上不允许或不能够安装我们所需要

2021-05-08 20:10:49 68

原创 树莓派和语音模块实现语音设别功能

一、硬件模块化的开发(常用)语音模块AT指令——GPS模块AT指令版本的语音模块——M6语音模块中国的嵌入式开发中以下这些合作方式经常存在:人脸识别打卡器 虹膜识别(购买)语音识别(购买)车牌识别(购买)华为手机(购买京东方)OPPO手机(购买了华为5g方案)YS-LDV7语音模块开发流程:void ExtInt0Handler(void) interrupt 0 中断处理函数当LD3320识别成功后,会引发IO口中断nAsrRes = LD_GetResult(); /

2021-05-05 16:49:24 567 1

原创 树莓派的串口通信

一、串口通信——多机通信的概述不管是软件,还是硬件,都有模块化思想多机通讯(全双工)数据格式:数据位、停止位、奇偶校验位——语言波特率——语速全双工:一个男的和一个女人吵架,两个人可以互骂。半双工:男骂女的时候女的不能讲话,女骂男的时候男的不能讲话,双方同一时刻只有一个人可以讲话。二、树莓派的串口通信主要API打开并初始化串口#include <wiringSerial.h>int serialOpen (char *device, int baud);返回

2021-05-04 22:48:02 354

原创 树莓派控制超声波测距

一、超声波模块介绍超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接受。电路板上有4个引脚:VCC(正极)、Trig(触发)、Echo(回应)、GND(接地),主要参数:工作电压与电流:5V,15mA感测距离:2~400cm感测角度:不大于15°被测物的面积不要小于50cm²,并且尽量平整具备温度补偿电路工作原理:在超声波模块的触发脚位输入10微秒以上的高电位,即可发射超声波,发射超声波之后,与接收到传回的超声波之前,“响应”脚位呈现高电位。因此,程序可从“响应”脚位

2021-05-04 18:16:35 1167

原创 如何轻松搭建Java安卓开发环境

一、Java安卓开发环境的搭建1.解压下面这个文件夹。2.双击进入解压好的文件夹,并继续双击进去入“eclipse”文件夹。3.找到eclipse.exe这个程序,并将这个程序发送到桌面,Java安卓开发环境搭建完成。二、运行第一句Java语句:Hello Wrold1.打开eclipse软件,看到下面这个界面2.在左边的工程目录窗口中,右击选择NEW,接着选择Java Project,输入工程名称,然后点击Finish3.在左边的工程目录窗口中,找到Java第一个测试工程下的src

2021-05-03 21:41:58 399 1

原创 嵌入式为什么要学习Java?

一、嵌入式为什么要学习Java?纯粹是为了安卓系统二、2009~2017年的系统UI:1.纯裸机:C语言(图形+触摸)2.操作系统(OS): Linux :C语言:gtk、miniguiC++:QT——(老产品)三、为什么要学习Java的安卓?嵌入式的大环境美观(用户体验);趋势;开源...

2021-05-03 20:42:03 460

原创 树莓派控制继电器

一、GPIO控制函数1.配置引脚的I/O模式void pinMode (int pin, int mode);参数解释:pin:配置的引脚;mode:指定引脚的I/O模式,可取的值:INPUT、OUTPUT,PWM_OUTPUT,GPIO_CLOCK。注意:只有wiringPi 引脚编号下的1脚(BCM下的18脚) 支持PWM输出;只有wiringPi编号下的7(BCM下的4号)支持GPIO_CLOCK输出。2.让对一个已近配置为输出模式的引脚输出指定的电平信号void digit

2021-05-03 17:20:40 291

原创 树莓派外设开发编程

一、树莓派的接口1.树莓派的接口:驱动1.I/O口:input,output 对主控来说Input:人体,烟雾,火焰,震动等Output:继电器,蜂鸣器2.PWM:电机调速,灯光调明亮度语音识别模块,液晶屏:3.串口uart4.IIC5.SPI6.IIS7.其他特定硬件的接口:flash2.树莓派的相同平台Nanopi:LinuxS3c2410,2440,6410Tiny210,Tiny4412海思方案,瑞芯微方案,移远方案3.没有操作系统(Linux)C51,stm32

2021-05-03 14:47:23 143

原创 Linux库概念及相关制作和使用

一.介绍使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries)。Linux中命名系统中共享库的规则1.静态函数库(

2021-05-02 19:08:41 56

原创 Linux——分文件编程案例

分文件编程好处:分模块的编程思想功能责任划分方便调试主程序简洁主文件:main.c#include <stdio.h> #include "suanfa.h"int main() //程序主入口函数 { int data1; int data2; int ret; float retFloat; printf("请输入第一个数:\n"); scanf("%d",&data1); printf("请输入第二个数:\n"); scanf("%d",

2021-05-02 18:05:57 127 1

原创 一招快速解决树莓派和windows之间文件共享

准备软件使用方式1.主机:sftp://+树莓派ip地址2.用户名:树莓派名称3.密码:树莓派登录密码4.点击“快速连接”就可以将树莓派和windows连接5.直接拖动文件想要共享的文件就可以轻松实现树莓派和windows之间共享...

2021-05-02 17:25:55 633

原创 树莓派开发——基础配置

一、树莓派刷机1.刷机前的准备使用下面这个刷机软件使用下面这个刷机固件包2.刷机过程打开刷机软件,将SD卡插入读卡器,并插上电脑;点击文件夹的位置,找到要刷机的固件包;点击“write”,就开始刷机(大约5分钟左右)。二、树莓派登录1.通过HDMI视频线,连接到显示器登录树莓派2.通过串口登录树莓派1.设备破解默认情况,树莓派的串口和蓝牙连接。想办法断开蓝牙连接,把串口用来数据通信。使用修改系统配置,启用串口登录树莓派打开SD卡根目录的"config.txt"文件,将以

2021-05-02 16:42:54 116

原创 网络编程(四)——HTTP、HTTPS协议

一、HTTP协议HTTP协议是明文传输的,因此很容易被截取和解析,泄漏个人数据。1.HTTP协议的特性HTTP协议是建立在TCP/IP协议之上应用层协议,默认端口为80,8080。2.HTTP协议的请求HTTP协议的请求包括:请求行、请求头、请求体请求行HTTP协议的请求分为:GET请求和POST请求。通过请求行(请求方式,url,HTTP协议版本)可以判断属于哪种请求方式区别:url可见性:get:url可见;post;url不可见。数据传输:get:通过拼接ur

2021-05-02 12:20:44 104

原创 网络编程(三)——Socket、TCP、HTTP三者之间的区别和原理

一、七层网络模型(OSI模型)应用层:HTTP、HTTPS表示层:会话层:Socket传输层:TCP、UDP网络层:数据链路层:物理层:二、TCP/IP连接1.建立起一个TCP连接需要经过“三次握手”第一次握手:客户通过调用connect向服务器发出连接请求报文段(SYN=1,seq=x),客户端进入SYN_SEND(同步发送)状态。SYN=1:建立连接请求控制段;seq=x:表示传输的报文段的第1个数据字节的序列号是x,此序列号代表整个报文段的序号。第二次握手:服务器收

2021-05-01 21:15:36 276

原创 网络编程(二)——服务器和客户端的实现

本文继网络编程(一)继续学习一、Socket服务器和客户端的开发步骤创建Socket套接字为套接字添加信息(IP地址和端口号)监听网络连接监听到有客户端接入,接受一个连接数据交互关闭套接字二、网络编程的主要API1.指定讲“汉语”(连接协议)——创建套接字int socket (int domain,int type,int protocol) ;参数解释:domain:指明所使用的协议族,通常为AF_INET ,表示互联网协议族( TCP/IP协议族) ;AF_INET

2021-05-01 17:12:37 512

原创 网络编程(一)

一、网络编程需要关心的1.地址:IP地址:ftp,http,socket端口号2.数据:协议(数据格式):HTTP,TCP/UDP二、Socket套接字的协议1.TCP面向连接(2个人打电话)连接可靠精细操作,很多控制2.UDP面向报文(2个人发短信)连接不可靠数据量大(如视屏聊天)内存响应快3.TCP/UDP具体对比TCP面向连接(如打电话要先拨号建立连接) ;UDP是无连接的,即发送数据之前不需要建立连接。TCP提供可靠的服务。也就是说,通过TCP连接

2021-05-01 16:39:05 99

原创 线程(三)——条件操作

本文继线程(一)、(二)继续学习线程一、与条件相关的API1.创建条件变量int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);动态初始化: pthread_cond_init(&cond, NULL);静态初始化:pthread_cond_t = PTHREAD_COND_INITIALIZER;2.销毁条件变量int pthread_cond_de

2021-04-27 11:05:55 117

原创 线程(二)——互斥锁操作

本文继线程(一)继续学习线程一、互斥量(互斥锁)互斥量就是一把锁,对锁的操作有加锁操作和解锁操作,加锁和解锁之间所包含的代码叫做共享资源。每个线程在对共享资源操作前都尝试先加锁,成功加锁才能操作,操作结束后解锁。注:同一个时刻,只能有一个线程持有该锁。当A线程对某个全局变量加锁访问,B在访问前尝试加锁,拿不到锁,B阻塞。C线程不去加锁,而直接访问该全局变量,依然能够访问,但会出现数据混乱。二、与互斥锁相关API1.创建互斥锁int pthread_mutex_init(pthread_mute

2021-04-25 12:34:26 464

原创 线程(一)——线程的操作

一、Linux线程介绍1.进程与线程进程是程序执行时的一个实例,它用来分配系统资源(CPU时间、内存等)。在面向线程设计的系统中,进程是线程的一个容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效

2021-04-24 13:14:17 199

原创 进程间的通信(三)——信号、信号量

本文继进程间的通信(一)、(二)继续学习一、信号对于 Linux来说,是一个很重要的异步通信概念1.信号的概述信号的名字和编号:每个信号都有一个名字和编号,这些名字都以“SIG”开头,例如“SIGIO ”、“SIGCHLD”等等。信号名称可以使用kill -l来查看信号的名字以及序号:信号的处理:信号的处理有三种方法,分别是:忽略、捕捉和默认动作。忽略信号,有两种信号不能被忽略(分别是SIGKILL和SIGSTOP)。因为他们向内核和超级用户提供了进程终止和停止的可靠方法,如果忽略了,

2021-04-22 22:05:45 445

原创 进程间的通信(二)——消息队列、共享内存

本文继进程间的通信(一)继续学习一、消息队列消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。1.特点消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。2.函数原型创建或打开消息队列:成功返回队列ID,失败返回-1int msgget(key_t key, int flag

2021-04-21 14:40:50 145

原创 进程间的通信(一)——管道(无名管道、命名管道)

进程间通信(IPC)介绍进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、共享存储、信号、信号量、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。本文主要讲解单机通信,以Linux中的C语言编程为例。一、管道(无名管道)管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。1.特点它是半双工的(即数据只能在一个方向上流

2021-04-20 22:41:00 256

空空如也

空空如也

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

TA关注的人

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