树莓派基础之外设开发编程

2023-11-10

一、树莓派外设开发接口

树莓派的接口

对主控芯片来说有:
IO口(输入输出口):input output
Input:人体,烟雾,火焰,震动
Output:继电器,蜂鸣器

PWM(增强性IO口):电机调速,灯光调明亮度
其他串口:
uart,IIC,SPI,IIS
其他特定硬件接口:
flash

还有像树莓派一样要跑操作系统的芯片:
Nanopi:linux
S3c2410 2440 6410
Tiny210 tiny4412
海思方案,瑞芯微方案,移远方案
带有操作系统的芯片一般都会讲到驱动

不带操作系统的芯片:
C51,STM32,Arduino,WemosD1:没用OS(linux)

二、树莓派wiringPi库

1)树莓派的wiringPi库:
wiringPi库就好比 linux的动态库.so,静态库.a
也好比C语言里面的include<stdio.h> 的标准库
wiringPi库里面的API就好比include<stdio.h>里面的printf

2)wiringPi库不是树莓派自带的,是特定平台,特定功能的接口库。也就是别人已经给你封装好了,直接调用库里面的API就行,记得编译的时候要带 -lwiringPi

3)检查一下树莓派是否有下载这个wiringPi库:

gpio -v

在这里插入图片描述

4)硬件初始化,wiringPiSetup函数:

#include<wiringPi.h>
#include<stdio.h>
int main()
{
    int ret;
    ret = wiringPiSetup();
    if(ret == -1){
       printf("初始化失败!\n");
       return -1;
    }
    return 0;
}

在这里插入图片描述

5)树莓派wiringPi库参考博文

三、树莓派控制继电器

1)先查看下树莓派板上信息:

gpio readall

在这里插入图片描述
2)继电器的接口有三个,GND,IN,VCC
它的驱动电压是3.3v
所以正极(VCC) 接树莓派的3.3v
接地(GND) 接树莓派的0v
信号传输(IN)接 gpio口

接好后写代码:

#include<wiringPi.h>
#include<stdio.h>

#define SWITCHER 7
int main()
{
        int cmd;

        if(wiringPiSetup() == -1){
                printf("初始化失败!\n");
                return -1;
        }

        pinMode(SWITCHER,OUTPUT);
        digitalWrite(SWITCHER,HIGH);

        while(1){
                printf("请输入0/1:0-断开开关,1-导通开关!\n");
                scanf("%d",&cmd);
                getchar();
                if(cmd == 1){
                        digitalWrite(SWITCHER,LOW);
                }else if(cmd == 0){
                        digitalWrite(SWITCHER,HIGH);
                }
                 cmd = 10;
        }
        return 0;
}

运行结果可以:
在这里插入图片描述

四、继电器组硬件控制开发

1)树莓派和继电器组的接线:
在这里插入图片描述
VCC正极接 5V
GND接地接 0V
IN1-IN4(信号) 接 GPIO.29 - GPIO.26

2)写代码测试下:

#include<wiringPi.h>
#include<stdio.h>
#include<string.h>

#define  SWI1 29
#define  SWI2 28
#define  SWI3 27
#define  SWI4 26

