STM32-USB鼠标解析

STM32-USB鼠标解析
STM32-USB鼠标解析

一、USB的“JoyStickMouse”例程结构分析

1、例程的结构

(1)底层结构

包括5个文件:usb_core.c(USB总线数据处理的核心文件),usb_init.c,usb_int.c(用于端点数据输入输入中断处理),usb_mem.c(用于缓冲区操作),usb_regs.c(用于寄存器操作)。它们都包含了头文件“usb_lib.h”。在这个头文件中,又有以下定义:

#include "usb_type.h"

#include "usb_regs.h"

#include "usb_def.h"

#include "usb_core.h"

#include "usb_init.h"

#include "usb_mem.h"

#include "usb_int.h"

usb_lib.h中又包含了七个头文件,其中usb_type.h中主要是用typedef为stm32支持的数据类型取一些新的名称。usb_def.h中主要是定义一些相关的数据类型。

还有一个未包含在usb_lib.h中的头文件,usb_conf.h用于USB设备的配置。(2)上层结构

上层结构总共5个文件:hw_config.c(用于USB硬件配置)、usb_pwr.c(用于USB连接、断开操作)、usb_istr.c(直接处理USB中断)、usb_prop.c(用于上层协议处理,比如HID协议,大容量存储设备协议)、usb_desc.c(具体设备的相关描述符定义和处理)。

可见,ST的USB操作库结构十分清晰明了,我先不准备直接阅读源代码。而是先利用MDK的软件模拟器仿真执行,先了解一下设备初始化的流程。

2、设备初始化所做的工作

(1)Set_System(void)

这个是main函数中首先调用的函数,它位于hw_config.c文件中。它的主要功能是初始化时钟系统、使能相关的外围设备电源。

配置了JoyStickMouse所用到的5个按键,并且配置了两个EXTI中断,一个是用于把USB从挂起模式唤醒,还有一个用途未知。

(2)USB_Interrupts_Config();

这个是main函数中调用的第二个函数,它也位于hw_config.c文件中。主要功能是配置USB所用到的中断。

跟踪到代码中,主要设配置了USB低优先级中断和唤醒中断,又有一个EXTI 中断功能未知。

(3)Set_USBClock()

这个是main函数中调用的第三个函数,它也位于hw_config.c文件中。它的功能是配置和使能USB时钟。

(4)USB_Init(void)

这个是main函数中调用的第四个函数,它也位于usb_init.c文件中。它初始化了三个全局指针,指向DEVICE_INFO、USER_STANDARD_REQUESTS 和DEVICE_PROP结构体。

后面两个是函数指针结构体,里面都是USB请求实现、功能实现的函数指针。

void USB_Init(void)

{

pInformation = &Device_Info;

pInformation->ControlState = 2;

pProperty = &Device_Property;

pUser_Standard_Requests = &User_Standard_Requests;

/* Initialize devices one by one */

pProperty->Init();

}

这三个结构体都是与具体设备枚举和功能实现相关的,定义在usb_prop.c和usb_desc.c文件中。

DEVICE_PROP Device_Property=

{

Joystick_init,

Joystick_Reset,

Joystick_Status_In,

Joystick_Status_Out,

Joystick_Data_Setup,

Joystick_NoData_Setup,

Joystick_Get_Interface_Setting,

Joystick_GetDeviceDescriptor,

Joystick_GetConfigDescriptor,

Joystick_GetStringDescriptor,

0,

0x40 /*MAX PACKET SIZE*/

};

USER_STANDARD_REQUESTS User_Standard_Requests=

{

Joystick_GetConfiguration,

Joystick_SetConfiguration,

Joystick_GetInterface,

Joystick_SetInterface,

Joystick_GetStatus,

Joystick_ClearFeature,

Joystick_SetEndPointFeature,

Joystick_SetDeviceFeature,

Joystick_SetDeviceAddress

};

Usb_init()函数调用pProperty->Init()(实质上就是Joystick_init)完成设备的初始化。

上层程序调用下次函数是常规性的操作。而下层函数(usb_init相对于

usb_prop是输入底层操作文件)调用上层文件函数我们称之为回调。

回调函数的意义在于同一种操作模式、提供不同的回调函数则可以实现不同的功能。Windows中处理消息,好像也用到了这种模式。

回调函数的实现方法是函数指针数组。这是指针的高级应用。

这是函数的代码:

void Joystick_init(void)

{/* Update the serial number string descriptor with the data from the unique

ID*/

Get_SerialNum();

//获取设备序列号,转变为unicode字符串

pInformation->Current_Configuration = 0;

/* Connect the device */

PowerOn();

//连接USB设备,实质是能让主机检测到了。

/* USB interrupts initialization */

_SetISTR(0);

/* clear pending interrupts */

wInterrupt_Mask = IMR_MSK;

_SetCNTR(wInterrupt_Mask); /* set interrupts mask */

bDeviceState = UNCONNECTED;

}

实质上,代码执行到这里,开发板已经可以响应主机发来的数据了。但我还是先把main()函数的代码看完吧。

(5)SysTick_Config();

这个函数调用主要是为程序中用到的精确延时作配置。

3、进入主循环

进入主循环的工作就两个:

Joystick_Send(JoyState())。

JoyState()用来获取按键的状态。

Joystick_Send(JoyState())用来把按键状态发到主机。当然这里真正的发送工作并不是由该代码完成的。它的工作只是将数据写入IN端点缓冲区,主机的

IN令牌包来的时候,SIE负责把它返回给主机。

主要代码如下:

UserToPMABufferCopy(Mouse_Buffer, GetEPTxAddr(ENDP1), 4);

//从用户复制四个字节到端点1缓冲区,控制端点的输入缓冲区。SetEPTxValid(ENDP1);/* enable endpoint for transmission */

4、中断处理过程大致理解

(1)usb_istr()函数中的中断处理简单分析

有用的代码大概以下几段,首先是处理复位的代码,调用设备结构中的复位处理函数。

wIstr = _GetISTR();

if (wIstr & ISTR_RESET & wInterrupt_Mask)

{

_SetISTR((u16)CLR_RESET); //清复位中断

Device_Property.Reset();

}

处理唤醒的代码:

if (wIstr & ISTR_WKUP & wInterrupt_Mask)

{

_SetISTR((u16)CLR_WKUP);

Resume(RESUME_EXTERNAL);

}

处理总线挂起的代码:

if (wIstr & ISTR_SUSP & wInterrupt_Mask)

{

if (fSuspendEnabled) /* check if SUSPEND is possible */

{

Suspend();

}

else

{

/* if not possible then resume after xx ms */

Resume(RESUME_LATER);

}

/* clear of the ISTR bit must be done after setting of CNTR_FSUSP */ _SetISTR((u16)CLR_SUSP);

}

处理端点传输完成的代码,这段是最重要的,它调用底层usb_int.c()文件中的CTR_LP()函数来处理端点数据传输完成中断。

if (wIstr & ISTR_CTR & wInterrupt_Mask)

{

CTR_LP();/* servicing of the endpoint correct transfer interrupt */ }

二、STM32处理器的USB接口

1、接口模块的内部结构

在书上有一个很好的USB内部接口模块内部结构图,比较好的解释了各个模块之间的关系,我这里试着用我自己的理解阐述一下吧。

首先在总线端(与D+、D-相连的那一端),通过模拟收发器与SIE连接。SIE 使用48MHz的专用时钟。

与SIE相关的的有三大块:CPU内部控制、中断和端点控制寄存器,挂起定时器(这个好像是USB协议的要求,总线在一定时间内没有活动,SIE模块能够进入SUSPEND状态以节约电能),还有包缓冲区接口模块。

说到包缓冲区接口模块,这个对应的含义是,USB设备应该提供USB包缓冲区。这块缓冲区同时受到SIE和CPU核心的控制,用于CPU与SIE共享达到数据传输的目的。

所以CPU通过APB1总线接口访问,SIE通过包缓冲区接口模块访问,中间通过Arbiter来协调访问。

当然我们关注的中心点是控制、中断和端点控制寄存器。我们通过这些寄存器来获取总线传输的状态,控制各个端点的状态,并可以产生中断来让CPU处理当前的USB事件。

CPU可以通过APB1总线接口来访问这些寄存器。它们使用的都是PCLK1时钟。

2、USB模块的寄存器认识

(1)

控制寄存器CNTR

传输完

成中断

允许位。

CTRM,

1有效,

如果SIE 置位传输完成标志,则相应的数据传输完成中断发生。

第15位包缓冲

区溢出

中断允

许位

错误中

断允许

唤醒中

断允许

位。

WKUP

M。1有

效,如果

唤醒请

求标志

位置位,

则产生

唤醒中

断。

挂起中

断允许

位。

SUSPM

,1有效,

当总线

挂起标

志置位

时,发生

挂起中

断。

复位中

断允许

位。

RESET

M。1有

效,软件

强制复

位和总

线复位

信号,都

能触发

复位中

断。

帧首中

断允许

期望帧

首中断

允许位。

ESOFM。

它的含

义是没

有收到

帧首信

号,允许

发生中

断。

第8位

向主机

发送的

唤醒请

求,

RESUM

E。1有

效,主机

强制挂

起控制,

FSUSP。

1有效。

与由于

总线无

活动引

低功耗

模式。前

提是先

进入挂

起状态。

由软件

设置,一

断电模

