1)实验平台:正点原子Linux开发板

2)摘自《正点原子I.MX6U嵌入式Linux驱动开发指南

关注官方微信号公众号,获取更多资料:正点原子

第二十七章SPI实验

同I2C一样,SPI是很常用的通信接口,也可以通过SPI来连接众多的传感器。相比I2C接口,SPI接口的通信速度很快,I2C最多400KHz,但是SPI可以到达几十MHz。I.MX6U也有4个SPI接口,可以通过这4个SPI接口来连接一些I2C外设。I.MX6U-ALPHA使用SPI3接口连接了一个六轴传感器ICM-20608,本章我们就来学习如何使用I.MX6U的SPI接口来驱动ICM-20608,读取ICM-20608的六轴数据。

27.1 SPI & ICM-20608简介

27.1.1 SPI简介

上一章我们讲解了I2C,I2C是串行通信的一种,只需要两根线就可以完成主机和从机之间的通信,但是I2C的速度最高只能到400KHz,如果对于访问速度要求比价高的话I2C就不适合了。本章我们就来学习一下另外一个和I2C一样广泛使用的串行通信:SPI,SPI全称是Serial Perripheral Interface,也就是串行外围设备接口。SPI是Motorola公司推出的一种同步串行接口技术,是一种高速、全双工的同步通信总线,SPI时钟频率相比I2C要高很多,最高可以工作在上百MHz。SPI以主从方式工作,通常是有一个主设备和一个或多个从设备,一般SPI需要4根线,但是也可以使用三根线(单向传输),本章我们讲解标准的4线SPI,这四根线如下:

①、CS/SS,Slave Select/Chip Select,这个是片选信号线,用于选择需要进行通信的从设备。I2C主机是通过发送从机设备地址来选择需要进行通信的从机设备的,SPI主机不需要发送从机设备,直接将相应的从机设备片选信号拉低即可。

②、SCK,Serial Clock,串行时钟,和I2C的SCL一样,为SPI通信提供时钟。

③、MOSI/SDO,Master Out Slave In/Serial Data Output,简称主出从入信号线,这根数据线只能用于主机向从机发送数据,也就是主机输出,从机输入。

④、MISO/SDI,Master In Slave Out/Serial Data Input,简称主入从出信号线,这根数据线只能用户从机向主机发送数据,也就是主机输入,从机输出。

SPI通信都是由主机发起的,主机需要提供通信的时钟信号。主机通过SPI线连接多个从设备的结构如图27.1.1.1所示:

图27.1.1.1 SPI设备连接图

SPI有四种工作模式,通过串行时钟极性(CPOL)和相位(CPHA)的搭配来得到四种工作模式:

①、CPOL=0,串行时钟空闲状态为低电平。

②、CPOL=1,串行时钟空闲状态为高电平,此时可以通过配置时钟相位(CPHA)来选择具体的传输协议。

③、CPHA=0,串行时钟的第一个跳变沿(上升沿或下降沿)采集数据。

④、CPHA=1,串行时钟的第二个跳变沿(上升沿或下降沿)采集数据。

这四种工作模式如图27.1.1.2所示:

图27.1.1.2 SPI四种工作模式

根I2C一样,SPI也是有时序图的,以CPOL=0,CPHA=0这个工作模式为例,SPI进行全双工通信的时序如图27.1.1.3所示:

图27.1.1.3 SPI时序图

从图27.1.1.3可以看出,SPI的时序图很简单,不像I2C那样还要分为读时序和写时序,因为SPI是全双工的,所以读写时序可以一起完成。图27.1.1.3中,CS片选信号先拉低,选中要通信的从设备,然后通过MOSI和MISO这两根数据线进行收发数据,MOSI数据线发出了0XD2这个数据给从设备,同时从设备也通过MISO线给主设备返回了0X66这个数据。这个就是SPI时序图。

关于SPI就讲解到这里,接下来我们看一下I.MX6U自带的SPI外设:ECSPI。

27.1.2 I.MX6U ECSPI简介

I.MX6U自带的SPI外设叫做ECSPI,全称是Enhanced Configurable Serial Peripheral Interface,别看前面加了个“EC”就以为和标准SPI有啥不同的,起始就是SPI。ECSPI有64x32个接收FIFO(RXFIFO)和64x32个发送FIFO(TXFIFO),ECSPI特性如下:

①、全双工同步串行接口。

②、可配置的主/从模式。

③、四个片选信号,支持多从机。

④、发送和接收都有一个32x64的FIFO。

⑤、片选信号SS/CS,时钟信号SCLK极性可配置。

⑥、支持DMA。

I.MX6U的ECSPI可以工作在主模式或从模式,本章我们使用主模式,I.MX6U有4个ECSPI,每个ECSPI支持四个片选信号,也就说,如果你要使用ECSPI的硬件片选信号的话,一个ECSPI可以支持4个外设。如果不使用硬件的片选信号就可以支持无数个外设,本章实验我们不使用硬件片选信号,因为硬件片选信号只能使用指定的片选IO,软件片选的话可以使用任意的IO。

我们接下来看一下ECSPI的几个重要的寄存器,首先看一下ECSPIx_CONREG(x=1~4)寄存器,这是ECSPI的配置寄存器,此寄存器结构如图27.1.2.1所示:

图27.1.2.1寄存器ECSPIx_CONREG结构

寄存器ECSPIx_CONREG各位含义如下:

BURST_LENGTH(bit31:24):突发长度,设置SPI的突发传输数据长度,在一次SPI发送中最大可以发送2^12bit数据。可以设置0X000~0XFFF,分别对应1~2^12bit。我们一般设置突发长度为一个字节,也就是8bit,BURST_LENGTH=7。

CHANNEL_SELECT(bit19:18):SPI通道选择,一个ECSPI有四个硬件片选信号,每个片选信号是一个硬件通道,虽然我们本章实验使用的软件片选,但是SPI通道还是要选择的。可设置为0~3,分别对应通道0~3。I.MX6U-ALPHA开发板上的ICM-20608的片选信号接的是ECSPI3_SS0,也就是ECSPI3的通道0,所以本章实验设置为0。

DRCTL(bit17:16):SPI的SPI_RDY信号控制位,用于设置SPI_RDY信号,为0的话不关心SPI_RDY信号;为1的话SPI_RDY信号为边沿触发;为2的话SPI_DRY是电平触发。

PRE_DIVIDER(bit15:12):SPI预分频,ECSPI时钟频率使用两步来完成分频,此位设置的是第一步,可设置0~15,分别对应1~16分频。

POST_DIVIDER(bit11:8):SPI分频值,ECSPI时钟频率的第二步分频设置,分频值为2^POST_DIVIDER。

CHANNEL_MODE(bit7:4):SPI通道主/从模式设置,CHANNEL_MODE[3:0]分别对应SPI通道3~0,为0的话就是设置为从模式,如果为1的话就是主模式。比如设置为0X01的话就是设置通道0为主模式。

SMC(bit3):开始模式控制,此位只能在主模式下起作用,为0的话通过XCH位来开启SPI突发访问,为1的话只要向TXFIFO写入数据就开启SPI突发访问。

XCH(bit2):此位只在主模式下起作用,当SMC为0的话此位用来控制SPI突发访问的开启。

HT(bit1):HT模式是能位,I.MX6ULL不支持。

EN(bit0):SPI使能位,为0的话关闭SPI,为1的话使能SPI。

接下来看一下寄存器ECSPIx_CONFIGREG,这个也是ECSPI的控制寄存器,此寄存器结构如图27.1.2.2所示:

图27.1.2.2寄存器ECSPIx_CONFIGREG结构

寄存器ECSPIx_CONREG用到的重要位如下:

HT_LENGTH(bit28:24):HT模式下的消息长度设置,I.MX6ULL不支持。

SCLK_CTL(bit23:20):设置SCLK信号线空闲状态电平,SCLK_CTL[3:0]分别对应通道3~0,为0的话SCLK空闲状态为低电平,为1的话SCLK空闲状态为高电平。

DATA_CTL(bit19:16):设置DATA信号线空闲状态电平,DATA_CTL[3:0]分别对应通道3~0,为0的话DATA空闲状态为高电平,为1的话DATA空闲状态为低电平。

SS_POL(bit15:12):设置SPI片选信号极性设置,SS_POL[3:0]分别对应通道3~0,为0的话片选信号低电平有效,为1的话片选信号高电平有效。