int main()
{
        char cmd[12] = {'\0'};

        if(wiringPiSetup() == -1){
                printf("初始化失败!\n");
                return -1;
        }

        pinMode(SWI1,OUTPUT);
        pinMode(SWI2,OUTPUT);
        pinMode(SWI3,OUTPUT);
        pinMode(SWI4,OUTPUT);

        digitalWrite(SWI1,HIGH);
        digitalWrite(SWI2,HIGH);
        digitalWrite(SWI3,HIGH);
        digitalWrite(SWI4,HIGH);

        while(1){
                printf("请输入1-4 on/off 或者 all on/all off。off-断开开关,on-导通开关!\n");
                memset(&cmd,0,sizeof(cmd));
                gets(cmd);

                if(strcmp(cmd,"1 on") == 0){
                        digitalWrite(SWI1,LOW);
                }else if(strcmp(cmd,"1 off") == 0){
                        digitalWrite(SWI1,HIGH);
                }
                if(strcmp(cmd,"2 on") == 0){
                        digitalWrite(SWI2,LOW);
                }else if(strcmp(cmd,"2 off") == 0){
                        digitalWrite(SWI2,HIGH);
                }
                if(strcmp(cmd,"3 on") == 0){
                        digitalWrite(SWI3,LOW);
                }else if(strcmp(cmd,"3 off") == 0){
                        digitalWrite(SWI3,HIGH);
                }
                if(strcmp(cmd,"4 on") == 0){
                        digitalWrite(SWI4,LOW);
                }else if(strcmp(cmd,"4 off") == 0){
                        digitalWrite(SWI4,HIGH);
                }
                if(strcmp(cmd,"all on") == 0){
                        digitalWrite(SWI1,LOW);
                        digitalWrite(SWI2,LOW);
                        digitalWrite(SWI3,LOW);
                        digitalWrite(SWI4,LOW);       
                }else if(strcmp(cmd,"all off") == 0){
                        digitalWrite(SWI1,HIGH);
                        digitalWrite(SWI2,HIGH);
                        digitalWrite(SWI3,HIGH);
                        digitalWrite(SWI4,HIGH);
                }

        }

        return 0;
}                                

运行结果正常:
在这里插入图片描述

五、超声波模块介绍

在这里插入图片描述

超声波传感器模块上通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有4个引脚:VCC(正极),Trig(触发),Echo(回应),GND(接地),主要参数:

工作电压与电流:5V,15mA
感测距离:2-400cm
感测角度:不大于15°
被测物的面积不要小于50cm²,并且尽量平整
具备温度补偿电路

在超声波模块的触发脚位输入10微秒以上的高电位,即可发射超声波,发射超声波之后,与接收到传回的超声波之前,“脚位” 呈现高电位。因此,程序可从 “响应” 脚位的高电位脉冲持续时间,换算出被测物的距离。

在这里插入图片描述
参考博文

写代码前,想了解下需要用到的函数:

1)pinmode

void pinMode (int pin, int mode)

pin:配置的引脚
mode:指定引脚的IO模式
可取的值:INPUT、OUTPUT、PWM_OUTPUT,GPIO_CLOCK
作用:配置引脚的IO模式

注意:
只有wiringPi 引脚编号下的1脚(BCM下的18脚) 支持PWM输出

只有wiringPi编号下的7(BCM下的4号)支持GPIO_CLOCK输出

2)digitalWrite

void digitalWrite (int pin, int value)

pin:控制的引脚
value:引脚输出的电平值。

可取的值:HIGH,LOW分别代表高低电平
让对一个已近配置为输出模式的 引脚 输出指定的电平信号

3)digitalRead

int digitalRead (int pin)

pin:读取的引脚

返回:引脚上的电平,可以是LOW HIGH 之一
读取一个引脚的电平值 LOW HIGH ,返回
返回值也可以是1 / 0(当输入信号电压在0~1.16 V时该函数返回0,当输入信号在1.83~3.3 V时返回1。如果输入电压在1.16~1.83 V之间不确定会返回0还是1。)

4)delayMicroseconds

delayMicroseconds (unsigned int howLong)

将线程暂停指定的微秒数(1000微妙=1毫秒=0.001s),因为Linux是多线程的,所以实际暂停的秒数可能比设置的更多一些

5)gettimeofday

gettimeofday(struct timeval *, struct timezone *);

这个函数函数返回的是1970年0:00:00到现在经过的秒数,函数的正常传入时需要用到两个参数。功能是得到当前时间和时区,分别写到tv和tz中,如果tz为NULL则不向tz写入。

6)struct timeval结构体