式控制

位。

PDWN。

此位为1

时,USB

模块关

强制复

位控制。

FRES。

与总线

上的复

位信号

产生相

收到该信号,将唤醒设备。这个由软件置位。

第4位起挂起

的效果

相同。

般又硬

件复位

(被唤

醒后自

动清

零)。

闭。同的效

果。也能

产生复

位中断.

第0位。

(2)

中断状态寄存器ISTR

这个寄存器主要是反映USB模块当前的状态的。第15-8为与控制寄存器的中断允许是意义对应的。相应的标志位置位,且中断未屏蔽,则向CPU发出对应的中断。

CTR标

志,数据传输完成后硬件置1.PMAOVR

标志

ERR标

WKUP

请求,总

线检测

到主机

唤醒请

求时由

硬件置

位。

SUSP

请求标

志位。

RESET

请求标

志位。

SOF帧

首标志

ESOF,

期待帧

首标志。

DIR传输方向,此

位由硬件控制。IN

时为0,OUT为1.

第4位。

发生数据传输的端点的地址。

(3)USB设备地址寄存器

第7位,EF,USB模块允许位。如果EF=0,则USB模块将停止工作。第6-0位。USB当前使用的地址。复位时为0.

(4)

端点状态和配置寄存器,8个寄存器,支持8个双向端点和16个单向端点。

CTR_RX,正确接收标志位。

第15位。DTOG_RX,用于

检测的数据翻转

位。一般由硬件自

动设置,软件写1可

使其手动翻转。

STAT_RX,占据两位。

00表示该端点不可用,无回应。

01表示响应STALL

10响应NAK

11表示端点有效,可接收数据。

SETUP标志。收到SETUP令牌包时置位。用户收到数EP_TYPE,两位,表示端点类型。

00表示批量端点。

01表示控制端点

EP_KIND,端点特

殊类型。在

EP_TYPE=01时,

据后需检查次位。第11位。10表示等时端点。

11表示中断端点。

表示设备期望主机

的0字节状态包。

CTR_TX。

正确发送标志。主机的IN包之后。第7位。DTOG_TX,用于检

测的数据翻转位。

一般由硬件自动设

置,软件写1可使其

手动翻转。

STAT_TX,占据两位。

00表示该端点不可用,无回应。

01表示响应STALL

10响应NAK

11表示端点有效,可发送数据。

端点地址:EA【3:0】,表明该寄存器对应的端点号码。比如1、2号寄存器都可以对应端点1(在双缓冲情况下)。

第3-0位。

(5)

端点描述符表相关寄存器

首先有一个描述符表地址寄存器,指明了包缓冲区内端点描述符表的地址。

每一个端点都对应一个描述附表。描述符表也在包缓冲区内。每个端点寄存器对应的描述符表的地址可根据公式计算。

单缓冲、双向的端点描述符表有四项,每项占据两个字节:分别是端点n的发送缓冲区地址、发送字节数、接收缓冲区地址、接收字节数。

了解USB相关寄存器的知识以后,接下来就可以分析“JoyStickMouse”详细的工作过程了。

三、USB的“JoyStickMouse”工作过程详细分析

1、初始化过程叙述

从main()函数开始

(1)Set_System(void)的工作过程

由于这些代码都是采用库代码,所以我主要分析每个代码具体做了什么工作。有些常用、类似的代码这里就不列出来了。

先将RCC部分复位,系统使用内部振荡HSI,8MHz——RCC_DeInit();。使能HSE——RCC_HSEConfig(RCC_HSE_ON);

设置HCLK = SYSCLK——RCC_HCLKConfig(RCC_SYSCLK_Div1);

设置PCLK2,PCLK1——RCC_PCLK2Config(RCC_HCLK_Div1);

设置PLL,使能PLL——PLL采用HSE,输出=HSE X 9;

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

系统时钟采用PLL输出——

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

使能PWR控制,目的是为了控制CPU的低功耗模式;

将所有输入口初始化为模拟输入——GPIO_AINConfig();

使能USB上拉控制GPIO端口的时钟,这个端口设置为低电平时,USB外设会被集线器检测到,并报告给主机,这也是设备枚举的开始;

将这个端口的模式设置为开漏输出;

初始化上下左右四个按键为上下拉输入;

配置GPIOG8为EXTI8中断输入引脚,这个是在外部按键输入引起中断。

配置EXTI18中断。这个是发生USB唤醒事件时用。

EXTI_InitStructure.EXTI_Line = EXTI_Line18; // USB resume from suspend mode

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

(2)USB_Interrupts_Config(void)的工作过程

设置向量表位置在FLASH起始位置——

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00);

设置优先级分组,1位用于抢占组级别。其余用于子优先级——

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

接下来配置、使能了三个中断,包括USB低优先级中断、USB唤醒中断(EXTI18)、和EXTI8(按键控制)中断。

它的优先级设置有些问题,明明只有一位用于抢占优先级。它把EXTI8的抢占优先级设为2。结果在调试时发现,它的抢占优先级仍然是0。

(3)Set_USBClock()的工作过程

这个代码就两句话:

RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);

作用是设置并使能USB时钟,从RCC输出可以看到,USB时钟是48MHz。

(4)USB_Init()的工作过程

void USB_Init(void)

{

pInformation = &Device_Info;

pInformation->ControlState = 2;

pProperty = &Device_Property;

//这个是设备本身支持的属性和方法

pUser_Standard_Requests = &User_Standard_Requests; //这个是主机请求的实现方法。

pProperty->Init();

//回调设备的初始化例程。

}

这个主要是初始化了三个全局结构体指针,pInformation表明当前连接的状态和信息,pProperty表明设备支持的方法,pUser_Standard_Requests是主机请求实现的函数指针数组。

Device_Info是一个结构体,包括11个成员变量。这里是将它的ControlState 设为2,意义现在还不十分明了。

typedef struct _DEVICE_INFO

{

u8 USBbmRequestType;

/* bmRequestType */

u8 USBbRequest;

/* bRequest */

u16_u8 USBwValues;

/* wValue */

u16_u8 USBwIndexs;

/* wIndex */

u16_u8 USBwLengths;

/* wLength */

u8 ControlState;

/* of type CONTROL_STATE */

u8 Current_Feature;

u8 Current_Configuration;

/* Selected configuration */

u8 Current_Interface;

/* Selected interface of current configuration */

u8 Current_AlternateSetting;/* Selected Alternate Setting of current interface*/

ENDPOINT_INFO Ctrl_Info;

//端点信息结构体

}DEVICE_INFO;

最后调用pProperty->Init(),实质就是调用Joystick_init(void)。

在这个函数中,首先获取设备版本,并转换为Unicode存入版本号字符串。

——Get_SerialNum();

设备当前配置置为0。然后调用PowerOn(),这个函数实质上将D+上拉,此时USB设备就能被集线器检测到了。因此分析进入下一个流程。

2、进入设备检测状态

(1)在PowerOn()中执行的情况。

在USB_init()中调用PowerOn(),而它先调用

USB_Cable_Config(ENABLE),这个函数实质上将USB连接控制线设置为低电平,然后设备就可以检测到设备了。

当集线器报告设备连接状态,并收到主机指令后,会复位USB总线,这需要一定的时间(这段时间内设备应该准备好处理复位指令)。但是现在设备初始化程序将继续往下进行,因为它还没有使能复位中断。

wRegVal = CNTR_FRES;

_SetCNTR(wRegVal);

//这句话实际上使能了USB模块的电源,因为上电复位时,CNTR寄存器的断电控制为PDWN位是1,模块是断电的。

这句话虽然将强制复位USB模块,但由于复位中断允许位没有使能,不会引起复位中断,而间接上由使PDWN=0,模块开始工作。

_SetCNTR是一个宏,将wRegVal赋值给CNTR寄存器,此时所有的中断被屏蔽。

再接下来两句指令又将清除复位信号。

然后清除所有的状态位。——_SetISTR(0);

接下来是很关键的两句话:

wInterrupt_Mask=CNTR_RESETM| CNTR_SUSPM | CNTR_WKUPM;

_SetCNTR(wInterrupt_Mask);

后面一个语句执行后,复位中断已经被允许,而此时集线器多半已经开始复位端口了。或者说稍微有限延迟,设备固件还能继续初始化一些部件,但已经不会影响整个工作流程了。

所以接下来,分析直接进入复位中断。

(2)复位中断的处理。

当复位中断允许、且总线被集线器复位的时候,固件程序进入USB_LP中断。中断程序直接调用USB_Istr(void)程序。

接下来讲对中断位进行判断:

if (wIstr & ISTR_RESET & wInterrupt_Mask)

{

_SetISTR((u16)CLR_RESET);

//先清除复位中断位

Device_Property.Reset();

//进入设备定义的复位过程。实际上是调用JoyStick_Reset()函数进行处理。

}

(3)JoyStick_Reset()函数的处理。

这里将一句句来分析:

void Joystick_Reset(void)

