为什么外设一定要通过 I/O 接口与 CPU 相连?

为什么外设一定要通过 I/O 接口与 CPU 相连?
为什么外设一定要通过 I/O 接口与 CPU 相连?

4个回答

先问是什么,再问为什么。现在的计算机,使用dma技术,也就是外设直接接到内存总线上。
“为什么外设一定要通过 I/O 接口与 CPU 相连?”因为你看的书是根据40年前的计算机技术编写的。那些在大学里编书的老家伙,自从他们大学毕业以后,就混吃等死,再也没有学过任何新的东西。

I/O接口是一电子电路(以IC芯片或接口板形式出现 ),其内有若干专用寄存器和相应的控制逻辑电路构成。它是CPU和I/O设备之间交换信息的媒介和桥梁。CPU与外部设备、存储器的连接和数据交换都需要通过接口设备来实现,前者被称为I/O接口,而后者则被称为存储器接口。存储器通常在CPU的同步控制下工作,接口电路比较简单;而I/O设备品种繁多,其相应的接口电路也各不相同,因此,习惯上说到接口只是指I/O接口

现在的计算机系统,其实应该说是异构的多机系统(当然因为多核心的普及,它本身也是同构的多机系统)。
现在的一台计算机,其实有几十个cpu,而总线更像是一个内部高速连接的网络。