#include <sys/time.h>
 struct timeval
           {
           time_t tv_sec;  //Seconds. 
           suseconds_t tv_usec;  //Microseconds. 
           };

这个结构体也是linux内核中的,直接调用就好了,接的包含头文件。tv_sec为Epoch到创建struct timeval时的秒数,tv_usec为微秒数,即秒后面的零头。

7)代码:

#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>

#define Trig    7  
#define Echo    0  

void CSBInit(void)
{
        pinMode(Echo, INPUT);  //设置端口为输入
        pinMode(Trig, OUTPUT);  //设置端口为输出
}

float disMeasure(void)
{
        struct timeval tv1;  //timeval是time.h中的预定义结构体 其中包含两个一个是秒,一个是微秒
        /*
           struct timeval
           {
           time_t tv_sec;  //Seconds. 
           suseconds_t tv_usec;  //Microseconds. 
           };
           */

        struct timeval tv2;
        long start, stop;
        float dis;

        digitalWrite(Trig, LOW);
        delayMicroseconds(2);
                
        digitalWrite(Trig, HIGH);
        delayMicroseconds(10);      //发出超声波脉冲  
        digitalWrite(Trig, LOW);

        while(!(digitalRead(Echo) == 1));
        gettimeofday(&tv1, NULL);           //获取当前时间 开始接收到返回信号的时候 

        while(!(digitalRead(Echo) == 0));
        gettimeofday(&tv2, NULL);           //获取当前时间  最后接收到返回信号的时候
        
        start = tv1.tv_sec * 1000000 + tv1.tv_usec;   //微秒级的时间  
        stop  = tv2.tv_sec * 1000000 + tv2.tv_usec;

        dis = (float)(stop - start) / 1000000 * 34000 / 2;  //计算时间差求出距离  

        return dis;
}
int main(void)
{
        float dis;

        if(wiringPiSetup() == -1){ //如果初始化失败,就输出错误信息 程序初始化时务必进行
                printf("setup wiringPi failed !");
                return 1;
        }

        CSBInit();

        while(1){
                dis = disMeasure();
                printf("distance = %0.2f cm\n",dis);
                delay(1000);
        }

        return 0;
}

运行结果:
在这里插入图片描述
根据返回的秒数计算出微秒数
start = tv1.tv_sec * 1000000 + tv1.tv_usec;

stop = tv2.tv_sec * 1000000 + tv2.tv_usec;

我们知道 timeval结构体中含有两个变量,tv_sec表示的是秒数,1秒=1000000微妙,第二个参数tv_usec表示的就是微秒数,所以通过这两个式子我们就求出了开始和结束时的微秒数,然后做差即可得到超声波传递所使用的时间

根据时间计算距离
(stop - start) / 1000000 * 34000 / 2

因为stop和start原本表示的微妙,所以做差之后处1000000换算回是多少秒。因为声音在物质中的传播受到物质材质的影响,这里我们暂且不考虑介质的种类,默认为声音是在空气中传播,所以取声音的速度为340m/s=34000cm/s,因为超声波测距的误差较小的范围200-300cm,所以我们这里计算速度时用cm表示。

六、串口通信协议概述

1.串口通信
a)串口通信适用于多机通信

b)串口通信是通信方式属于全双工的(两个人互相骂)

c)串口通信关心的是数据格式波特率
数据格式:数据位,停止位,奇偶效验位

2.初次使用树莓派串口编程,需要配置:

a)修改cmdline.text文件

sudo vi /boot/cmdline.txt

b)进入后修改删除红色括号的内容:
在这里插入图片描述

2.串口通信编程:
因为Linux一切皆文件,所以串口也是以文件的方式存放在树莓派中,所以我们调用串口通信的函数要包含头文件include<wiringSerial.h>

串口通信的函数有很多,我们实现简单的串口通信编程,要用到以下函数:

1)

int serialOpen (char *device, int baud)

device:串口的地址,在Linux中就是设备所在的目录。
默认一般是"/dev/ttyAMA0",我的是这样的。