SCLK_POL(bit7:4):SPI时钟信号极性设置,也就是CPOL,SCLK_POL[3:0]分别对应通道3~0,为0的话SCLK高电平有效(空闲的时候为低电平),为1的话SCLK低电平有效(空闲的时候为高电平)。

SCLK_PHA(bit3:0):SPI时钟相位设置,也就是CPHA,SCLK_PHA[3:0]分别对应通道3~0,为0的话串行时钟的第一个跳变沿(上升沿或下降沿)采集数据,为1的话串行时钟的第二个跳变沿(上升沿或下降沿)采集数据。

通过SCLK_POL和SCLK_PHA可以设置SPI的工作模式。

接下来看一下寄存器ECSPIx_PERIODREG,这个是ECSPI的采样周期寄存器,此寄存器结构如图27.1.2.3所示:

图27.1.2.3寄存器ECSPIx_PERIODREG结构

寄存器ECSPIx_PERIODREG用到的重要位如下:

CSD_CTL(bit21:16):片选信号延时控制位,用于设置片选信号和第一个SPI时钟信号之间的时间间隔,范围为0~63。

CSRC(bit15):SPI时钟源选择,为0的话选择SPI CLK为SPI的时钟源,为1的话选择32.768KHz的晶振为SPI时钟源。我们一般选择SPI CLK作为SPI时钟源,SPI CLK时钟来源如图27.1.2.4所示:

图27.1.2.4 SPI CLK时钟源

图27.1.2.4中各部分含义如下:

①、这是一个选择器,用于选择根时钟源,由寄存器CSCDR2的位ECSPI_CLK_SEL来控制,为0的话选择pll3_60m作为ECSPI根时钟源。为1的话选择osc_clk作为ECSPI时钟源。本章我们选择pll3_60m作为ECSPI根时钟源。

②、ECSPI时钟分频值,由寄存器CSCDR2的位ECSPI_CLK_PODF开控制,分频值为2^ECSPI_CLK_PODF。本章我们设置为0,也就是1分频。

③、最终进入ECSPI的时钟,也就是SPI CLK=60MHz。

SAMPLE_PERIO:采样周期寄存器,可设置为0~0X7FFF分别对应0~32767个周期。

接下来看一下寄存器ECSPIx_STATREG,这个是ECSPI的状态寄存器,此寄存器结构如图27.1.2.5所示:

图27.1.2.5寄存器ECSPIx_STATREG寄存器

寄存器ECSPIx_STATREG用到的重要位如下:

TC(bit7):传输完成标志位,为0表示正在传输,为1表示传输完成。

RO(bit6):RXFIFO溢出标志位,为0表示RXFIFO无溢出,为1表示RXFIFO溢出。

RF(bit5):RXFIFO空标志位,为0表示RXFIFO不为空,为1表示RXFIFO为空。

RDR(bit4):RXFIFO数据请求标志位,此位为0表示RXFIFO里面的数据不大于RX_THRESHOLD,此位为1的话表示RXFIFO里面的数据大于RX_THRESHOLD。

RR(bit3):RXFIFO就绪标志位,为0的话RXFIFO没有数据,为1的话表示RXFIFO中至少有一个字的数据。

TF(bit2):TXFIFO满标志位,为0的话表示TXFIFO不为满,为1的话表示TXFIFO为满。

TDR(bit1):TXFIFO数据请求标志位,为0表示TXFIFO中的数据大于TX_THRESHOLD,为1表示TXFIFO中的数据不大于TX_THRESHOLD。

TE(bit0):TXFIFO空标志位,为0表示TXFIFO中至少有一个字的数据,为1表示TXFIFO为空。

最后就是两个数据寄存器,ECSPIx_TXDATA和ECSPIx_RXDATA,这两个寄存器都是32位的,如果要发送数据就向寄存器ECSPIx_TXDATA写入数据,读取及存取ECSPIx_RXDATA里面的数据就可以得到刚刚接收到的数据。

关于ECSPI的寄存器就介绍到这里,关于这些寄存器详细的描述,请参考《I.MX6ULL参考手册》第805页的20.7小节。

27.1.3 ICM-20608简介