{

pInformation->Current_Configuration = 0;

//当前配置为0

pInformation->Current_Interface = 0;/当前接口为0

pInformation->Current_Feature = Joystick_ConfigDescriptor[7];

//需要总线供电

SetBTABLE(BTABLE_ADDRESS);//设置包缓冲区地址。

SetEPType(ENDP0, EP_CONTROL);

//端点0为控制端点

SetEPTxStatus(ENDP0, EP_TX_STALL);

//端点状态为发送无效,也就是主机IN令牌包来的时候,回送一个STALL。SetEPRxAddr(ENDP0, ENDP0_RXADDR); //设置端点0描述符表,包括接收缓冲区地址、最大允许接收的字节数、发送缓冲区地址三个量。SetEPTxAddr(ENDP0, ENDP0_TXADDR); //这是发送缓冲区地址

Clear_Status_Out(ENDP0);

//清除EP_KIND的STATUS_OUT位,如果改位被设置,在控制模式下只对0字节数据包相应。其它的都返回STALL。主要用于控制传输的状态过程。SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); //接收缓冲区支持64个字节。

SetEPRxValid(ENDP0);

//使能端点0的接收,因为很快就要接收SETUP令牌包后面跟着的数据包了。

SetEPType(ENDP1, EP_INTERRUPT);

//端点1为中断端点。

SetEPTxAddr(ENDP1, ENDP1_TXADDR); //设置发送缓冲区地址。

SetEPTxCount(ENDP1, 4);

//每次发送四个字节

SetEPRxStatus(ENDP1, EP_RX_DIS);

//接收禁止,只发送Mouse信息,而不从主机接收。

SetEPTxStatus(ENDP1, EP_TX_NAK); //现在发送端点还不允许发送数据。

bDeviceState = ATTACHED;

//连接状态改为已经连接,默认地址状态。

SetDeviceAddress(0); //地址默认为0.

}

复位中断执行完成后,开发板的USB接口能够以默认地址对主机来的数据包进行响应了。这个阶段的分析到此结束,下一个阶段就是正式分析代码实现的枚举过程了。

四、USB的“JoyStickMouse”工作过程详细分析

1、枚举第一步:获取设备的描述符

从USB_init()开始

(1)先要允许数据传输完成中断

在poweron()函数后面紧跟着几句话:

PowerOn();

//这句执行完,设备被主机检测到,并且能够响应复位中断了。

_SetISTR(0);

/* clear pending interrupts */

wInterrupt_Mask = IMR_MSK;

_SetCNTR(wInterrupt_Mask); /* set interrupts mask */

//以上这两句话将允许所有的USB中断

bDeviceState = UNCONNECTED;

//设备状态置位为未连接状态。这里我不太理解。这时候即使复位中断未发生,最起码设备已经算是连接入总线了,为什么这个状态还要设置为

“未连接”呢?

(2)主机获取描述符

主机进入控制传输的第一阶段:建立事务,发setup令牌包、发请求数据包、设备发ACK包。

主机发出对地址0、端点0发出SETUP令牌包,首先端点0寄存器的第11位SETUP位置位,表明收到了setup令牌包。

由于此时端点0数据接收有效,所以接下来主机的请求数据包被SIE保存到端点0描述附表的RxADDR里面,收到的字节数保存到RxCount里面。

端点0寄存器的CTR_RX被置位为1,ISTR的CTR置位为1,DIR=1,

EP_ID=0,表示端点0接收到主机来的请求数据。此时设备已经ACK主机,将触发正确传输完成中断,下面就进入中断看一看。

_SetISTR((u16)CLR_CTR); /*首先清除传输完成标志*/

EPindex = (u8)(wIstr & ISTR_EP_ID); //获取数据传输针对的端点号。

if (EPindex == 0)

//如果是端点0,这里的确是端点0

SaveRState = _GetEPRxStatus(ENDP0); //保存端点0状态,原本是有效状态。

SaveTState = _GetEPTxStatus(ENDP0);

_SetEPRxStatus(ENDP0, EP_RX_NAK); //在本次数据处理好之前,对主机发来的数据包以NAK回应

_SetEPTxStatus(ENDP0, EP_TX_NAK);

if ((wIstr & ISTR_DIR) == 0) //如果是IN令牌,数据被取走

{

_ClearEP_CTR_TX(ENDP0);

In0_Process();

//调用该程序处理固件数据输出后的工作。

_SetEPRxStatus(ENDP0, SaveRState);

_SetEPTxStatus(ENDP0, SaveTState);

return;

}

Else

//DIR=1时,要么是SETUP包,要么是OUT包。

{

//这里先分析SETUP包。

wEPVal = _GetENDPOINT(ENDP0);

//获取整个端点0状态

if ((wEPVal & EP_CTR_TX) != 0)

//这种情况一般不太可能,

{

//如果出现表示同时TX和RX同时置位。

}

else if ((wEPVal &EP_SETUP) != 0)

//我们的程序会执行到这里

{

_ClearEP_CTR_RX(ENDP0);

Setup0_Process();

//主要是调用该程序来处理主机请求。

_SetEPRxStatus(ENDP0, SaveRState);

_SetEPTxStatus(ENDP0, SaveTState);

return;

}

else if ((wEPVal & EP_CTR_RX) != 0) //暂时不执行的代码先删除掉。

{

}

}

}/* if(EPindex == 0) */

后面处理其他端点的代码就先不看了。

}/* while(...) */

(3)Setup0_Process()函数的执行分析

这个函数执行的时候,主机发来的请求数据包已经存在于RxADDR缓冲区了。大部分的标志位已经清除,除了SETUP位,这个味将由下一个令牌包自动清除。进入处理函数:

pBuf.b = PMAAddr + (u8 *)(_GetEPRxAddr(ENDP0) * 2); //这是取得端点0接收缓冲区的起始地址。

PMAAddr是包缓冲区起始地址,_GetEPRxAddr(ENDP0)获得端点0描述符表里的接收缓冲区地址,为什么要乘以2呢?大概因为描述符表里地址项为16位,使用的是相对偏移。

if (pInformation->ControlState != PAUSE)

{

pInformation->USBbmRequestType = *pBuf.b++; //请求类型,表明方向和接收对象(设备、接口还是端点)此时为80,表明设备到主机pInformation->USBbRequest = *pBuf.b++; /*请求代码,第一次时应该是6,表明主机要获取设备描述符。*/

pBuf.w++;

pInformation->USBwValue = ByteSwap(*pBuf.w++); /* wValue */ pBuf.w++;

//我觉得这里可能有些问题。

pInformation->USBwIndex

= ByteSwap(*pBuf.w++); /* wIndex */

pBuf.w++;

pInformation->USBwLength = *pBuf.w; /* wLength */

}

pInformation->ControlState = SETTING_UP;

if (pInformation->USBwLength == 0)