baud:波特率
返回:正常返回文件描述符,否则返回-1失败。

功能:打开并初始串口

2)

void serialClose (int fd)

fd:文件描述符
功能:关闭fd关联的串口

3)

int   serialDataAvail (int fd)

fd:文件描述符
返回:串口缓存中已经接收的,可读取的字节数,-1代表错误

功能:获取串口缓存中可用的字节数。

4)

void  serialPuts (int fd, char *s)

fd:文件描述符
s:发送的字符串,字符串要以’\0’结尾

功能:发送一个字符串到串口

5)

int serialGetchar (int fd)

fd:文件描述符
返回:读取到的字符

功能:从串口读取一个字节数据返回。
如果串口缓存中没有可用的数据,则会等待10秒,如果10后还有没,返回-1
所以,在读取前,做好通过serialDataAvail判断下。

6)

void  serialPutchar (int fd, unsigned char c)

fd:文件描述符
c:要发送的数据

功能:发送一个字节的数据到串口

7)

size_t read(int fd,void * buf ,size_t count);

fd:文件描述符
buf:接受的数据缓存的数组
count:接收的字节数.
返回:实际读取的字符数。

这个是Linux下的标准IO库函数,需要包含头文件#include <unistd.h>
当要接收的数据量过大时,wiringPi建议使用这个函数。

8)

size_t write (int fd,const void * buf,size_t count)

fd:文件描述符
buf:需要发送的数据缓存数组
count:发送buf中的前count个字节数据
返回:实际写入的字符数,错误返回-1

这个是Linux下的标准IO库函数,需要包含头文件#include <unistd.h>
当要发送到的数据量过大时,wiringPi建议使用这个函数。

9)简单测试下:

#include<wiringPi.h>
#include<wiringSerial.h>

int main()
{
    int fd;
    wiringPiSetup();

    fd = serialOpen("/dev/ttyAMA0",9600);

    while(1){
         serialPutchar(fd,'c');
         serialPuts(fd,"i am handsome\r\n");
         delayMicroseconds(1000000);

    }
    serialClose(fd);
    return 0;
}

运行结果:
在这里插入图片描述

10)

#include<wiringPi.h>
#include<wiringSerial.h>

int main()
{
    int fd;
    int cmd;
    wiringPiSetup();

    fd = serialOpen("/dev/ttyAMA0",9600);

    while(1){
           while(serialDataAvail(fd) != -1){
                 cmd = serialGetchar(fd);
                 if(cmd == '2'){
                       serialPuts(fd,"i am handsome2\r\n");
                 }
                 if(cmd == '3'){
                       serialPuts(fd,"i am handsome3\r\n");
                 }
                 if(cmd == '4'){
                       serialPuts(fd,"i am handsome4\r\n");
                 }
           }

    }
    serialClose(fd);
    return 0;
}

运行结果:
在这里插入图片描述

七、树莓派和语音模块的综合应用

1)语音模块自身有源码,上次根据需求我们改了一些代码,实现的功能是当我们说开灯,语音模块识别后会往串口打印出相应的数据。
那么我们把语音模块连接树莓派,树莓派打开串口功能,当我们去给语音模块收到数据的时候,语音模块就会往树莓派的串口输入收到的数据,我们就可以通过树莓派串口打印出相应的数据。

2)树莓派和语音模块接线:
树莓派的TXD 接 语音模块的RXD
树莓派的RXD 接 语音模块的 TXD
树莓派的0V 接 语音模块的GND
树莓派的5v 接语音模块的5v

3)代码编程:

#include<stdio.h>
#include<wiringPi.h>
#include<wiringSerial.h>
#include<unistd.h>
#include<string.h>
int main()
{

    int fd;
    char cmd[128] = {'\0'};
    int nread;

    wiringPiSetup();
    fd = serialOpen("/dev/ttyAMA0",9600);
    if(fd == -1){
       printf("串口打开失败!\n");
    }
    
    while(1){
             nread =  read(fd,cmd,sizeof(cmd));
             if(strlen(cmd) == 0){
                printf("超时!\n");
                continue;
             }
             printf("读到%d个字节\n",nread);

             if(strstr(cmd,"open") != NULL){
                printf("open light\n");
             }
             if(strstr(cmd,"close") != NULL){
                printf("close light\n");
             }
                memset(cmd,'\0',sizeof(cmd)/sizeof(char));
    }

    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树莓派基础之外设开发编程 的相关文章

  • 单片机FLASH操作

    FLASH 操作 查看程序已经占用的FLASH的扇区 剩余的扇区就是可以操作而不会使程序发生错乱的区域 找到listing文件夹下面的 map文件 搜索Memory Map of the image 查看占用的内存 起始地址是 0x8000
  • IIC UART SPI通信协议介绍

    UART 通用一部收发器 是一种通用的串行 异步通信总线该总线有两条数据线 可以实现全双工的发送和接收 在嵌入式系统中常用于主机与辅助设备之间的通信 波特率 波特率用于描述UART通信时的通信速度 单位为bps bit per second
  • 45_SDIO基础知识

    目录 SDIO协议简介 SDIO设备分类 SD卡物理结构 SD卡寄存器列表 SDIO总线拓扑 SDIO总线 SDIO总线协议 SDIO命令 命令格式 命令类型 响应 SD卡的操作模式 卡识别模式 数据传输模式 STM32 SDIO功能框图
  • FM33A048B调试特性

    调试特性 处理器支持以下调试特性 程序的暂停 恢复及单步执行 访 问内核寄存器和特殊寄存器 硬件断点 4 个 软件断点 不限数量的 BKPT 指令 数据监视点 1 个 动态非侵入式存储器访问 无需停止处理器 SWD 接口 Cortex M0
  • 基本定时器

    include stm32f4xx h LED灯初始化 void LED Init void GPIO InitTypeDef GPIO InitStructure RCC AHB1PeriphClockCmd RCC AHB1Periph
  • 【工具使用】STM32CubeMX-基础定时器配置

    一 概述 无论是新手还是大佬 基于STM32单片机的开发 使用STM32CubeMX都是可以极大提升开发效率的 并且其界面化的开发 也大大降低了新手对STM32单片机的开发门槛 本文主要讲述STM32芯片的定时器的配置及其相关知识 二 软件
  • MSP430F5529库函数——模数转换模块(ADC12)软件触发

    需提前观看 MSP430F5529库函数学习 串口 目录 代码 ADC初始化部分 引脚复位 ADC12 A init 函数声明 baseAddress sampleHoldSignalSourceSelect clockSourceSele
  • MN316 OpenCPU丨Flash使用介绍

    在MN316 标准版SDK中 定义了操作模组内置flash接口 用户可操作空间为64KB 分为16个block 每个block大小为4KB 用户如有操作flash的需求 可调用相关接口 FOTA使用流程解析 以下流程图为使用 MN316 O
  • 134-基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真+源程序...

    资料编号 134 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 ds1302时钟 DHT11温湿度 电机 蜂鸣器 制作一个基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真 2 通过DH
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • 548、基于51单片机的比赛计分仿真设计(简易,LCD1602,独立按键)

    毕设帮助 开题指导 技术解答 有偿 见文末 目录 一 设计功能 二 proteus仿真 三 原理图 四 程序源码 五 资料包括 一 设计功能 二 proteus仿真 三 原理图 四 程序源码 五 资料包括
  • linux使用文件描述符0、1和2来处理输入和输出

    文件描述符012 在Linux中 文件描述符0 1和2分别代表标准输入 stdin 标准输出 stdout 和标准错误 stderr 它们用于处理进程的输入和输出 文件描述符0 stdin 文件描述符0是进程的标准输入 通常用于读取用户的输
  • MAX31865硬件和程序攻坚

    MAX31865硬件和程序攻坚 中文数据手册 STM32H库与工程文件创建 模块硬件部分 温度数据准确性 中文数据手册 MAX31865中文手册可以看这个博主挂上的文章 总结 STM32F103C8T6通过MAX31865读取PT100电阻
  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • allegro画PCB如何更新元件的PCB封装

    allegro画PCB如何更新元件的PCB封装 一 更新单个器件的PCB封装 首先菜单栏选择Place gt Update Symbols 如下图 注意此案例是更新了C0805封装 中更新封装 就将上图第二个红色方框中的勾选即可 二 更新某
  • 学习STM32正点原子好吗?

    今日话题 学习STM32正点原子好吗 正点原子的教程内容简单明了 代码也清晰直接 使初学者能够轻松理解其功能和使用方法 尤其对于需要快速完成大学作业等任务的大学生来说 可以直接借鉴并稍作修改 便可满足需求 正点原子提供的资料通俗易懂 适合用
  • 太阳诱电树立超高端产品概念,与电子产业同步发展

    无论是传统的手机 家电 安防 汽车 医疗 交通 建筑的智能化转型 还是从物联网 工业4 0 智能硬件 互联网 一场基于大数据 互联网 应用软件等技术的硬件复兴热潮正在席卷全球 没有新东西出来 每家都一样 这一长期以来的争议一直困扰着CEAT
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读

随机推荐

  • 简单支付验证-SPV

    SPV的来源 在比特币整个生态圈里 大部分都是普通用户 即只有基本的比特币投资及消费支付需要的用户 他们可能没有矿机 没有高端配置的电脑 那么他们是否也要运行一个全节点程序呢 要知道 现在官方显示的结果 比特币所有区块数据目前在120G左右
  • webstorm等JetBrains全家桶搜索任何插件都无反应

    使用webstorm搜索任何插件都无反应 打开webstorm设置 搜索settings或者是System Settings 找到HTTP Proxy 设置AUTO detect proxy settings后 点击右下角的Apply应用后
  • vue 中provide的用法_Vue中使用provide和inject

    相信大家在工作中一定遇到过多层嵌套组件 而vue 的组件数据通信方式又有很多种 比如vuex dollar parent与 dollar children prop dollar emit与 dollar on dollar attrs与
  • 为什么需要对数值类型的特征做归一化?

    为什么需要对数值类型的特征做归一化 1 举例子 比如分析一个人的身高和体重对健康的影响 身高的单位是m 范围是1 6 1 8 体重的单位是kg 在50kg 100kg之间 分析出的结果自然会倾向于数值差异较大的体重特征 因此我们需要数值归一
  • 新版Spring Boot(10)- Spring Boot 整合数据持久层(1)

    1 整合JdbcTemplate Service Description TODO Author tzb Date 2021 8 22 10 23 Version 1 0 Service public class UserService A
  • 【Mysql】删除表记录,并限制条数

    删除表数据 好删 那如果要限制条数 如何删除呢 例如 有个表tag list 我要删除aid为6666的前100条数据 sql如下 删除表记录limit限制条数 delete from tag list where aid 6666 lim
  • JUC 六. 线程中断 与 LockSupport

    目录 一 基础理解 如何退出一个线程 volatile 与 AtomicBoolean 中断线程示例 Thread中自带的中断api示例 阻塞状态线程中断时异常解决 二 Thread中自带的中断底层分析 三 总结 一 基础理解 先了解几个问
  • 打印九九口诀表(pta练习题)

    下面是一个完整的下三角九九口诀表 本题要求对任意给定的一位正整数N 输出从1 1到N N的部分口诀表 输入格式 输入在一行中给出一个正整数N 1 N 9 输出格式 输出下三角N N部分口诀表 其中等号右边数字占4位 左对齐 include
  • AIDL原理和相关文件解析

    Binder概述 相信从事Android相关的研发人员 都对Binder有个或多或少的了解 相关技术博客也有一大推 我今天对Binder的学习过程进行一个记录 理论性的叙述会少一点 更多的是基于AS自动生成的AIDL文件进行代码分析 但读者
  • 【Java基础】使用Java 8的Stream API来简化Map集合的操作

    在 Java 8 中引入的 Stream API 是一种非常强大的函数式编程工具 可以帮助开发者更加方便地对集合进行操作和处理 而在 Map 集合中 Stream API 的使用也能够极大地简化代码 并提升程序效率和可读性 在本文中 我们将
  • 网络基础通过子网掩码 计算主机数网络范围

    192 168 11 16 27 主机的个数为32 27 5 2 5 32 32 2 30主机数为30 主机范围是0 31 63 95 必须是32的倍数 16在0 32之间 31是广播地址 网络号是192 168 11 0
  • 白话学习防火墙3 之防火墙工作模式(适用于IPS、IDS、WAF等其他安全设备)

    说白了 透明模式就是当交换机使 路由模式就是当路由使 混杂就是杂交物种 即当作路由使 又当作交换机使 透明模式 透明模式一般用于网络建设完 网络功能基本已经实现的情况下 用户需要加装防火墙以实现安全区域隔离的要求 早期也称之为桥模式 桥这个
  • jvm的内存模型之eden区

    浅谈java内存模型 不同的平台 内存模型是不一样的 但是jvm的内存模型规范是统一的 其实java的多线程并发问题最终都会反映在java的内存模型上 所谓线程安全无 非是要控制多个线程对某个资源的有序访问或修改 总结java的内存模型 要
  • 如何完成卷积神经网络有关的毕业设计

    前言 毕业设计对于每个学生而言都是一种十分痛苦的渡劫仪式 尤其是当你拿到的是完全陌生的毕业设计的时候 内心无疑有各种王尼玛从心中飘过 我在这里聊聊我在完成毕设的过程中得到的一些经验教训 因为我的毕业设计主题是卷积神经网络 所以在这里我的话题
  • 【云计算与数据中心规划】【期末复习题】【2022秋】

    文章目录 一 单选题 共7题 二 多选题 共15题 三 填空题 共7题 四 判断题 共5题 五 简答题 共7题 Reference 题量 41 满分 100 0 一 单选题 共7题 1 以下哪个虚拟机系统可以独立安装在计算机硬件之上 不需要
  • 什么是整洁的代码

    点击蓝色 五分钟学算法 关注我哟 加个 星标 天天中午 12 15 一起学算法 作者 xybaby 来源 https www cnblogs com xybaby p 11335829 html 写出整洁的代码 是每个程序员的追求 clea
  • opengl es3.0学习篇八:纹理

    OpenGL ESMIP 开发十年 就只剩下这套架构体系了 gt gt gt 学习内容来源and参考 opengl es 3 0编程指南 https www jianshu com p 4d8d35288a0f 3D图形渲染最基本的操作之一
  • 05 神经网络语言模型(独热编码+词向量的起源)

    博客配套视频链接 https space bilibili com 383551518 spm id from 333 1007 0 0 b 站直接看 配套 github 链接 https github com nickchen121 Pr
  • 基于opencv的家居智能安防机器视觉系统

    基于opencv的家居智能安防机器视觉系统 关键词 Windows 树莓派 python opencv 1 写在前面的话 大学4年很快过去了 因为疫情原因我们从大四上学期结束之后直接跳到了大学的尾声 毕业设计 毕业答辩 毕业的环境 回顾整个
  • 树莓派基础之外设开发编程

    外设开发篇 一 树莓派外设开发接口 二 树莓派wiringPi库 三 树莓派控制继电器 四 继电器组硬件控制开发 五 超声波模块介绍 六 串口通信协议概述 七 树莓派和语音模块的综合应用 一 树莓派外设开发接口 树莓派的接口 对主控芯片来说