ICM-20608是InvenSense出品的一款6轴MEMS传感器,包括3轴加速度和3轴陀螺仪。ICM-20608尺寸非常小,只有3x3x0.75mm,采用16P的LGA封装。ICM-20608内部有一个512字节的FIFO。陀螺仪的量程范围可以编程设置,可选择±250,±500,±1000和±2000°/s,加速度的量程范围也可以编程设置,可选择±2g,±4g,±4g,±8g和±16g。陀螺仪和加速度计都是16位的ADC,并且支持I2C和SPI两种协议,使用I2C接口的话通信速度最高可以达到400KHz,使用SPI接口的话通信速度最高可达到8MHz。I.MX6U-ALPHA开发板上的ICM-20608通过SPI接口和I.MX6U连接在一起。ICM-20608特性如下:

①、陀螺仪支持X,Y和Z三轴输出,内部集成16位ADC,测量范围可设置:±250,±500,±1000和±2000°/s。

②、加速度计支持X,Y和Z轴输出,内部集成16位ADC,测量范围可设置:±2g,±4g,±4g,±8g和±16g。

③、用户可编程中断。

④、内部包含512字节的FIFO。

⑤、内部包含一个数字温度传感器。

⑥、耐10000g的冲击。

⑦、支持快速I2C,速度可达400KHz。

⑧、支持SPI,速度可达8MHz。

ICM-20608的3轴方向如图27.1.3.1所示:

图27.1.3.1 ICM-20608检测轴方向和极性

ICM-20608的结构框图如图27.1.3.2所示:

图27.1.3.2 ICM-20608框图

如果使用IIC接口的话ICM-20608的AD0引脚决定I2C设备从地址的最后一位,如果AD0为0的话ICM-20608从设备地址是0X68,如果AD0为1的话ICM-20608从设备地址为0X69。本章我们使用SPI接口,跟上一章使用AP3216C一样,ICM-20608也是通过读写寄存器来配置和读取传感器数据,使用SPI接口读写寄存器需要16个时钟或者更多(如果读写操作包括多个字节的话),第一个字节包含要读写的寄存器地址,寄存器地址最高位是读写标志位,如果是读的话寄存器地址最高位要为1,如果是写的话寄存器地址最高位要为0,剩下的7位才是实际的寄存器地址,寄存器地址后面跟着的就是读写的数据。表27.1.3.1列出了本章实验用到的一些寄存器和位,关于ICM-20608的详细寄存器和位的介绍请参考ICM-20608的寄存器手册:

表27.1.3.1 ICM-20608寄存器表

ICM-20608的介绍就到这里,关于ICM-20608的详细介绍请参考ICM-20608的数据手册和寄存器手册。

27.2硬件原理分析

本试验用到的资源如下:

、指示灯LED0。

、 RGB LCD屏幕。

③、ICM20608

④、串口

ICM-20608是在I.MX6U-ALPHA开发板底板上,原理图如图27.2.1所示:

图27.2.1 ICM-20608原理图

27.3实验程序编写

本实验对应的例程路径为:开发板光盘-> 1、裸机例程->18_spi。

本章实验在上一章例程的基础上完成,更改工程名字为“icm20608”,然后在bsp文件夹下创建名为“spi”和“icm20608”的文件。在bsp/spi中新建bsp_spi.c和bsp_spi.h这两个文件,在bsp/icm20608中新建bsp_icm20608.c和bsp_icm20608.h这两个文件。bsp_spi.c和bsp_spi.h是I.MX6U的SPI文件,bsp_icm20608.c和bsp_icm20608.h是ICM20608的驱动文件。在bsp_spi.h中输入如下内容:

示例代码27.3.1 bsp_spi.h文件代码

1 #ifndef _BSP_SPI_H

2 #define _BSP_SPI_H

3/***************************************************************

4 Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.

5 文件名 : bsp_spi.h

6 作者 : 左忠凯

7 版本 : V1.0

8 描述 : SPI驱动头文件。

9 其他 : 无

10 论坛 : www.openedv.com

11 日志 : 初版V1.0 2019/1/17 左忠凯创建

12 ***************************************************************/

13 #include "imx6ul.h"

14

15/* 函数声明 */

16void spi_init(ECSPI_Type *base);

17unsignedchar spich0_readwrite_byte(ECSPI_Type *base,

unsignedchar txdata);