{

NoData_Setup0();

else

{

Data_Setup0();

//这次是有数据传输的,所以有进入该该函数。

}

return Post0_Process();

(4)Data_Setup0()函数的执行分析

CopyRoutine = NULL; //这是一个函数指针,由用户提供。

wOffset = 0;

if (Request_No == GET_DESCRIPTOR) //如果是获取设备描述符

{

if(Type_Recipient==(STANDARD_REQUEST| EVICE_RECIPIENT)) {

u8 wValue1 = pInformation->USBwValue1;

if (wValue1 == DEVICE_DESCRIPTOR)

{

CopyRoutine = pProperty->GetDeviceDescriptor;

} //获取设备描述符的操作由用户提供。

if (CopyRoutine)

{

pInformation->Ctrl_https://www.360docs.net/doc/2211513591.html,b_wOffset = wOffset;

pInformation->Ctrl_Info.CopyData = CopyRoutine;

(*CopyRoutine)(0); //这个函数这里调用的目的只是设置了pInformation 中需要写入的描述符的长度。

Result = USB_SUCCESS;

}

if (ValBit(pInformation->USBbmRequestType, 7))

//此时为80

{

//上面这个语句主要是判断传输方向。如果为1,则是设备到主机

vu32 wLength = pInformation->USBwLength;这个一般是64

if (pInformation->Ctrl_https://www.360docs.net/doc/2211513591.html,b_wLength> wLength)

{

//设备描述符长度18

pInformation->Ctrl_https://www.360docs.net/doc/2211513591.html,b_wLength = wLength;

}

//有些细节暂时先放着

pInformation->Ctrl_Info.PacketSize = pProperty->MaxPacketSize; DataStageIn();

//最主要是调用这个函数完成描述符的输出准备

}

(5)DataStageIn()函数的执行分析

以下是主要执行代码:

DataBuffer = (*pEPinfo->CopyData)(Length); //这个是取得用户描述符缓冲区的地址。这里共18个字节

UserToPMABufferCopy(DataBuffer, GetEPTxAddr(ENDP0), Length);//这个函数将设备描述符复制到用户的发送缓冲区。

SetEPTxCount(ENDP0, Length);

//设置发送字节的数目、18

pEPinfo->Usb_wLength -= Length;等于0

pEPinfo->Usb_wOffset += Length;偏移到18

vSetEPTxStatus(EP_TX_VALID); //使能端点发送,只要主机的IN令牌包一来,SIE就会将描述符返回给主机。

USB_StatusOut();/*这个实际上是使接收也有效,主机可取消IN。*/ Expect_Status_Out:

pInformation->ControlState = ControlState;

(6)执行流程返回到CTR_LP(void)

_SetEPRxStatus(ENDP0, SaveRState);

_SetEPTxStatus(ENDP0, SaveTState);

//由于vSetEPTxStatus(EP_TX_VALID)实际改变了SaveTState,所以此时端点发送已经使能。

return;

(7)主机的IN令牌包

获取描述符的控制传输进入第二阶段,主机首先发一个IN令牌包,由于端点0发送有效,SIE将数据返回主机。

主机方返回一个ACK后,主机发送数据的CTR标志置位,DIR=0,EP_ID=0,表明主机正确收到了用户发过去的描述符。固件程序由此进入中断。

此时是由IN引起的。

主要是调用In0_Process()完成剩下的工作。

(7)追踪进入函数In0_Process()

此时实际上设备返回描述符已经成功了。

这一次还是调用DataStageIn()函数,但是目的只是期待主机的0状态字节输出了。

if ((ControlState == IN_DATA) || (ControlState ==

键盘鼠标术语专业解析

键鼠产品专业术语全面解析 前言:键盘鼠标是大家每天接触最多的电脑配件之一,作为最主要的输入工具,键鼠早已是每部电脑不可或缺的一部分。另外,还有为数不少的外设爱好者,喜欢各种精美的键鼠,常常活跃在外设论坛。于是,我们经常听到DPI、FPS等等关于键鼠的术语,到底它们代表什么意思呢?今天我们就一起来次大充电吧! 一、各类鼠标引擎工作原理 传统光学鼠标的工作原理 传统光学鼠标工作原理示意图

光学跟踪引擎部分横界面示意图 光学鼠标主要由四部分的核心组件构成,分别是发光二极管、透镜组件、光学引擎(Optical Engine)以及控制芯片组成。 光学鼠标通过底部的LED灯,灯光以30度角射向桌面,照射出粗糙的表面所产生的阴影,然后再通过平面的折射透过另外一块透镜反馈到传感器上。 什么是激光鼠标? 学过物理学的朋友都知道,光具有波粒二象性,干涉和衍射特性就是激光鼠标产生的灵感和起源。激光鼠标其实也是光电鼠标,只不过是用激光代替了普通的LED光.好处是可以通过更多的表面,因为激光是Coherent Light(相干光),几乎单一的波长,即使经过长距离的传播依然能保持其强度和波形;而LED光则是Incoherent Light(非相干光)。 激光鼠标传感器获得影像的过程是根据,激光照射在物体表面所产生的干涉条纹而形成的光斑点反射到传感器上获得的,而传统的光学鼠标是通过照射粗糙的表面所产生的阴影来获得。因此激光能对表面的图像产生更大的反差,从而使得“CMOS成像传感器”得到的图像更容易辨别,提高鼠标的定位精准性。

罗技“DARK FIELD FIELD””无界激光引擎 罗技“DARK FIELD”无界激光引擎 罗技Darkfield无界技术采用暗视野显微来探测表面上的微观颗粒和微小的划痕,而不是追踪表面本身。与我们的眼睛能够看清夜晚的天空一样,鼠标的传感器将洁净的玻璃视为有着许多亮点的黑色背景,而这些亮点就是灰尘。然后,传感器能够通过这些点的运动精确追踪鼠标的移动。(《真正征服玻璃!罗技09新旗舰鼠标视频评测》) 微软蓝影引擎的技术原理:

14种常见淡水鱼类垂钓方法解析

14种常见淡水鱼类垂钓方法 ?2012/6/24 14:43:27 ?铁血随风321 ?发帖于:钓鱼技巧 共 1 条评论 浏览 498 IP 如何垂钓马口鱼。 马口鱼大都生活在江河、湖泊、水库和山间溪流的中上层水域。更多的生活在山涧溪流中。清明后直到深秋季节,在无风的睛天,可成群地看到、但在大风天即沉入水底。此鱼个体不大,却是凶猛肉食鱼类。主要狩取小型鱼、幼鱼和水生昆虫为生。是水域中有害鱼类之一。 [ 转自铁血社区 https://www.360docs.net/doc/2211513591.html,/ p1.钓具选用:此鱼大都在50-150克,约4米左右手杆即可,钩选用伊势尼4-5号,线直径0.2-0.25亳米足可应对。用手杆浮钓,也可采取海杆串钩底钓。 p2.钓饵选用:可使用蚯蚓、蛆虫、也可使用小鱼、小活虾。 p3.钓点选择:江河溪流、水库有水草的砂砾浅水区和有水流的沟口。春、夏、秋三季每天傍晚,尤以夏季最佳。此鱼在睛天无风时最适宜垂钓,而阴天刮风则欠佳。如何垂钓桂鱼

桂鱼的习性和生活环境:桂鱼是定居性鱼类,不作长距离的洄游。常栖息在缓流或有回流的河道交*处。多在2--4米水深水底为硬泥、沙泥、石桥、石滩附近。成鱼常在水草丛中贴底,而在流水环境中往往上浮和逆水而上。冬季则生活在较深洞穴中,很少活动。春季大都在浅水区觅食,夏季同其它鱼种,则活跃,是垂钓最佳良机。 钓具的应用:手竿、海竿、甚至拉砣皆可、但要根椐钓场的具体自然条件灵活选用。竿尖相对较硬为好。钓线:直径0.35--0.4毫米。子线梢粗于主线[如用手杆可采用齐杆线钓法]。钓钩:选用钩门大钩,如伊势尼12--15号或15号鲤钩。 钓饵的选用:以小鱼为主。其次是小虾[冬季用红虫也可]。桂鱼喜食活饵,同黑鱼相似是吞食性鱼类。小活鱼的个体以8--10厘米为好,钩在鱼背上,虾也用同样方法。 [ 转自铁血社区 https://www.360docs.net/doc/2211513591.html,/ 垂钓方法:p1.底层浮钓法,形同浮垂钓鲢鱼。不同的是小鱼虾在临近水底游动,,桂鱼是否吃食完全在观查浮漂,不完全相似黑鱼、鲇鱼拉饵就跑、而是浮漂慢慢移动,此时即可提竿。 如何垂钓鲂鱼 鲂鱼是水中中层偏下层草食性鱼类、平时栖息在水底为淤泥、并有水草水域。按北京气温而言约5-6月份为繁殖期。成鱼主要成鱼主要摄苦草、黑藻、和植物碎屑,偶尔也食浮游生物。生长速度也较快、前六年曾在沙厂水库钩到7.8斤大鲂但大都在2斤左右。

鼠标的操作方法有

鼠标的操作方法有: 1、左键单击:迅速按下鼠标左键,再松开鼠标。 2、左键双击:迅速按下鼠标左键两下,再会开鼠标。 3、右键单击:迅速按下鼠标右键一下,再松开鼠标。 4、中键滚动:滚动鼠标中间滚动轮, 5、拖动:按下鼠标左键不放,拖动鼠标到目标地方。操作系统的概念:是对计算机的硬件资源和软件资 用计算机的一种软件。 计算机的操作系统的功能: 1)对处理器的管理; 2)对存储器的管理; 3)对设备的管理; 4)对文件的管理; 5)对作业的管理; 计算机操作系统的分类: 1)单用户操作系统; 2)分时操作系统; 3)网络操作系统; 4)实时操作系统; 5)批处理操作系统; 6)分布式操作系统; Windows2000操作系统 常用术语 A.用户:在服务器上具有一定权限的使用者; B.密码:一组用来验证身份的代码; C.应用程序:一组完成指定任务的程序。 D.文档:用应用程序完成的一组信息的集合,它包 括文件格式,文件内容,可以是一篇文章、一张 图片、一张表格等; E.文件:一组信息的集合,以文件名来存取; F.文件夹:用来进行存放各种不同类型的文件,下 一组文件夹; G.选定:指选定一个项目记一个标记,不产生动作; H.选择:指选定一个项目并产生一个动作。 I.组合键:是打开一个窗口的快速方法; 键盘的操作: 快捷键: Alt+Esc 窗口切换Ctrl+Esc 打开“开始”Alt+Tab 窗口切换Ctrl+shift 输入法切换 Alt+F4 关闭窗口Ctrl+F6 文档窗口切 换 Alt+Space 控制菜单Ctrl+Space 中英文切换 Ctrl+A 全选 Windows2000桌面的组成部份: 1、图标; 2、任务栏:(包括:开始按钮、快速启动栏、活动任 务栏、提示区) Word2000窗口组成部份: a)菜单栏:窗口顶端出现的一组命令,它用层叠的 字符表示,逻辑性强; 菜单可以分以下几类: 菜单栏上的下拉菜单 .........:包括【文件】、【编辑】、 【视图】、【插入】、【格式】、【工具】、【表格】、 【窗口】、【帮助】。 “【开始】”菜单; 控制菜单 ....; 快捷菜单 ....; b)标题栏; c)最大化(还原)最小化 d)关闭按钮; e)工具栏:常用工具栏,提供了部分命令和设置的 入口,使用图形的方式提供。是可以浮动 ..的。 f)任务栏:放置任务按钮,可以打开相应的窗口。 g)边框 h)滚动条 i)状态栏 Word2000的对话框的特点: 菜单栏中,有些命令后有3个点组成的省略号,这样的命令打开一个对话框,它也是一个特制的窗口,它的特点是:不可以最大化,最小化,不能改变其窗口的大小,只能移动和关闭。 它里面包括: 列表框:表现为一个方框,并在其右边有一个黑色向下的三角形▼标志,称为下拉钮,点击下拉钮时,就会出一个具有多项选择的列表,可以从中选其一。 菜单栏 控制图标 最小化、最大化(还原)关闭按钮 常用工具格式工具栏滚动条 工作区 状态栏 任务按钮及任务栏 第 1 页共2 页