因为每种接口都有自己定义,不同的接口会有不同的操作电压要求,会用不同的线数,会有不同的传输协议,而这些协议所规定信号要求不同.比如usb是4条线,一个电压,一个地,另外2条是一个差分对,要求的电压是5伏;而i2c总线是两条线一条时钟,一条数据;所以说要用固定的接口,而外设的接口一般只是符合某些协议,不可能包括所有的协议通用,因而要通过相应的接口去连接.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
beaglebone black的emmc和LCD显示屏有关系吗?或者说u-boot和Lcd显示屏有关系吗
大家好,我买了二手的BBB,原本bbb带emmc的,现在这个emmc换成flash了, 想知道emmc换成flash会影响lcd显示屏吗? 或者说eeprom会影响到lcd显示屏吗? 若没有关系话,就不用动uboot了。 按常理说lcd显示屏只是板子上的输入输出的接口,当给bbb上电后会到处理器的 rom运行再到flash的uboot上运行,并且uboot只是初始化硬件外设和加载内核到内存中。 既然是外设就和驱动和硬件接口有关系吧。只要驱动和硬件接口都有,应该就可以在lcd屏幕上显示了吧。是不是还要在内核中操作什么呢?
I/O端口号和操作数含义有通用标准吗?
比如汇编指令in,out对端口0x1f3、0x1f4、0x1f5 、0x1f6、0x1f7进行读写可以控制硬盘,这些端口都是固定的吗?其它外设的端口号从哪里可以查到?
初学PIC18单片机,定时器1程序问题
参考了一些网上的例程写的,目的是主函数中LCD1602显示一个字符H,然后定时器1中断改变这个H,但是仿真好像并没有开启中断 软件是protues8.9,芯片是PIC18F4620 ``` #include<pic18.h> #include "LCD1602.h" /************配置位设置************/ __CONFIG(1,HS & FCMDIS & IESODIS); __CONFIG(2,WDTDIS); __CONFIG(3,PBDIGITAL); __CONFIG(4,LVPDIS); unsigned char secs,mins,hours; unsigned char L,H=0; //*************************************************************** //函数名:void Delay(unsigned int n) //入口参数:n //出口参数:无 //功能:延时n个指令周期。 //*************************************************************** void Delay(unsigned int n) { while(--n){;} } //*************************************************************** //函数名:初始化程序 Timer_Init(void) //入口参数:无 //出口参数:无 //功能:初始化定时器1 //*************************************************************** void Timer_Init(void) { secs = 0; mins = 59; hours = 23; // Initialize for Timer1 time base //ADCON1=0X06; IPEN = 0; PEIE=1; //允许所有未被关闭的外设中断 T1CON = 0b00001111;// Timer1 init ( Prescaler:TMR1, 1:64) TMR1IF = 0; // enable tmr1 intpt TMR1IE = 1; TMR1L=(65536-50000)%256; TMR1H=(65536-50000)/256; GIE = 1; } //*************************************************************** //函数名:主程序 void main(void) //入口参数:无 //出口参数:无 //功能:调用LCD初始化程序和进行TIME1初始化,并执行LCD显示时间的操作。 //*************************************************************** void main(void) { LCDInit(); Timer_Init(); while(1) { SetYX(0,2); LCDWrite(1, H); //H++; Delay(3000); } } //*************************************************************** //函数名:中断服务程序 void interrupt isr(void) //入口参数:无 //出口参数:无 //功能:24小时计时 //*************************************************************** void interrupt time1(void) { //----- TMR1 Interrupt -----// if(TMR1IF==1) //判断是否产生中断 { TMR1IF = 0; TMR1L=(65536-50000)%256; TMR1H=(65536-50000)/256; secs++; if(secs >= 60) { secs = 0; mins++; if(mins >= 60) { mins = 0; hours++; if(hours >= 24)hours = 0; } } SetYX(0,2); //LCDWrite(1, H); H++; } } ``` 下面是仿真图,
为什么要配置STM32的外设时钟?
假如只是让LED灯点亮,为什么还要配置STM32的外设时钟?比如我配的50M的GPIOB的外设时钟,有什么作用? 灯亮灭的时间是另一个延时函数决定的,并不是IO自动的高低电平决定的啊。。。
STM32F103CBT6上移植ucos操作系统 仿真后LED任务不运行一直处于空闲任务 是什么原因啊?
主函数 #include "stm32f10x.h" #include "stm32f10x_conf.h" #include "ucos_ii.h" #define TASK_STK_SIZE 64 //定义堆栈长度 OS_STK LED0_TASK_STK[TASK_STK_SIZE]; OS_STK LED1_TASK_STK[TASK_STK_SIZE]; /*定义两个任务的堆栈数组*/ #define ON 0 #define OFF 1 #define LED0(a) if (a) \ GPIO_SetBits(GPIOA,GPIO_Pin_0);\ else \ GPIO_ResetBits(GPIOA,GPIO_Pin_0) #define LED1(a) if (a) \ GPIO_SetBits(GPIOA,GPIO_Pin_1);\ else \ GPIO_ResetBits(GPIOA,GPIO_Pin_1) /*宏定义两个选择函数*/ void GPIO_configuration(void) //配置I/O口 { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /*开启GPIOA的外设时钟*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; /*选择要控制的GPIOA引脚*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*设置引脚模式为通用推挽输出*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /*调用库函数,初始化GPIOA*/ /* 关闭led0灯 */ GPIO_SetBits(GPIOA, GPIO_Pin_0); GPIO_SetBits(GPIOA, GPIO_Pin_1); } void BSP_Init(void) //硬件配置 { GPIO_configuration(); /* GPIO端口初始化 */ } void SysTick_init(void) /* SysTick_init 配置SysTick定时器 */ { SysTick_Config(SystemCoreClock/OS_TICKS_PER_SEC); //初始化并使能SysTick定时器 } void Task_LED0(void *p_arg) { (void)p_arg; // 'p_arg' 并没有用到,防止编译器提示警告 SysTick_init(); //在第一个任务中开启系统时钟 while (1) { LED0( ON ); OSTimeDlyHMSM(0, 0,0,100); LED0( OFF); OSTimeDlyHMSM(0, 0,0,100); } } void Task_LED1(void *p_arg) { (void)p_arg; // 'p_arg' 并没有用到,防止编译器提示警告 while (1) { LED1( ON ); OSTimeDlyHMSM(0, 0,0,500); LED1( OFF); OSTimeDlyHMSM(0, 0,0,500); } } int main(void) { BSP_Init(); OSInit(); OSTaskCreate(Task_LED0,(void *)0, &LED0_TASK_STK[TASK_STK_SIZE-1], 4); OSTaskCreate(Task_LED1,(void *)0, &LED1_TASK_STK[TASK_STK_SIZE-1], 5); OSStart(); return 0; } 仿真后一直在空闲函数中运行 有大神知道是为什么吗
stm32L0同时使用两个串口问题
项目需要同时使用两个串口和外界通信。用的是20脚的stm32L0,因为引脚太少,每个引脚的复用功能就很多。 突然发现LPUART1和USART2两个外设的TX引脚竟然共用一个引脚(如下方数据手册截图所示),想求问各位大神这个芯片还能两个串口同时用么,需要怎样配置呀? 另:一个引脚上这么多Alternate functions是不是只能通过外设时钟来控制具体是哪个外设在工作? ![图片说明](https://img-ask.csdn.net/upload/201910/22/1571744755_267880.png)
请问:其它外设是否使用DMA?
我能够理解IDE硬盘使用DMA的方式,我也知道使用DMA需要主板、操作系统和硬盘的三者配合。从相关资料来看,很多外设或单片机内部也使用DMA。 但我无法理解:1、除了IDE接口设备使用主板DMA外,其它接口的外设是否使用主板DMA(如果有如何查看)?(SATA硬盘应该也使用主板DMA) 2、问:硬盘使用主板DMA,是仅需要驱动的支持,还是同时需要硬盘芯片的支持? 3、问:使用DMA,是否必须要达到某个传输速度? 4、问:使用主板DMA与接口有关吗?USB、并行接口、火线接口等是否使用主板DMA? 5、问:移动硬盘的盘体支持DMA,那么硬盘转USB后还使用主板DAM吗? 请各位大侠不吝赐教! 请讲的通俗,这些问题已困扰我多日!
win10 io支持多种接口,如spi i2c,这类设备怎么才能接入win10 iot?
win10 iot 支持多种硬件接口:集成GPIO、Audio、HDMI、I2C、SPI、UART、USB、HID等多种接口,便于外设的添加,如何接入这类设备
IO端口和IO内存的区别
外设IO寄存器地址独立编址的CPU,这时应该称外设IO寄存器为IO端口,访问IO寄存器可通过ioport_map将其映射 到虚拟地址空间,但实际上这是给开发人员制造的一个“假象”,并没有映射到内核虚拟地址,仅仅是为了可以使用和IO内存一样的接口访问IO寄存器;也可以 直接使用in/out指令访问IO寄存器。 例如:Intel x86平台普通使用了名为内存映射(MMIO)的技术,该技术是PCI规范的一部分,IO设备端口被映射到内存空间,映射后,CPU访问IO端口就如同访问内存一样。 外设IO寄存器地址统一编址的CPU,这时应该称外设IO寄存器为IO内存,访问IO寄存器可通过ioremap将其映射到虚拟地址空间,然后再使用read/write接口访问。 这样解释IO端口和IO内存的区别对吗?区分IO端口还是IO内存是通过CPU的架构来判断吗?
CC2530,串口通信,收发字符问题。
本人单片机新手。下面的程序是正确可达到目的。 对于这个程序我有2个地方不太理解,望大神不吝赐教。 第一个:【设置发送字符串的函数】这个块儿,不太能理解。特别是我注释的地方。 第二个:【主方法中】接收那部分,有一个注释的地方,搞不懂。求解释。。。 没有金币,,,不知道有大神赐教没。。。跪谢。。。 ``` /* 设置串口波特率115200bps,8N1 串口调试助手给CC2530发送字符串,开发板则返回同样字符。 */ #include<ioCC2530.h> #include<string.h> typedef unsigned char uchar; typedef unsigned int uint; #define SIZE 50 char RxBuf; char RxData[SIZE]; char UartState;//0为接收状态,1为发送状态 uint count;//计数器 //延时器 void DelayMs(uint msec) { uint i,j; for(i=0;i<msec;i++) for(j=0;j<1070;j++); } //初始化串口 void InitUart() { //配置I/O,使用外部设备功能 PERCFG=0x00; //外设控制 P0SEL=0x0C; //配置P0端口的2,3为外设 //配置相应的串口 P2DIR&=~0x40; //优先级的控制 U0CSR|=0x80; //设置为UART模式 //配置串口的波特率 U0GCR=11; U0BAUD=216; U0CSR|=0x40;//接收使能 IEN0|=0x84;//允许USART0 RX 中断使能, 打开所有中断 } //设置发送字符串的函数 void UartSendString(char *Data,uint len) { uint i; for(i=0;i<len;i++) { U0DBUF=*Data++; //传输开始时,触发TX中断,此时为1。 while(UTX0IF==0); //!!!!!!!!!!!!!!!!!?不太懂。 UTX0IF=0; } } //接收中断处理函数 #pragma vector=URX0_VECTOR __interrupt void UART0_ISR() { URX0IF=0;//清中断标志 RxBuf=U0DBUF; } //函数入口 void main() { //首先,设置系统的时钟 CLKCONCMD&=~0x40; //把bit 6置为0,系统时钟选择,为32MHz XOSC while(CLKCONSTA&0x40); //等待晶振稳定 CLKCONCMD&=~0x47; //设置系统时钟频率为32MHZ InitUart(); //初始化端口 memset(RxData,0,SIZE); //数据清零 UartState=0; while(1) { if(UartState==0) //接收状态 { if(RxBuf!=0) { //以“#”为结束符,一次最多接收50个字符 if((RxBuf!='#')&&(count<50)) RxData[count++]=RxBuf;//接收 else { if(count>=50) { memset(RxData,0,SIZE); count=0; } else UartState=1; } RxBuf=0; } //RxBuf=0;//!!!!如果把上面的 RxBuf=0;注释,打开这个的话, //!!!!在串口调试助手中会输出每次都不同的结果,小弟找不到规律。 } if(UartState==1)//发送状态 { //首先要禁止接收 U0CSR&=~0x40; UartSendString(RxData,count); //允许接收字符 U0CSR|=0x40; UartState=0;//回复到接收模式 count=0; memset(RxData,0,SIZE); } } } ``` 谢谢!!!
Xen Domain0是如何访问外设的?
大家好: 通常Xen DomainU是通过前后端驱动来访问外设的,那Domain0如果需要对外设的访问 Domain0是怎么访问外设的,具体流程是什么?在 Domain0是怎么访问外设的过程中,Xen做了什么? 如何Domain0是直接访问物理驱动的话,那Xen在其中做了什么工作? 谢谢!
IOS BLE蓝牙4.0如何连接特定的外设(peripheral)
能不能通过外设的mac地址进行指定连接,可是要获取mac地址,必须要先连接外设呀感觉有点矛盾, 或者全部扫描连接符合mac地址的留下不符合的断开然后停止扫描,是不是效率低?
s3c6410裸机程序开发?
我想请教一个问题 是s3c6410的第一个led程序 _start: // 把外设的基地址告诉CPU ldr r0, =0x70000000 //对于6410来说,内存(0x00000000~0x60000000),外设(0x70000000-0x7fffffff) orr r0, r0, #0x13 //外设大小:256M mcr p15,0,r0,c15,c2,4 //把r0的值(包括了外设基地址+外设大小)告诉cpu 请问orr r0 , r0 , 0x13这行代码怎么理解? 为什么是256M?
在STM32上做SPI方式的ADXL345程序,无法读出ID,全是FF?
![图片说明](https://img-ask.csdn.net/upload/201906/27/1561593720_113653.jpg) 我用的ADXL345在淘宝上买的,型号是GY291 #ifndef __SPI_H #define __SPI_H #include "sys.h" void SPI1_Init(void); //初始化SPI1口 void SPI1_SetSpeed(u8 SpeedSet); //设置SPI1速度 u8 SPI1_ReadWriteByte(u8 TxData);//SPI1总线读写一个字节 #endif #include "spi.h" #include "delay.h" //以下是SPI模块的初始化代码,配置成主机模式 //SPI口初始化 //这里针是对SPI1的初始化 void SPI1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);//使能SPI1时钟 //GPIOFA5,6,7初始化设置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_4;//PA4片选 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1); //PB3复用为 SPI1 GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1); //PB4复用为 SPI1 GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1); //PB5复用为 SPI1 //这里只针对SPI口初始化 RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,ENABLE);//复位SPI1 RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,DISABLE);//停止复位SPI1 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置SPI工作模式:设置为主SPI SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //设置SPI的数据大小:SPI发送接收8位帧结构 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //串行同步时钟的空闲状态为高电平 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //串行同步时钟的第二个跳变沿(上升或下降)数据被采样 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //定义波特率预分频的值:波特率预分频值为256 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始 SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式 SPI_Init(SPI1, &SPI_InitStructure); //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器 GPIO_SetBits(GPIOA,GPIO_Pin_4); SPI_Cmd(SPI1, ENABLE); //使能SPI外设 // SPI1_ReadWriteByte(0xff);//启动传输 } //SPI1速度设置函数 //SPI速度=fAPB2/分频系数 //@ref SPI_BaudRate_Prescaler:SPI_BaudRatePrescaler_2~SPI_BaudRatePrescaler_256 //fAPB2时钟一般为84Mhz: /* 初始化包括了spi速度在内的各种参数,而速度设置函数,则只设置SPI的速度,方便在代码里面调用. 比如sd卡例程,在SD卡初始化的时候,SPI频率必须比较低,但是初始化成功以后,就可以设置到很高了. 这个时候调用SPI速度设置函数,就比较方便. */ void SPI1_SetSpeed(u8 SPI_BaudRatePrescaler) { assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));//判断有效性 SPI1->CR1&=0XFFC7;//位3-5清零,用来设置波特率 SPI1->CR1|=SPI_BaudRatePrescaler; //设置SPI1速度 SPI_Cmd(SPI1,ENABLE); //使能SPI1 } //SPI1 读写一个字节 //TxData:要写入的字节 //返回值:读取到的字节 u8 SPI1_ReadWriteByte(u8 TxData) { u8 val,val1; GPIO_ResetBits(GPIOA,GPIO_Pin_4); delay_ms(2); while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}//等待发送区空 SPI_I2S_SendData(SPI1, TxData); //通过外设SPIx发送一个byte 数据 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){} //等待接收完一个byte val1=SPI_I2S_ReceiveData(SPI1); GPIO_SetBits(GPIOA,GPIO_Pin_4); delay_ms(2); GPIO_ResetBits(GPIOA,GPIO_Pin_4); delay_ms(2); while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}//等待发送区空 SPI_I2S_SendData(SPI1, 0XFF); //通过外设SPIx发送一个byte 数据 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){} //等待接收完一个byte val=SPI_I2S_ReceiveData(SPI1); GPIO_SetBits(GPIOA,GPIO_Pin_4); return val+val1; //返回通过SPIx最近接收的数据 } #ifndef __ADXL345_H #define __ADXL345_H #include "spi.h" #define DEVICE_ID 0X00 //器件ID,0XE5 #define THRESH_TAP 0X1D //敲击阀值 #define OFSX 0X1E #define OFSY 0X1F #define OFSZ 0X20 #define DUR 0X21 #define Latent 0X22 #define Window 0X23 #define THRESH_ACK 0X24 //有误,THRESH_ACT #define THRESH_INACT 0X25 #define TIME_INACT 0X26 #define ACT_INACT_CTL 0X27 #define THRESH_FF 0X28 #define TIME_FF 0X29 #define TAP_AXES 0X2A #define ACT_TAP_STATUS 0X2B #define BW_RATE 0X2C #define POWER_CTL 0X2D #define INT_ENABLE 0X2E #define INT_MAP 0X2F #define INT_SOURCE 0X30 #define DATA_FORMAT 0X31 #define DATA_X0 0X32 #define DATA_X1 0X33 #define DATA_Y0 0X34 #define DATA_Y1 0X35 #define DATA_Z0 0X36 #define DATA_Z1 0X37 #define FIFO_CTL 0X38 #define FIFO_STATUS 0X39 u8 ADXL345_Init(void); //初始化ADXL345 u8 SPI1_ReadWriteByte(u8 TxData);//SPI1总线读写一个字节 #endif #include "adxl345.h" #include "sys.h" #include "delay.h" #include "math.h" #include "usart.h" //初始化ADXL345. //返回值:0,初始化成功;1,初始化失败. u8 ADXL345_Init(void) { u8 ID; SPI1_Init(); //初始化IIC总线 if(SPI1_ReadWriteByte(DEVICE_ID)==0XE5) //读取器件ID { printf("\r\nDEVICE_ID=%0x",ID); return 0; } printf("\r\n失败DEVICE_ID=%0x",ID); return 1; } //读ADXL345寄存器 //addr:寄存器地址 //返回值:读到的值 #include "sys.h" #include "usart.h" #include "delay.h" #include "led.h" #include "key.h" #include "lcd.h" #include "adxl345.h" #include "math.h" int main(void) { delay_init(168); //初始化延时函数 uart_init(115200); //初始化串口波特率为115200 LED_Init(); //初始化与LED连接的硬件接口 while(1) { while(ADXL345_Init()) //3D加速度传感器初始化 { delay_ms(1000); } } } ```
STM32F407与外设之间的USB通讯, 就像串口一个收发数据, 怎么做?
STM32F407与外设之间的USB通讯, 就像串口一个收发数据, 怎么做? 有相关例子吗?
linux外设的禁用和启用
linux外设的控制 例如: 1、当U盘接入pc时禁用,用户选择放行后启用; 2、当打印机接入PC时禁用,用户选择放行后启用; 等等功能。 现在有两种方案: 1、硬件中断拦截,通过irq_to_desc函数实现,但问题是还获取不到设备信息,而且时机偏早。 2、设务挂载时拦截,还没有确定是不是要拦截ioctrl。 希望各位有相关经验的朋友能给予帮助。
安卓通过蓝牙实现两部安卓设备的通信
现在有两部安卓设备,一部是手机,一部是安卓系统的外设,要求手机设备上安装软件A,外设上安装软件B,二者之间通过蓝牙发送“开启”、“关闭”两个消息,软件B接收消息做出相应处理。 现在有几种解决方法 #一、先连接两部设备的蓝牙,然后进入软件发送消息# 这种是最理想的方法,两部设备先连接蓝牙,手机端软件进入后无需配置,调用系统已连接好的蓝牙发送消息,外设中的软件B开启后就一直监听蓝牙端发送的消息。 技术问题有以下几点: 1. 1.手机端软件A是否可以调用系统以已链接好的蓝牙发送消息 2. 2.外设端软件B如何监听蓝牙,怎么接收手机端发送过来的消息 #二、在软件中配置链接蓝牙,发送消息# 这种方法网上很多教程,但对我来说有几个问题,外设上软件会一直运行,但手机上有时候会重启软件A,那这时之前的连接就断开了,这时候就得还得重新配置蓝牙链接,得重新操作外设上的软件,这不符合客户要求,请问有什么解决办法
蓝牙Android外设中,希望能加上使用NFC 蓝牙外设辅助配对?
在做一个蓝牙Android外设中,希望能加上使用NFC 蓝牙外设辅助配对(就好像NFC耳机或者音响)。 不知道是否可以将蓝牙的MAC地址写入到NFC标签中实现此功能? 要按照什么格式写入? 从其他的资料中看到TII2C TRF7970A_MSP430G2553NFCandRFIDboard 的解决方案,但是感觉太复杂,还要增加新的TI公司的硬件。
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] watch(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] cal(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:eclipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 varchar 20 √ newsContent 文章内容 text newsStatus 是否审核 varchar 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
相关热词 c# singleton c#中类的默认值是 c#各种进制之间的转换 c# 正则表达式保留汉字 c#后台跨域 c#基础代码大全 c#指定combox选择 c#关系 mono c# 相差毫秒 用c#做一个简易计算器
立即提问