18 #endif

文件bsp_spi.h内容很简单,就是函数声明。在文件bsp_spi.c中输入如下内容:

示例代码27.3.2 bsp_spi.c文件代码

/***************************************************************

Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.

文件名 : bsp_spi.c

作者 : 左忠凯

版本 : V1.0

描述 : SPI驱动文件。

其他 : 无

论坛 : www.openedv.com

日志 : 初版V1.0 2019/1/17 左忠凯创建

***************************************************************/

1 #include "bsp_spi.h"

2 #include "bsp_gpio.h"

3 #include "stdio.h"

4

5/*

6 * @description : 初始化SPI

7 * @param - base : 要初始化的SPI

8 * @return : 无

9 */

10void spi_init(ECSPI_Type *base)

11{

12 /* 配置CONREG寄存器

13 * bit0 : 1 使能ECSPI

14 * bit3 : 1 当向TXFIFO写入数据以后立即开启SPI突发。

15 * bit[7:4]: 0001 SPI通道0主模式,根据实际情况选择,开发板上的

16 * ICM-20608接在SS0上,所以设置通道0为主模式

17 * bit[19:18]: 00 选中通道0(其实不需要,因为片选信号我们我们自己控制)

18 * bit[31:20]: 0x7 突发长度为8个bit。

19 */

20 ase->CONREG =0; /* 先清除控制寄存器 */

21 ase->CONREG |=(1<<0)|(1<<3)|(1<<4)|(7<<20);

22

23 /*

24 * ECSPI通道0设置,即设置CONFIGREG寄存器

25 * bit0: 0 通道0 PHA为0

26 * bit4: 0 通道0 SCLK高电平有效

27 * bit8: 0 通道0片选信号当SMC为1的时候此位无效

28 * bit12: 0 通道0 POL为0

29 * bit16: 0 通道0 数据线空闲时高电平

30 * bit20: 0 通道0 时钟线空闲时低电平

31 */

32 base->CONFIGREG =0; /* 设置通道寄存器 */

33

34 /*

35 * ECSPI通道0设置,设置采样周期

36 * bit[14:0] : 0X2000 采样等待周期,比如当SPI时钟为10MHz的时候

37 * 0X2000就等于1/10000 * 0X2000 = 0.8192ms,也就是

38 * 连续读取数据的时候每次之间间隔0.8ms

39 * bit15 : 0 采样时钟源为SPI CLK

40 * bit[21:16]: 0 片选延时,可设置为0~63

41 */

42 base->PERIODREG =0X2000;/* 设置采样周期寄存器 */

43

44 /*

45 * ECSPI的SPI时钟配置,SPI的时钟源来源于pll3_sw_clk/8=480/8=60MHz

46 * SPI CLK = (SourceCLK / PER_DIVIDER) / (2^POST_DIVEDER)

47 * 比如我们现在要设置SPI时钟为6MHz,那么设置如下:

48 * PER_DIVIDER = 0X9。

49 * POST_DIVIDER = 0X0。

50 * SPI CLK = 60000000/(0X9 + 1) = 60000000=6MHz

51 */

52 base->CONREG &=~((0XF<<12)|(0XF<<8));/* 清除以前的设置 */

53 base->CONREG |=(0X9<<12);/* 设置SPI CLK = 6MHz */

54}

55

56/*

57 * @description : SPI通道0发送/接收一个字节的数据

58 * @param - base : 要使用的SPI

59 * @param – txdata : 要发送的数据

60 * @return : 无

61 */

62unsignedchar spich0_readwrite_byte(ECSPI_Type *base,

unsignedchar txdata)

63{

64 uint32_t spirxdata =0;

65 uint32_t spitxdata = txdata;

66

67 /* 选择通道0 */

68 base->CONREG &=~(3<<18);

69 base->CONREG |=(0<<18);

70

71while((base->STATREG &(1<<0))==0){}/* 等待发送FIFO为空 */

72 base->TXDATA = spitxdata;

73

74 while((base->STATREG &(1<<3))==0){}/* 等待接收FIFO有数据 */

75 spirxdata = base->RXDATA;

76 return spirxdata;

77}