鼠标的键盘使用方法

就可以用数字键盘控制了.1,2,3,6,9,8,7,4八个数字键是鼠标的(八个)方向键的替代键,5代替鼠标的单击(既可以是左键的单击,也可以是右键的单击,具体是哪 个键要看在tray中的鼠标键状态图标的指示),揿下5在鼠标键状态图标上的反应是相应的键的一次闪烁;“+”代替双击(同样也没有指定是哪个键的双击),在鼠标键图标 上的反应是相应的键连续闪烁两次;“*”代替左右两键的同时单击,在鼠标键图标上 的反应是相应的两个键同时闪烁一次,“/”是切换键,既是单击与双击间的切换,又是左键和右键间的切换;所有的这些状态都会在状态栏中的鼠标键图标上得到体现,当然左右键的状态是非常明显的显示在相应的图标上,而单击显示为灰色,双击显示为 黑色。“0(Ins)”键代替按下鼠标键(同样没有指明左右键),在鼠标键状态图标上的反应是相应的键由灰变黑,这个键为我们拖动文件夹,选择文档的部分内容提供了方便;“·(del)”键则代替释放鼠标键,在鼠标键图标上的反应是相应的键由黑变灰。还可以设置鼠标移动的速度(crl表示加速,shift表示减速),数字小键盘的开关键 不管你的桌面处于任何状态,按Win+E快捷键,打开Windows的资源管理器。此时 光标的默认位置定位于"我的电脑"上,按方向键移动到"控制面板"上,然后按Tab键跳动光标,继续按动方向键,选择"辅助选项",按Enter键确认,这时你会发现弹出一个"辅助选项属性"对话框。将Tab和方向键配合,选择对话框中的"鼠标"标签卡。到这一步,我们就可以着手设置"鼠标键"了。按下快捷键Alt+M,选中"使用'鼠标键'"复选框,就可以使"鼠标键"生效,做完这一步,可以使用小键盘来控制鼠标的指针方向和点击 操作。 上面的操作仅仅令"鼠标键"生效,如果想进一步设置鼠标键,则按Alt+S键,弹出"鼠 标键设置"对话框。按Alt+U选中"使用快捷方式",则以后你可以按"左Alt+在 Shift+NumLock"键以快速打开(关闭)"鼠标键"。按Alt+H选中"按住Ctrl键进行加速或按Shift键进行减速",则以后利用"鼠标键"移动"鼠标"时,可配合Ctrl键和Shift键 分别加速和减速移动鼠标指针。利用小键盘使用"鼠标键",NumLock是切换开关。如 果按"Alt+N"选定"打开",意即当NumLock按键处于打开状态时,小键盘用作"鼠标键";反之,按"Alt+F"选择"关闭",则意味着当NumLock按键处于关闭状态时,小键盘用作"鼠标键"。同理,按"Alt+S"键,选中"在屏幕上显示鼠标键状态"复选框,则可以看到 任务栏状态区中的"鼠标键"Tray标志,方便日后查看"鼠标键"状态以及设置相关参数。而鼠标键对鼠标操作的方法是: 1、移动 1) 要水平或垂直移动鼠标指针,请按小键盘上的"4"、"6"、"8"、"2"键,分别代表←、→、↑、↓四个方向。

如何用键盘控制鼠标的移动和击键