spi收发时的寄存器sr不变_「正点原子Linux连载」第二十七章SPI实验(一)相关推荐

  1. spi收发时的寄存器sr不变_「正点原子Linux连载」第二十七章SPI实验(二)

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 文件bsp_spi.c中有两个函数:sp ...

  2. 【正点原子Linux连载】第二十七章 SPI实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  3. linux i2c adapter 增加设备_「正点原子Linux连载」第六十二章Linux SPI驱动实验(一)...

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南>关注官方微信号公众号,获取更多资料:正点原子 第六十二章Linux SPI驱动实验 上一 ...

  4. 韦东山 IMX6ULL和正点原子_「正点原子Linux连载」第四十三章Linux设备树(一)

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 前面章节中我们多次提到"设备树 ...

  5. 韦东山 IMX6ULL和正点原子_「正点原子Linux连载」第十二章官方SDK移植试验

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 第十二章官方SDK移植试验 在上一章中, ...

  6. 韦东山 IMX6ULL和正点原子_「正点原子Linux连载」第四十四章设备树下的LED驱动实验...

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 上一章我们详细的讲解了设备树语法以及在驱 ...

  7. 32 串口波特率_「正点原子FPGA连载」第五章串口中断实验

    1)实验平台:正点原子达芬奇FPGA开发板 2) 摘自[正点原子]达芬奇之Microblaze 开发指南 3)购买链接:https://detail.tmall.com/item.htm?id=624 ...

  8. 扩展中断控制器8259实验_「正点原子FPGA连载」第十三章双核AMP实验

    1)摘自[正点原子]领航者 ZYNQ 之嵌入式开发指南 2)实验平台:正点原子领航者ZYNQ开发板 3)平台购买地址:https://item.taobao.com/item.htm?&id= ...

  9. qq自定义diy名片代码复制_「正点原子FPGA连载」第六章自定义IP核-呼吸灯实验

    1)摘自[正点原子]领航者 ZYNQ 之嵌入式开发指南 2)实验平台:正点原子领航者ZYNQ开发板 3)平台购买地址:https://item.taobao.com/item.htm?&id= ...

最新文章

  1. 深度剖析冒泡排序机制
  2. git显示服务器所有分支,怎么拉取git服务器上面的分支到本机?
  3. python实现数据库事务回滚_使用Python脚本实现MySQL误操作的快速回滚
  4. 计算机组成原理-数制与编码
  5. 应用服务器——JBoss架构分析
  6. mysql——JDBC
  7. MyBatis在Oracle中插入数据并返回主键的问题解决
  8. python自动化框架pytest pdf_Python 自动化测试框架 unittest 和 pytest 对比
  9. 多系统服务器数据备份软件,护卫神好备份系统
  10. 深度防范,如何应对区块链安全问题?
  11. easyui---layout实战
  12. paip.invalid conversion from FormWdg* to SOCKET {aka unsigned int}
  13. 司创电梯发卡软件_防复制电梯IC卡软件系统安装操作步骤
  14. 解决Ionic官方网站打开缓慢问题
  15. 【日语】五十音图-一个好用的日语五十音图记忆方法
  16. 魔兽世界8.0哪个服务器稳定,魔兽世界活得最安逸的BOSS!8.0版本才拿到7.0服务器首杀!...
  17. 城市轨道交通信号系统学习笔记(三)继电器
  18. oppo开启系统更新服务器,oppo手机系统升级开不了机怎么办
  19. 叭叭一下Servlet的虚拟路径的映射
  20. 五大经典算法之四贪心算法

热门文章

  1. db2查最新值的前一天值_2019年1月珠海最新房价出炉!看看你家房子值多少钱!...
  2. c++tcp接收文件缓存多大合适_linux高性能网络编程之tcp连接的内存使用
  3. Facebook广告系统及多账号操作经验分享
  4. linux性能测试cpu内存io,Linux下磁盘IO性能测试工具介绍
  5. redhat自带mysql_rhel4卸载系统自带的mysql4.1
  6. maven中pom.xml显示不正常的问题
  7. Leetcode每日一题:203.remove-linked-list-elements(移除链表元素)
  8. 吴恩达机器学习 9.机器学习系统设计
  9. 词向量算法—Word2Vec和GloVe
  10. 蓝桥杯 基础练习 特殊的数字