如何用键盘控制鼠标的移动和击键。。。。 2007-12-15 10:22 本文我就是全部用键盘控制鼠标进行复制与粘贴和发贴的。。。。。呵呵,熟悉一下用键盘 来控制鼠标的移动与击键,以备下次鼠标坏了,没法干活。。。。。。 自己看:在“开始”菜单上选择“设置”,“控制面板”,在“控制面板”上双击“辅助选项”图标,单击“鼠标器”标签,然后单击“使用鼠标键”。这样就可以用键盘来控制鼠标的光标,模拟鼠标的鼠标键都指键盘右侧的小键盘(数字键盘),使用时要使NumLock 键处于有效状态。以下就是鼠标键: 移动 8、2、4、6、7、9、1、3键,八个方位 长距离移动 Ctrl+以上八个键 选鼠标左键 / 选鼠标右键— 单击 5 双击 + 拖曳 0(INS) 释放 .(Del) 由此看出,单击鼠标左键即为/,5,拖动窗口为: 先移动到窗口的标题栏,再按INS,然后用“移动”键 将窗口移到合适的位置,最后按Del。 记住,由于数字小键盘不是真的鼠标,所以要领会它的一些规章制度。要领就是先确定下面的操作是左键呢还是右键,以及是单击呢还是双击,鼠标键是按下还是松开?然后再进行相关的操作。 如果您还没有听清的话,或者您想知道得更多一些,请参考相关的帮助文件。 3)用键盘的各种快捷键/组合键来代替鼠标的各种操作,当然这种方法的缺点就是要记忆许多的组合键,如同dos命令相对于windows操作来说的那种麻烦和扰人: [左键]大小键盘上的enter键。 [右键]用shift+F10可以完全代替,而alt+enter则是shift+F10+R的替代键:查看某选项(可以是文件,也可以是文件夹,甚至是硬盘)的属性。 [菜单的弹出与激活]可以用alt键或者组合键ctrl+f10来弹出第一个菜单,或者用alt+相应的字母,直接弹出对应的菜单;在子菜单中,可以直接用相应的缩写字母来执行对应的功能,也可以用键盘中的上下键移到相应的子菜单项上(特别是对于那些子菜单非常多,而我们需要的东东又在倒数几个的位置),再用enter键执行该功能。 [win键]^+ESC [选定、选择]SHIFT+方向键为行选择方式,SHIFT+ALT+方向键为列选择方式(列选择在word

鼠标的操作教案

鼠标的操作教案 鼠标的操作教案 一、教学目标: 鼠标的操作:单击、双击、拖动、移动、右击 二、教学重难点: 1、教学重点:熟练掌握鼠标的移动、单击、右击、拖动、双击的操作。 2、教学难点:鼠标的双击、拖动操作。 三、教学时间: 1课时 四、教学过程: (一)、情境导入 老师给大家引见一位老朋友,播放视频:《精灵鼠小弟》。 师:“同学们,你们有没有信心把鼠标的操作练好呢?

板书课题:鼠标的操作 我们可别辜负了白老师的期望啊!而且练好鼠标操作,不只是为了不再让老师生气,其实也是为你们自己的将来打好基础啊!现在日常的电脑操作中,鼠标的操作足以与键盘相提并论,成为最重要的输入设备之一。 (二)、学习基础知识,为鼠标的训练打好基础 1、观察鼠标的外型,了解鼠标各部分名称。 以“谁知道,这个可爱的小家伙为什么叫鼠标啊?” 这个问题,引导学生观察鼠标外形,通过实物让学生了解鼠标的各部名称。 2、鼠标的握法 老师示范讲解,学生练习并相互检查。 (手握鼠标,不要太紧,就像把手放在自己的膝盖上一样,使鼠标的后半部分恰好在手心下,食指和中指分别轻放在左右按键上,拇指和无名指、小拇指轻夹两侧,利用大拇指、无名指和小指移动鼠标器) (三)、学习鼠标操作,训练提高技能 1、鼠标的移动

(1)透过现象,发现、认识鼠标指针。 移动鼠标,请同学观察、发现电脑屏幕上的变化,并说说这是什么?(鼠标指针)(2)讨论鼠标指针的作用是什么? 鼠标指针和鼠标的关系是什么? (指示鼠标的位置。当我们握住鼠标在桌面上移动时,指针也随之移动,并且方向相关。)板书:移动 教师强调鼠标的确切位置是在鼠标图标的尖的部分,出示图例进行强调。(3)鼠标移动的训练: 师:“你们觉得鼠标的移动简单吗?(简单)可不一定啊!因为鼠标高手来移动鼠标,是要又快又准的。下面我们来玩一个《鼠标大冒险》的小游戏,就是看谁鼠标移动控制的好。要求你们在5分钟的时间里,完成树林和水下这两关,水平高的同学可以往后继续闯关。 (附移动练习游戏:鼠标大冒险) 2、鼠标的单击、双击、拖动、右击 (1)综合性任务,探索鼠标的操作

实战讲解防范网络钓鱼技术大全

实战讲解防范网络钓鱼技术大全 实战讲解防范网络钓鱼技术大全,此文是笔者为CCIDNET写的一篇约稿,希望指正。原文链接:转自:https://www.360docs.net/doc/2211513591.html,/art/302/20060106/408699_1.html 作者:曹江华 网络钓鱼(Phishing)一词,是“Fishing”和“Phone”的综合体,由于黑客始祖起初是以电话作案,所以用“Ph”来取代“F”,创造了”Phishing”,Phishing 发音与 Fishing 相同。“网络钓鱼”就其本身来说,称不上是一种独立的攻击手段,更多的只是诈骗方法,就像现实社会中的一些诈骗一样。攻击者利用欺骗性的电子邮件和伪造的Web站点来进行诈骗活动,诱骗访问者提供一些个人信息,如信用卡号、账户用和口令、社保编号等内容(通常主要是那些和财务,账号有关的信息,以获取不正当利益),受骗者往往会泄露自己的财务数据。诈骗者通常会将自己伪装成知名银行、在线零售商和信用卡公司等可信的品牌,因此来说,网络钓鱼的受害者往往也都是那些和电子商务有关的服务商和使用者。 一、网络钓鱼工作原理图 现在网络钓鱼的技术手段越来越复杂,比如隐藏在图片中的恶意代码、键盘记录程序,当然还有和合法网站外观完全一样的虚假网站,这些虚假网站甚至连浏览器下方的锁形安全标记都能显示出来。网络钓鱼的手段越来越狡猾,这里首先介绍一下网络钓鱼的工作流程。通常有五个阶段: 图1 网络钓鱼的工作原理 1.钓鱼者入侵初级服务器,窃取用户的名字和邮件地址 早期的网络钓鱼者利用垃圾邮件将受害者引向伪造的互联网站点,这些站点由他们自己设计,看上去和合法的商业网站极其相似。很多人都曾收到过来自网络钓鱼者的所谓“紧急邮件”,他们自称是某个购物网站的客户代表,威胁说如果用户不登录他们所提供的某个伪造的网站并提供自己的个人信息,这位用户在购物网站的账号就有可能被封掉,当然很多用户都能识破这种骗局。现在网络钓鱼者往往通过远程攻击一些防护薄弱的服务器,获取客户名称的数据库。然后通过钓鱼邮件投送给明确的目标。 2.钓鱼者发送有针对性质的邮件

音乐专业术语键盘专业术语

Grand staff 大谱表 Pitch 音高 Note 音符 Range 音域 Middle C 中央C(音) Treble Clef 高音谱号 Register 音区 Bass Clef 低音谱号 Volume音量 Tone 音色 Scale 音阶 half/whole step 半/全音阶半/全音级 C major scale C大调音阶 Scale degree 音级 Tonic 主音,主和弦 Pattern 节奏 Octave 八度音阶 key signature 调号 sharp 升号 # flat 降号 b staff 乐谱 accidentals 变音符 step 音级 interval 音程 simple/compound interval 单/复音程 chord 和音、(三)和弦 diatonic 自然的,全音阶 octave 八度(音阶) quality 音色(tone color) triad 三和弦 sequence 模进 diminish 减(音程) augment 增(音程) root 根音 supertonic 上主音 progression进行 acoustic piano 原声钢琴 sustain pedal 延音踏板 meter=time 拍子 comping 左手伴奏 time signature 拍号 beat 节拍 tempo 节拍/节奏、速度Verse主歌 Chorus副歌 Double barline 双小节线 Start/end repeat sign 开始/结束重复符号 Rehearsal letters 排练符号 Volume knob音量旋钮 octave button 八度键 调制轮Mod Wheel Vibrato/ tremolo 颤音 Measure=bar 小节 Phrase 乐句 Metronome 节拍器 Arrangement 编曲 Pad 背景合成音色 Pulse 律动 Voicing 音/声位 密集声位 (Closed Voicing) 和远距声位 (Open Voicing) Melody 主旋律 Harmonic 和声的 Countermelody 复调旋律 符头(Note Head)、符干(Note Stem)、符尾(Note Flag) Riff 重复段 stab(会对乐曲产生巨大影响的)单一断音和弦 embellishment 修饰音 improvise 即兴创作 一音不改 note for note Harmonic和声的 前调 top note Downbeat 重拍(第一拍) upbeat 弱拍(第二/4拍) 一个loop时则指一小段循环的作品Intro前奏 bridge桥梁音乐或桥段 D. S. 从有记号处反复 Accent 重音 Broken/separate chord分解和弦Blocked chord集中和弦 Al fine复唱[奏]到结尾 Pickups 拾音器 Tonality 调性

上海高考英语词汇小猫钓鱼解析

小猫钓鱼 从2008年起,词汇的考查放在了语篇中,着重强调语法和词汇知识在特定情景中的应用(通称小猫钓鱼)。试卷10道词汇题以10选9的方式分别考察了动词,形容词,名词,副词,还包括现在分词和过去分词的形式。2014年语法选择取消之后,词汇题增加了一个选10。通常做题时间不超过12分钟,10分钟之内完成为佳。 1) 文章不会太长(350词左右);一般来说第一句是文章主题句并且不设空;一般每隔10-30个词会有一个空;空与空之间有完整意群。文章中会挖出十个空,但是给出了十一个单词,让学生选择填空使文章完整,这就是新题型轮廓。 2) 方框中词汇难度不高,文章难度要略低于阅读理解难度。实际上是将词汇的使用和完形阅读紧密结合的一道题目。【事实上很多同学词汇关过不了,11个词汇有一半以上不认识,这样肯定无法选出正确答案。但是如果仅有一两个不认识,掌握了一定的技巧,完全可以做到全对。】 2、选词填空的考点 1) 词汇方面以实词为主也就是指名词、动词、形容词、副词。 2) 语法方面考察词性之间关系和句子结构分析能力。 3) 逻辑方面考察上下文联系 3、解题点拨: 1) 最关键的是要改变孤立的记忆单词的不良学法,做到词不离句,句不离篇,做到词汇的情景使用。 2) 不要孤立的看文章,一定注意句子的上下文衔接和本句的语法结构,因为选一个就少一个,一发而动全身。 3) 要专门记忆些高难词汇,也就是拼写很长词汇,比如:prohibited, withdraw, delicately之类。 4) 要想到这些词汇是不是有些固定用法。 考生拿到题目以后,由于考查考生对篇章的理解,应该略读整篇文章,确定文章的中心或主要说明的问题。文章大概在220词--250词左右,用1分钟左右的时间略读即可。要抓住文章首句,迅速找到文章的主题词或主题。和完型填空一样,一般文章第一句不设空格,以便让考生知道本文的相关主题词或主题。在此,建议大家使用略读的方法,以快速掌握文章大意。 ★第二步:详读选项,词分类 选项中的11个词是考查的关键,考生应该详细的理解这11个单词。熟悉的单词标明词性和词义,不熟悉的单词或者不认识的单词只需标明词性,然后根据名词、动词、形容词、副词四大类按规律排列在试卷上。这样做考生就可以不再是11选1了,只要根据上下文的逻辑关系或者语法结构,有时候可以是3选1甚至2选1,缩小了选择的范围,降低了试题的难度。 注意: 1. 动词的选择按照语法步骤!!!单复数和时态也是做题的关键因素。 2. 不认识的词要看后缀。构词法中, 前缀区分意思,后缀区分词性。所以看词尾往往能大致分出词性。词性无法确定的, 暂时搁置。比如-ful, -ous, -ment, -ation, -ly,-ior, -cal, -ity, -sive等 3. 做出相应的标记。在英文中有的单词不只有一个词性,比如大家常见的visit、access、approach、challenge、desert、respect等就即有名词词性又有动词词性。这时两个都要标出来。

键盘鼠标报告描述符解释

code char KeyBoardReportDescriptor[63] = { //表示用途页为通用桌面设备 0x05, 0x01, // USAGE_PAGE (Generic Desktop) //表示用途为键盘 0x09, 0x06, // USAGE (Keyboard) //表示应用集合,必须要以END_COLLECTION来结束它,见最后的END_COLLECTION 0xa1, 0x01, // COLLECTION (Application) //表示用途页为按键 0x05, 0x07, // USAGE_PAGE (Keyboard) //用途最小值,这里为左ctrl键 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl) //用途最大值,这里为右GUI键,即window键 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI) //逻辑最小值为0 0x15, 0x00, // LOGICAL_MINIMUM (0) //逻辑最大值为1 0x25, 0x01, // LOGICAL_MAXIMUM (1) //报告大小(即这个字段的宽度)为1bit,所以前面的逻辑最小值为0,逻辑最大值为1 0x75, 0x01, // REPORT_SIZE (1) //报告的个数为8,即总共有8个bits 0x95, 0x08, // REPORT_COUNT (8) //输入用,变量,值,绝对值。像键盘这类一般报告绝对值, //而鼠标移动这样的则报告相对值,表示鼠标移动多少 0x81, 0x02, // INPUT (Data,Var,Abs) //上面这这几项描述了一个输入用的字段,总共为8个bits,每个bit表示

野外钓鱼调漂技巧解析

野外钓鱼调漂技巧解析 导读:我根据大家的需要整理了一份关于《野外钓鱼调漂技巧解析》的内容,具体内容:调漂可以说是条鱼过程中不可避免的,那么野外钓鱼应该掌握哪些调漂技巧呢?跟着我一起来看看吧。野外钓鱼调漂技巧一、选漂在野钓的选漂上,底钓时最好选用细长硬尾的浮漂。... 调漂可以说是条鱼过程中不可避免的,那么野外钓鱼应该掌握哪些调漂技巧呢?跟着我一起来看看吧。 野外钓鱼调漂技巧 一、选漂 在野钓的选漂上,底钓时最好选用细长硬尾的浮漂。(浮钓可根据具体情况选漂)由于这种细长示标,自身可产生的浮力小,这样对饵重的反应灵敏。容易感知钩饵在水底状态。其二可以在水深相差一寸上下时,有一定兼容性,且对钓组状态影响不会太大。 二、调漂 野钓调漂,推荐大家将单饵调漂做为首选,即:半水挂单饵调平水。钓二目。这种调漂方法的好处时是,不论你抛钩在不在同一钓点上,都能确保底钩着底,上饵轻触底。 三、反复试底找好钓点 浮漂调好后,不要急于垂钓,最好是挂稍重一点的饵,有意识的在你所选取的钓点上前后左右多抛几竿。一方面可以做窝诱鱼,更重要的一方面就是通过打竿,摸清钓点水底的基本情况。找到最适合的停钩的位置。如

果大家细心一点,就算水底非常不平,但总能找到一块相对平坦的地方,哪怕是很小。如乱石从中的一小块沙地。斜坡上相对平缓一些地带。这样地方找到后,就要根据周围的环境,确定几个参照物进行定位。如在前方找个参照物,来确定抛竿的方向。再根据抛竿后收线的多少,或扬竿的角度来确定钓点的离岸位置。这样一来就很容易做到定点了。 四、精调 一但钓点选定好了,那么水深也就相对稳定了。这时我们再根据鱼情来精细调漂。或是调钝,或是调灵就方便多了。 但无论你如何调漂,都要对钩饵在水中的状态做到心中有数。 野外钓鱼的好处 一、提高反应能力。钓鱼的关键就在于观察鱼漂和及时提竿。初学钓鱼的朋友,要经过较长时间的练习才能得心应手,这可以锻炼人的反应能力,同时也提高了脑细胞的灵活性 二、保护和恢复视力。眼科医生经常会说:常看远方,常看绿色,视力就不易减退。一般读书看报的时候,多数情况下是在40厘米左右的近距离用眼,再加上看电视对目力的损害,还有人需要经常对着电脑,日复一日,年复一年,视力很容易下降。而钓鱼主要就是看几米或者几十米之处绿水中的浮漂,经常钓鱼,既看远处,又看绿水,能对视力具有保护和恢复作用。 三、整理钓具使人心灵手巧。钓鱼前,买来的鱼竿、鱼线、鱼钩、鱼漂以及手轮等等,必需自己动手组成钓组。由于要钓的鱼类鱼种的不同,天气、场地和季节的差异,这些鱼具组合起来的方式也就有很大的不同,甚

第二课认识鼠标及鼠标的基本操作

第二课认识鼠标及鼠标的基本操作 教学目标:1.认识鼠标 2.掌握鼠标的基本操作方法 教学重点:鼠标左键的单击、双击和拖动的操作方法 教学难点:鼠标的双击操作和拖动操作 教学方法:1.讲授与实践操作相结合 2.运用多媒体辅助教学 课时安排:1课时 教学过程: 一、导入 同学们,给大家出一个谜语:两撇小胡子,尖嘴尖牙齿,贼头又贼脑,喜欢偷油吃,想想这是什么动物?那么我们面前的计算机哪部分长得像老鼠啊? (鼠标外形像一个老鼠,后面还有一个细细的尾巴,所以我们形象地把它称之为鼠标。) 那你们知道鼠标有什么作用吗? 生:可以玩游戏、浏览文件 师:对,鼠标的作用可大了,我们操作计算机全靠它呢,你愿意和老师一起来认识、操作它吗? 生:想。 二、讲授新课 1.认识鼠标 观察鼠标上有什么? 你们观察得真仔细啊!我们每人都有名字,鼠标的各个部分也有自己的名字。看着鼠标,跟左手方向一致的是左键,跟右手方向一致的是右键。中间的像轮子一样的按键,我们把它叫做滚动键(滚轮)。今天,我们只学习鼠标左键的三种操作方法。 2.手握鼠标的方法 用大拇指和小拇指夹住鼠标的两侧,由于大家的手小,可以请无名指帮帮忙,一起握住鼠标。剩下的两个手指,像小兔子的耳朵,一个放在左键上,一个放在右键上。 轻轻移动晃动一下鼠标,看看屏幕上谁再动?对,这个小箭头就是鼠标的指针,它会跟着鼠标一起移动。 [练习]屏幕上有一个黄色的,下面写着“三年级”的文件夹。请你找一找,用手指一指。然后,移动鼠标指针到“三年级”文件夹上。 下面我们学习鼠标左键的第一种操作方法: 3.鼠标左键的第一种操作──鼠标的双击 握住鼠标,食指快而有节奏的“当当”两下,就是鼠标的双击,就像家里的敲门声,“当当”两下。握住鼠标,鼠标指针(小箭头)放在“三年级”文件夹上,然后双击鼠标,就打开“三年级”文件夹了。 (生练习,教师巡视) 师:没有打开文件夹的同学,老师告诉你一个小窍门,你可以再双击快一些。 4.鼠标左键的第二种操作──鼠标的单击

电脑键盘和鼠标功能简介

电脑键盘功能简介 一、光标移动键 在文字编辑过程中,我们经常要和光标(也叫插入点)打交道。输入汉字,删除汉字,都要将光标移到要插入汉字或删除汉字的地方。下面介绍光标移动键: 按“↑”键:光标向上移 按“↓”键:光标向下移 按“→”键:光标向右移 按“←”键:光标向左移 按“Home”:将光标移到行首 按“End”:将光标移到行尾 按“PageUp”: 每按一次光标向上移一屏幕 按“PageDown”:每按一次,光标向下移一屏幕 按“Ctrl+Home”:将光标移到文件的最前面 按“Ctrl+End”:将光标移到文件的最后面 二、删除键 按“←”键(有的键盘上是“BackSpace”):删除光标前面的字符 按“Delete键(或数字键盘区的“Del”): 删除光标后面的字符 三、插入/改写切换 在输入文本过程中,有两种编辑状态,即:插入状态和改写状态。当编辑处于插入状态时,会在光标的前面插入新输入的字符。若处于改写状态时,会将光标后面的字符改为新输入的字符。 如果要将某个字改错,可以切换到改写状态,再将光标移到要改掉的错字前面,再输入新的字符。 注意:如果要插入一些字符。就不要切换到改写状态了,否则会把光标后面的文本全改掉了。 插入状态改写状态 插入状态:状态栏的“改写”二字变灰。 改写状态:状态栏上的“改写”二字变黑。 切换的方法: 方法1:按键盘上的“Insert”键或数字键盘区的“Ins”键(非数字状态) 方法2:双击状态栏上的“改写”二字 四、空格键 空格键是位于键盘底部的最长的那个键。它的作用取决于当前的编辑状态是“插入状态”还是“改写状态” 插入状态:按该键,将在光标前面插入空格字符,可用于调整两字符间的距离。 改写状态:按该键,将把光标后面的字符改为空格字符。 例如:“我们”,这两个字的中间就插入了2个空格字符 注意:用空格调整字符间距时,千万不要切换到“改写”状态了,否则会把光标后面的文字都会改成空格的。 五、回车键:Enter 作用:①在输入文本的过程中,敲此键,可将光标后面的字符下移一行,即新起一个段落。如果一段文本输完了,请按“Enter”换行吧!若要将某段文本分成两个段落,可将光标移至要分段处,再按回车键。

中国象棋常用术语

中国象棋常用术语 公有: (2) 肋道: (2) 巡河: (2) 骑河: (2) 得先: (2) 让先: (2) 车: (3) 直车: (3) 横车: (3) 过河车: (3) 马: (3) 屏风马: (3) 单提马:(边马) (3) 反宫马: (3) 拐角马: (4) 盘头马: (4) 归心马:(窝心马) (4) 鸳鸯马: (4) 卧槽马: (4) 钓鱼马: (4) 挂角马: (4) 拔簧马: (4) 炮: (5) 当头炮:(中宫炮) (5) 过宫炮: (5) 敛炮: (5) 金钩炮: (5) 士角炮: (5) 顺手炮: (5) 列手炮: (5) 巡河炮: (6) 归心炮:(窝心炮) (6) 蟹眼炮: (6) 兵: (6) 高兵: (6) 低兵: (6) 底兵: (6) 高头兵: (6) 低头兵: (7) 仙人指路: (7) 九尾龟: (7) 象: (7)

花士象: (7) 单缺象: (7) 士: (7) 羊角士: (7) 单缺士: (8) 公有: 肋道: 4、6两条竖线。 巡河: 己方河界线。 骑河: 对方河界线。 得先: 先手胜。 让先: 后手胜。

车: 直车: 车九平八、车一平二。 横车: 车九进一、车一进一。 过河车: 车八进六、车二进六。 马: 屏风马: 马二进三、马八进七。 单提马:(边马) 马八进九、马二进一。 反宫马: 两个屏风马之间夹一个士角炮。

拐角马: 马八进六、马二进四。 盘头马: 当头炮加屏风连环马。 归心马:(窝心马) 马七退五、马三退五。 鸳鸯马: 连环马。 卧槽马: 进到对方底象前一格的马。 钓鱼马: 进到对方底象前两格的马。 挂角马: 进到对方九宫上角的马。 拔簧马: 一方的马利用憋马腿的己方棋子移开且形成叫将。

计算机基础(键盘鼠标操作).doc

Windows XP的基本操作 教学课题:键盘的基本功能和输入规则 教学目的:1.认识键盘上常用键并会运用 2.启动与关闭计算机 3.掌握键盘和鼠标的使用方法 教学重点:1.启动与关闭计算机的方法 2.鼠标的使用方法 教学难点:鼠标的使用 教学方法:讲授法、演示、多媒体演示 教学时数:2课时 教学过程: 一、清点人数 班级:应到:实到:请假: 班级:应到:实到:请假: 二、安全提示 三、讲授新课 (一)键盘手指分布图 (二)键盘与鼠标的使用 1. 键盘的使用 标准的计算机键盘主要由字符键区、功能键区、方向键区、小键盘区和辅助键区组成。

(1)字符键区: Tab键:跳格键,在表格中按Tab键,可以使光标沿单元格往前(右)一步一步地跳动。按“Shift+Tab”组合键则反向跳动;按“Ctrl+Tab”是复原。 Caps Lock键:大写锁定键。 Shift键:上档键,又称转换键。用以配合有上符的键盘输入上符键盘上的符号,还可以配合其他的键共同起作用,例如,Shift+F3是大小写转换;Shift+F5 是使光标回到此前状态;按住Shift键拖文本时是移动所选的文本;放光碟时,连按数下shift 键,可以跳过自动播放;删除文件时,按shift 键可以不经过回收站直接删除。。按shift +F10可以代替鼠标右键;shift+空格,输入法全/半角切换等。 Ctrl键:控制键。需要配合其他键或鼠标使用。有多种功能。例如Ctrl+s是保存文件;Ctrl+V是粘贴;Ctrl+A是全选;Ctrl+=是把锁选定的字变为下标字;Ctrl+C是调出保存24条信息的剪贴板;按住Ctrl键拖动选定的文本时是复制等。 Alt键:可选键。它需要和其他键配合使用来达到某一操作目的。例如,若同时按住Alt+ Ctrl+Del,是打开Windows的任务管理器。 Enter键:回车键,也称确认键。 Space键:空格键。按一下空格键,就会输入一个空格,光标也就向右移动一个字符。 Backspace键:后退格键。可以删除当前光标位置前的字符,并将光标向左移动一个位置。如果按Shift+Backspace键,就是删除整个表格。 (2)功能键区 Esc键:一般起退出或中止某个程序或某种操作的作用。 F1键:在Word中按F1可以得到“Wo rd帮助”。 F2键:在Word中,如果你选定了一组文本或图形,随后再按一下F2键,你想把这组文本或图形移到本文档的哪个位置,就把光标转移到哪里,再按一下Enter 键,移动就成功了。 F3键:在桌面或文件夹中按F3是打开“搜索文件和文件夹”的窗口。 F4键:在Word中,是重复上一次操作。如果你按组合键“Alt+F4”,就是关闭这个窗口。 F5键:在Word中,按F5可以调出“查找、替换和定位”对话框;在Web页面,F5键用来刷新IE或资源管理器中当前所在窗口的内容,Ctrl+F5是强制刷新。 F6键:在Word中,用它来撤消F8的扩展选择功能。 F7键:在Word中,按F7可以出现拼写和错误提示窗口。

第三章常见的鼠标键盘交互方法

TrackBall模式 Trackball模式是跟踪球模式,具体来说,就是物体的中心位置不变,而改变视点的位置,从而使模型随着鼠标的移动绕着中心位置旋转。 对于鼠标移动需要计算相应的视点(照相机)的运动情况,在osg中,通过TrackballManipulator::calcMovement()来实现,并且对于不同的鼠标事件,分别进行如下的操作: 1.按下鼠标的左键,则旋转照相机。 2.按下鼠标中间键或者同时按下鼠标的左键和与右键,则改变物体的中心位置,也即对物体进行平移操作。 3.按下鼠标的右键,则对模型进行缩放。 在按下鼠标的左键从而旋转照相机时,这里主要模拟了一个跟踪球技术,球的半径理想情况下应该基于旋转中心到鼠标所指的物体上某点的距离,但是为了简化处理,一般情况下,球的半径TRACKBALLSIZE可以预先给定,也能达到比较好的模拟效果。具体实现过程如下:首先分别记录两次鼠标事件的坐标的(x1,y1)和(x2,y2),根据x坐标的最小值X min和最大值X max,以及y坐标的最小值Y min和最大值Y max,对(x1,y1)和(x2,y2)坐标进行规范化,转化到(-1,1)之间,不妨假设新的坐标点为p1和p2,然后通过将p1和p2投影到跟踪球上,从而获取相应的z 坐标。这样,以球的中心为起始点,计算出的球上的两个点为终点,可以确定两个向量,不妨记作P1和P2,那么旋转轴axis = P2^ P1,旋转的弧度为:t = ||(P2- P1)|| / (2.0*TRACKBALLSIZE),为了避免产生某些不可操纵的结果,必须先将t规范到(-1,1)之间,再将其转化为角度angles,然后将照相机绕着axis旋转angles的角度,从而实现了对照相机的旋转操作。 在osg的实现中,该跟踪球并不是一个正规的球体,而是进行了一定的变形,在中心附近是一个半径为TRACKBALLSIZE的球体,而在离中心达到一定距离时(小于球的半径TRACKBALLSIZE),该球体被扭曲成了四个双曲面。 在Trackball模式的具体实现时,有许多细节问题,如 1.首先需要将世界坐标系转化到视点坐标系,这可以通过先将中心平移到视点后根据照相机的up、物体的中心以及视点重新确立坐标系。在osg中,由void TrackballManipulator::computePosition(const osg::Vec3& eye,const osg::Vec3& center,const osg::Vec3& up)实现。 2.模型的旋转通过鼠标控制,因此需要判断鼠标是否移动,具体实现时,可以预先自定义一个速率v,分别记录下连续两次鼠标事件的时间和位置,计算出间隔的时间?t和移动的距离?s,如果?s > v * ?t,就可以认为鼠标移动,并根据鼠标的具体事件(如按下的是左键、右键等)进行相应的操作。在osg中,由bool TrackballManipulator::isMouseMoving()实现。 3.需要有一个函数接收不同的鼠标和键盘事件,从而做出相应的处理。在osg中,由bool TrackballManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& us)实现,如果事件被正确处理,返回true,否则返回false。其中GUIEventAdapter接受来自GUI的更新事件,GUIActionAdapter则是对这些GUI事件的回应。 Quaternion The quaternions are members of a noncommutative division algebra first invented by William Rowan Hamilton. The idea for quaternions occurred to him while he was walking along the Royal

钓鱼1英语日常口语词汇

钓鱼1英语日常口语词汇 随着英语的广泛使用,在很多时候我们都会用到英语,不知道大家有没有钓鱼这种爱好,那么关于钓鱼的日常口语的词汇都有哪些呢 ?以下是给大家的钓鱼-1英语日常口语词汇,希望可以帮到大家 场景词汇 float 浮标 tackle 钓具 tackle box 钓具箱 hook 钩子

网子 fishhook 鱼钩 barb 倒钩 eye 钩眼 lure 人造馆 fly

假蝇 bait 饵 line 渔线 fishing line 钓鱼线 fishing rod 鱼竿 reel 渔线轮

waders 防水裤 waterproof 雨衣 angler 钓鱼者 spool 线轴 pole 杆 1. The float will move when a fish is caught.

鱼上钩后浮标会动的。 2. You should be careful with that hook. 你应该小心那个钩子。 3. Those farmers use a because it's faster. 那些农民用网捕鱼,因为这样更快。 4. What kind of lure will you use? 你会用哪种鱼饵? 5. The fish really liked this bait last time. 上次鱼很喜欢这种饵。 6. I have lots and lots of fishing line. 我有好多好多钓鱼线。

7. Do you like my new fishing rod? 你喜欢我的新鱼竿吗? 8. I think I'm reeling something in! 我觉得我钓上来了点东西! 9. Why don't you put on these waders? 你为什么不穿防水裤呢? 10. One and a half hours later, I caught several fish with my new pole. 一个半小时之后我用我的新杆钓上了几条鱼。 模板,内容仅供参考

重装系统时USB接口鼠标和键盘不能使用的解决办法

重装系统时,U S B接口鼠标和键盘不能使用的解决办法现在的电脑基本都是USB接口的鼠标和键盘了。但是有的朋友想重装系统的时候,发现USB鼠标和键盘都不能用,安全模式也无法进入,按不了上面的选项,同时等那段时间过后自动进入系统后就可以用了,简直没办法重装系统了,这个是怎么回事呢? 这是因为你的键盘是USB插口的,因为没进入系统的时候USB还无法实现数据传输。建议使用普通的圆口的,如果没有圆口鼠标,就请重新设置bios里的USB选项把USB键盘功能功能打开.就可以了 开启USB鼠标键盘功能步骤如下: 重起电脑,按住DEL不放,进入蓝屏的bios设置页面,弹出菜单,这个是左边的一行: StandardCmosFeatures AdvancedBiosFeatures InTegratedperiphrels PowerManageMentSetup Pnp/PclContigurations OcHealthStatus 按键盘上的向上下左右小箭头“移动光标”位置,键盘最左上角的“Esc”菜单键是返回当进入Bios时的菜单,回车是“确定”,按F10保存退出,最后再按“Y”,也就是Yes,是的意思,再确定一下。请朋友们看准,不要胡乱改参数,这个设置是很简单的,不放心的朋友可以笔记一下。 进入InTegratedperiphrels(集成设备设定,选择ONBOARDDERIVE,再选择USBKEYBOARDSUPPOR设置为Enable即可。下面还有个MOUSESUPPOR,是USB鼠标的支持。 (转)另外关于U盘、USB鼠标、USB键盘,在进入安装界面后失效的问题(无论是否插在3.0都会失效),其根本原因是intelXHCI控制器的问题,intel的xhci控制器提供了一个smartauto功能,俗称“聪明”,但聪明过

相关文档
最新文档