当前位置: 首页 > 编程日记 > 正文

WinCE中串口驱动及接口函数介绍(转载)

作者:ARM-WinCE

WinCE中,串口驱动实际上就是一个流设备驱动,具体架构如图

串口驱动本身分为MDD层和PDD层。MDD层对上层的Device Manager提供了标准的流设备驱动接口(COM_xxx)PDD层实现了HWOBJ结构及结构中若干针对于串口硬件操作的函数指针,这些函数指针将指向PDD层中的串口操作函数。DDSI是指MDD层与PDD层的接口,在串口驱动中实际上就是指HWOBJPDD层会传给MDD层一个HWOBJ结构的指针,这样MDD层就可以调用PDD层的函数来操作串口。

       微软针对于串口驱动提供了参考源代码,可以在下面的目录下找到:”\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\SERIAL”

   串口驱动的结构也就是这样了,下面介绍相关的驱动中的接口。

1. HWOBJ结构

在串口驱动中,HWOBJ结构中的函数实现了对串口硬件的操作,并在MDD层被调用。可以说,该结构描述了串口设备的所有特性,先来介绍一下该结构,具体定义如下:
typedef struct __HWOBJ
{
ULONG BindFlags;
DWORD dwIntID;
PHW_VTBL pFuncTbl;
} HWOBJ, *PHWOBJ;

BindFlags:用于控制MDD层如何来处理IST,具体值如下:           

                       THREAD_IN_PDD:MDD层不处理,中断在PDD层处理。           

                       THREAD_AT_INIT:在驱动初始化的时候,MDD层启动IST。           

                       THREAD_AT_OPEN:在驱动被Open的时候,MDD层启动IST。

dwInitID: 系统的中断号 pFuncTbl: 指向一个PHW_VTBL结构,该结构中包含一个函数指针列表,这些函数指针指向串口硬件操作函数,用于操作串口。

  1. typedef struct __HW_VTBL
  2. {
  3. PVOID (*HWInit)(ULONG Identifier, PVOID pMDDContext);
  4. ULONG (*HWDeinit)(PVOID pHead);
  5. BOOL (*HWOpen)(PVOID pHead);
  6. ULONG (*HWClose)(PVOID pHead);
  7. ULONG (*HWGetBytes)(PVOID pHead, PUCHAR pTarget, PULONG pBytes);
  8. PVOID (*HWGetRxStart)(PVOID pHead);
  9. INTERRUPT_TYPE (*HWGetIntrType)(PVOID pHead);
  10. VOID (*HWOtherIntrHandler)(PVOID pHead);
  11. VOID (*HWLineIntrHandler)(PVOID pHead);
  12. ULONG (*HWGetRxBufferSize)(PVOID pHead);
  13. VOID (*HWTxIntrHandler)(PVOID pHead);
  14. ULONG (*HWPutBytes)(PVOID pHead, PUCHAR pSrc, ULONG NumBytes, PULONG pBytesSent);
  15. BOOL (*HWPowerOff)(PVOID pHead);
  16. BOOL (*HWPowerOn)(PVOID pHead);
  17. VOID (*HWClearDTR)(PVOID pHead);
  18. VOID (*HWSetDTR)(PVOID pHead);
  19. VOID (*HWClearRTS)(PVOID pHead);
  20. VOID (*HWSetRTS)(PVOID pHead);
  21. BOOL (*HWEnableIR)(PVOID pHead, ULONG BaudRate);
  22. BOOL (*HWDisableIR)(PVOID pHead);
  23. VOID (*HWClearBreak)(PVOID pHead);
  24. VOID (*HWSetBreak)(PVOID pHead);
  25. BOOL (*HWXmitComChar)(PVOID pHead, UCHAR ComChar);
  26. ULONG (*HWGetStatus)(PVOID pHead, LPCOMSTAT lpStat);
  27. VOID (*HWReset)(PVOID pHead);
  28. VOID (*HWGetModemStatus)(PVOID pHead, PULONG pModemStatus);
  29. VOID (*HWGetCommProperties)(PVOID pHead, LPCOMMPROP pCommProp);
  30. VOID (*HWPurgeComm)(PVOID pHead, DWORD fdwAction);
  31. BOOL (*HWSetDCB)(PVOID pHead, LPDCB pDCB);
  32. BOOL (*HWSetCommTimeouts)(PVOID pHead, LPCOMMTIMEOUTS lpCommTO);
  33. BOOL (*HWIoctl)(PVOID pHead, DWORD dwCode,PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut,DWORD dwLenOut,PDWORD pdwActualOut);
  34. } HW_VTBL, *PHW_VTBL;
typedef struct __HW_VTBL {PVOID (*HWInit)(ULONG Identifier, PVOID pMDDContext);ULONG (*HWDeinit)(PVOID pHead);BOOL (*HWOpen)(PVOID pHead);ULONG (*HWClose)(PVOID pHead);ULONG (*HWGetBytes)(PVOID pHead, PUCHAR pTarget, PULONG pBytes);PVOID (*HWGetRxStart)(PVOID pHead);INTERRUPT_TYPE (*HWGetIntrType)(PVOID pHead);VOID (*HWOtherIntrHandler)(PVOID pHead);VOID (*HWLineIntrHandler)(PVOID pHead);ULONG (*HWGetRxBufferSize)(PVOID pHead);VOID (*HWTxIntrHandler)(PVOID pHead);ULONG (*HWPutBytes)(PVOID pHead, PUCHAR pSrc, ULONG NumBytes, PULONG pBytesSent);BOOL (*HWPowerOff)(PVOID pHead);BOOL (*HWPowerOn)(PVOID pHead);VOID (*HWClearDTR)(PVOID pHead);VOID (*HWSetDTR)(PVOID pHead);VOID (*HWClearRTS)(PVOID pHead);VOID (*HWSetRTS)(PVOID pHead);BOOL (*HWEnableIR)(PVOID pHead, ULONG BaudRate);BOOL (*HWDisableIR)(PVOID pHead);VOID (*HWClearBreak)(PVOID pHead);VOID (*HWSetBreak)(PVOID pHead);BOOL (*HWXmitComChar)(PVOID pHead, UCHAR ComChar);ULONG (*HWGetStatus)(PVOID pHead, LPCOMSTAT lpStat);VOID (*HWReset)(PVOID pHead);VOID (*HWGetModemStatus)(PVOID pHead, PULONG pModemStatus);VOID (*HWGetCommProperties)(PVOID pHead, LPCOMMPROP pCommProp);VOID (*HWPurgeComm)(PVOID pHead, DWORD fdwAction);BOOL (*HWSetDCB)(PVOID pHead, LPDCB pDCB);BOOL (*HWSetCommTimeouts)(PVOID pHead, LPCOMMTIMEOUTS lpCommTO);BOOL (*HWIoctl)(PVOID pHead, DWORD dwCode,PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut,DWORD dwLenOut,PDWORD pdwActualOut);} HW_VTBL, *PHW_VTBL;

这些函数将在PDD层实现,用于实际的串口硬件操作。

2. MDD层API

MDD层向上提供了流设备接口,这部分代码微软已经实现,用于管理串口。虽然我们不需要实现这部分,但是还是对相应的接口做个简单介绍。

2.1HANDLE COM_Init(ULONG Identifier):

初始化串口设备,该函数通过读取注册表获得串口设备号,并获得相应的HWOBJ的结构指针,通过该指针调用PDD层的硬件初始化函数初始化串口。

Identifier:如果驱动被设备管理器加载,那么这个参数将包含一个注册表键值在” HKEY_LOCAL_MACHINE\Drivers\Active”路径下。如果驱动是通过调用RegisterDevice函数来加载的,那么这个值等于dwInfo的值。在COM_Init中,会先打开该键值,用返回的句柄来查询DeviceArrayIndex值,并根据该值获得PDD层的HWOBJ结构指针。

2.2 BOOL COM_Deinit(void):

卸载串口设备,该函数中主要做了一些释放资源的操作。也可以被DeregisterDevice函数调用。

2.3 HANDLE COM_Open(HANDLE pContext, DWORD AccessCode, DWORD ShareMode):

打开串口设备。应用程序调用CreateFile函数打开串口时,该函数会被调用。

pContext:COM_Init函数返回的Handle

AccessCode:设置访问模式,比如共享读或者是读写模式。

ShareMode:在参数从应用程序中的CreateFile函数中传来,表示是否支持独自占有。

2.4 BOOL COM_Close(DWORD pContext):

关闭串口设备。应用程序调用CloseHandle函数关闭串口时,该函数会被调用。

pContext:该参数为COM_Open函数返回的Handle

2.5 ULONG COM_Read(HANDLE pContext, PUCHAR pTargetBuffer, ULONG BufferLength, PULONG pBytesRead):

读串口数据。应用程序调用ReadFile函数读串口的时候,该函数被调用。

pContext:COM_Open函数返回的Handle

pTargetBuffer:指向一个用于存放读到数据的Buffer

BufferLength:pTargetBuffer指向的Buffer的大小。

pBytesRead:实际读到的数据的大小。

2.6 ULONG COM_Write(HANDLE pContext, PUCHAR pSourceBytes, ULONG NumberOfBytes):

写串口数据。应用程序调用WriteFile函数写串口的时候,该函数被调用。

pContext:COM_Open函数返回的Handle

pSourceBytes:指向一个Buffer,该Buffer包含要写入串口的数据。

NumberOfBytes:要写入串口的数据的大小。

2.7 BOOL COM_PowerUp(HANDLE pContext):

该函数主要用于串口设备从suspend模式恢复到正常模式。

pContext:串口设备的Handle

2.8 BOOL COM_PowerDown(HANDLE pContext):

该函数主要用于串口设备从正常模式进入suspend状态。

pContext:串口设备的Handle

2.9 BOOL COM_IOControl(DWORD dwOpenData, DWORD dwCode, PBYTE pBufIn, DOWRD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut):

该函数主要实现了一些串口的IO控制,他会被应用层的一些串口函数调用来获得或者设置串口的状态。

dwOpenData:COM_Open函数返回的Handle

dwCode:I/O控制操作码。

pBufIn:传入的Buffer

dwLenIn:传入的Buffer的大小。

pBufOut:传出的Buffer

dwLenOut:传出的Buffer的大小。

       pdwActualOut:实际传出的数据的大小。

    对于串口驱动来说,COM_IOControl函数非常有用,应用程序通过调用COM_IOControl函数并传入不同的操作码,实现了控制串口的功能。这里列举一些操作码如下:

操作码

解释

IOCTL_SERIAL_CLR_DTR

设置串口的DTR管脚为低

IOCTL_SERIAL_CLR_RTS

设置串口的RTS管脚为低

IOCTL_SERIAL_DISABLE_IR

禁用串口的红外模式

IOCTL_SERIAL_ENABLE_IR

启用串口的红外模式

IOCTL_SERIAL_GET_COMMSTATUS

清除串口设备的异常标记并返回当前状态

IOCTL_SERIAL_GET_DCB

获得串口的DCB结构

IOCTL_SERIAL_GET_MODEMSTATUS

获得当前Modem的控制寄存器值

IOCTL_SERIAL_GET_PROPERTIES

重新获得当前串口设备的硬件属性

IOCTL_SERIAL_GET_TIMEOUTS

获得串口设备的读写超时

IOCTL_SERIAL_GET_WAIT_MASK

获得等待事件标记掩码

IOCTL_SERIAL_IMMEDIATE_CHAR

在发送数据前,先发送一个特定的字符

IOCTL_SERIAL_PURGE

清除串口中的输入输出Buffer,也可以中止未进行的读写操作

IOCTL_SERIAL_SET_BREAK_OFF

串口通讯从中断状态恢复

IOCTL_SERIAL_SET_BREAK_ON

设置串口为中断状态,停止发送接收数据

IOCTL_SERIAL_SET_DCB

设置串口的DCB结构

IOCTL_SERIAL_SET_DTR

设置串口的DTR管脚为高

IOCTL_SERIAL_SET_QUEUE_SIZE

目前,在微软的MDD层代码中没有支持

IOCTL_SERIAL_SET_RTS

设置串口的RTS管脚为高

IOCTL_SERIAL_SET_TIMEOUTS

设置串口的读写操作超时

IOCTL_SERIAL_SET_WAIT_MASK

设置等待事件标记掩码

IOCTL_SERIAL_SET_XOFF

软件流控模式下,终止数据传输

IOCTL_SERIAL_SET_XON

软件流控模式下,启动数据传输

IOCTL_SERIAL_WAIT_ON_MASK

等待一个与事件掩码中匹配的事件

   上述的操作码,很多都会被应用程序调用,看看MDD层中的实现,其中一些也是调用了PDD层下的函数来完成对串口硬件的设置。

3. PDD层API

       PDD层的函数主要是实现了对串口硬件的操作,函数比较多,不过还是都说一下吧:

3.1 PHWOBJ GetSerialObject(DWORD DeviceArrayIndex):

该函数返回一个指向HWOBJ结构的指针,该结构包含了相关硬件接口函数的函数指针。

DeviceArrayIndex:串口索引号

3.2 VOID HWClearBreak(PVOID pContext):

清除串口中断状态,用于串口从中断状态恢复。

pConText:指向HWInit函数返回的指针。

3.3 VOID HWClearDTR(PVOID pContext):

设置串口的DTR管脚为低

pConText:指向HWInit函数返回的指针。

3.4 VOID HWClearRTS(PVOID pContext):

设置串口的RTS管脚为低

pConText:指向HWInit函数返回的指针。

3.5 VOID HWClose(PVOID pContext):

关闭由HWInit函数初始化的设备

pConText:指向HWInit函数返回的指针。

3.6 VOID HWDeinit(PVOID pContext):

当设备驱动被卸载的时候,该函数被调用。

pConText:指向HWInit函数返回的指针。

3.7 VOID HWDisableIR(PVOID pContext):

禁用串口的红外模式

pConText:指向HWInit函数返回的指针。

3.8 VOID HWEnableIR(PVOID pContext):

启用串口的红外模式

pConText:指向HWInit函数返回的指针。

3.9 VOID HWGetCommProperties(PVOID pContext, LPCOMMPROP pCommProp):

重新获得当前串口设备的硬件属性。

pConText:指向HWInit函数返回的指针。

pCommProp:指向一个COMMPROP结构,该结构描述硬件设备的属性,比如最大波特率,停止位以及流控模式等。

3.10 INTERRUPT_TYPE HWGetIntrType(PVOID pContext):

获得当前的中断类型。返回值可以是INTR_NONEINTR_LINEINTR_RXINTR_TXINTR_MODEM,这些值在Serhw.h中定义。

pConText:指向HWInit函数返回的指针。

3.11 VOID HWGetModemStatus(PVOID pContext, PULONG pModemStatus):

获得Modem的状态。

pConText:指向HWInit函数返回的指针。

pModemStatus:Modem的状态。

3.12 ULONG HWGetRxBufferSize(PVOID pContext):

获得串口硬件接收Buffer的大小。

pConText:指向HWInit函数返回的指针。

3.13 PVOID HWGetRxStart(PVOID pContext):

返回硬件接收Buffer的起始位置。

pConText:没有被使用。

3.14 ULONG HWGetStatus(PVOID pContext, LPCOMSTAT lpStat):

获得硬件状态信息。

pConText:指向HWInit函数返回的指针。

lpStat:指向COMSTAT结构,该结构描述硬件状态。

3.15 PVOID HWInit(ULONG Identifier, PVOID pMDDContext, PHWOBJ pHWObj):

初始化串口硬件设备。

Identifier:该驱动的键值,从MDD层传到PDD层。

pMDDContext:指向MDD层串口相关信息,从MDD层传给PDD层。

pHWObj:指向HWOBJ结构。

3.16 BOOL HWIoctl(DWORD dwOpenData, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut)

执行I/O控制

dwOpenData:COM_Open函数返回的Handle

dwCode:I/O控制操作码。

pBufIn:传入的Buffer

dwLenIn:传入的Buffer的大小。

pBufOut:传出的Buffer

dwLenOut:传出的Buffer的大小。

pdwActualOut:实际传出的数据的大小。

3.17 VOID HWLineIntrHandler(PVOID pContext):

线路状态信息中断处理函数

pContext:指向HWInit函数返回的指针。

3.18 VOID HWModemIntrHandler(PVOID pContext):

该函数检测Modem状态,并对相关中断进行处理。

pContext:指向HWInit函数返回的指针。

3.19 BOOL HWOpen(PVOID pContext):

打开串口设备,可以在该函数中打开串口硬件供电。

pContext:指向HWInit函数返回的指针。

3.20 VOID HWOtherHandler(PVOID pContext):

该函数已经被HWModemIntrHandler取代,实现与HWModemIntrHandler一样。

pContext:指向HWInit函数返回的指针。

3.21 BOOL HWPostInit(PVOID pContext):

该函数在COM_Init中被调用,但是在串口数据,硬件以及IST初始化后备调用。

pContext:指向HWInit函数返回的指针。

3.22 BOOL HWPowerOff(PVOID pContext):

串口硬件进入Suspend模式。

pContext:指向HWInit函数返回的指针。

3.23 BOOL HWPowerOn(PVOID pContext):

串口硬件从Suspend模式恢复到工作模式。

pContext:指向HWInit函数返回的指针。

3.24 VOID HWPurgeComm(PVOID pContext, DWORD fdwAction):

清除串口硬件buffer的信息。

pContext:指向HWInit函数返回的指针。

fdwAction

PURGE_TXABORT:终止写操作立即返回。

PURGE_RXABORT:终止读操作立即返回。

PURGE_TXCLEAR:清空写Buffer

PURGE_RXCLEAR:清空读Buffer

3.25 ULONG HWPutBytes(PVOID pContext, PUCHAR pSrc, ULONG NumberOfBytes, PULONG pBytesSent):

通过写数据到硬件中来直接发送数据。

pContext:指向HWInit函数返回的指针。

pSrc:指向要发送的数据Buffer

NumberOfBytes:要发送的数据长度。

pBytesSent:实际发送的数据长度。

3.26 VOID HWReset(PVOID pContext):

复位串口硬件。

pContext:指向HWInit函数返回的指针。

3.27 ULONG HWRxIntrHandler(PVOID pContext, PUCHAR pTargetBuffer, PULONG pByteNumber):

接收数据中断处理函数。

pContext:指向HWInit函数返回的指针。

pTargetBuffer:接收数据Buffer

pByteNumber:接收数据Buffer的大小。

3.28 VOID HWSetBreak(PVOID pContext):

设置串口为中断状态,停止发送接收数据。

pContext:指向HWInit函数返回的指针。

3.29 BOOL HWSetCommTimeouts(PVOID pContext, LPCOMMTIMEOUT lpCommTO):

设置串口操作超时时间。

pContext:指向HWInit函数返回的指针。

lpComTO:指向一个超时的结构,其中包括读写超时。

3.30 BOOL HWSetDCB(PVOID pContext, LPDCB pDCB):

设置串口硬件设备信息。

pContext:指向HWInit函数返回的指针。

pDCB:指向DCB结构,该结构描述相关的串口硬件设置信息。

3.31 VOID HWSetDTR(PVOID pContext):

设置串口的DTR管脚为高

pContext:指向HWInit函数返回的指针。

3.32 VOID HWSetRTS(PVOID pContext):

设置串口的RTS管脚为高

pContext:指向HWInit函数返回的指针。

3.23 VOID HWTxIntrHandler(PVOID pContext, PUCHAR pSourceBuffer, PULONG pByteNumber):

串口发送中断处理函数。

pContext:指向HWInit函数返回的指针。

pSourceBuffer:发送数据Buffer

pByteNumber:最大能够发送的数据的大小。函数返回时,指向实际发送的数据的大小。

3.24 VOID HWXmitComChar(PVOID pContext, UCHAR ComChar):

发送一个字符

pContext:指向HWInit函数返回的指针。

ComChar:要被发送的字符。

    上述这些函数不一定串口驱动中都会被用到,根据具体要求来实现吧。在这里我还要给自己找条退路,由于本人并未实现上面的所有函数,一些是通过读文档和看源码分析得来,而且本人水平有限,如果有错误的地方,请谅解并欢迎指正。

转载自:http://blog.csdn.net/nanjianhui/archive/2008/07/09/2627755.aspx

转载于:https://www.cnblogs.com/sql4me/archive/2010/06/28/1766738.html

相关文章:

【jsp】写jsp文件的准备

1、引入jstl 代码实现&#xff1a; <% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core" %> 2、编写common文件 代码实现&#xff1a; <c:set var"ctxpath" value"${pageContext.request.contextPath }">&l…

studio2008 无法显示该网页

莫名奇妙的studio调试的时候页面显示无法显示该网页&#xff0c;差网页后得知原来是C:\WINDOWS\system32\drivers\etc下的Hosts文件被修改了&#xff0c; 确认里面有127.0.0.1 localhost 行转载于:https://www.cnblogs.com/sunshinecc/archive/2011/11/11/2245596.html

侠客X官方网站成立,第一个内测版本即将放出,敬请期待.

这是一个难忘的日子&#xff0c;西方的情人节&#xff0c;本站的成立代表侠客X&#xff0c;即将与大家见面了。 我们的要做的是&#xff0c;传承侠客站群经典模式&#xff0c;打造SEO王者力作&#xff0c;侠客X即将公开测试&#xff0c;敬请期待。 http://xpk.in Qin 转载于:ht…

HSSFWorkbook 与 XSSFWorkbook

项目中一直使用NPOI与memcached,一直相安无事,但是最近升级了npoi到最新版本,发生了ICSharpCode.SharpZipLib的版本冲突问题. 因为此前一直使用的是NPOI的1.x的版本,用的SharpZipLib是0.84版本,而升级到最新版本以后,SharpZipLib的版本变成了0.86版本. 但是memcached的却没有最…

P1066 2^k进制数 NOIP 2006 提高组 第四题

洛谷蓝题&#xff08;点击跳转&#xff09; 提高组 第四题 题目描述 设r是个2^k 进制数&#xff0c;并满足以下条件&#xff1a; &#xff08;1&#xff09;r至少是个2位的2^k 进制数。 &#xff08;2&#xff09;作为2^k 进制数&#xff0c;除最后一位外&#xff0c;r的每一位…

线段树专辑——pku 2886 Who Gets the Most Candies?

http://poj.org/problem?id2886 恩&#xff0c;分糖果&#xff0c;快乐的童年啊&#xff01; 题目意思大概n个小孩围成一个圈&#xff0c;每个小孩手里有张卡片&#xff0c;记录着一个数字。开始从第k个孩子&#xff0c;该孩子离开圈子&#xff0c;然后告诉别人他手里的数字&a…

【jsp】通过get和post传值的区别

GET与POST的区别&#xff1a; GET方式提交表单&#xff0c;请求的参数在请求的头部&#xff0c;可以通过request.getQueryString()获取到请求参数及其参数值&#xff1b;POST方式提交表单&#xff0c;请求的参数在请求体中&#xff0c;所以request.getQueryString()方法无法获…

php获取输入流

uc中的用到的代码(在api/uc.php)代码&#xff1a; $post xml_unserialize(file_get_contents(php://input));&#xfeff; php手册&#xff08;http://cn.php.net/manual/zh/wrappers.php.php&#xff09;说明: php://input allows you to read raw data from the request bod…

微信小程序实例源码大全demo下载

怎么本地测试微信小程序实例源码 1.下载源码2.打开微信开发者工具3.添加项目->选择本项目目录->编译执行微信小程序实例源码大全 微信小程序游戏类demo&#xff1a;识色&#xff1b;从相似颜色中挑选不同的一个 源码链接&#xff1a;http://www.wxapp-union.com/forum.ph…

RabbitMQ 学习

参考&#xff1a;https://www.rabbitmq.com/getstarted.html 先在本地安装RabbitMQ 组件(需要安装Erlang组件&#xff09;&#xff0c;启动服务。 激活 RabbitMQs Management Plugin 使用RabbitMQ 管理插件&#xff0c;可以更好的可视化方式查看Rabbit MQ 服务器实例的状态。 打…

怎样提高WebService的性能

服务器端WebService程序using System.Runtime.Serialization.Formatters.Binary;using System.IO;using System.IO.Compression;using System.Data.SqlClient;………public class Service1 : System.Web.Services.WebService{[WebMethod(Description "直接返回 DataSet 对…

【jsp】jsp的内置对象(部分)

一、response 1、setStatus:设置响应状态码。 代码实现&#xff1a; response.setStatus(550); 更改的位置如图&#xff1a; 2、sendRedirect:服务器端跳转 代码实现&#xff1a; response.sendRedirect("Success.jsp"); 3、setContentRType:设置返回内容类型…

linux tar的使用方法

tar [-cxtzjvfpPN] 文件与目录 ....参数&#xff1a;-c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b;-x &#xff1a;解开一个压缩文件的参数指令&#xff01;-t &#xff1a;查看 tarfile 里面的文件&#xff01;特别注意&#xff0c;在参数的下达中&a…

关闭webstorm自动保存,并显示文件未保存标识

1.取消自动保存 2.显示编辑状态设置&#xff1a; 转载于:https://www.cnblogs.com/webSong/p/8807732.html

【转】SQL函数:字符串中提取数字,英文,中文,过滤重复字符

SQL函数&#xff1a;字符串中提取数字&#xff0c;英文&#xff0c;中文&#xff0c;过滤重复字符 --提取数字IF OBJECT_ID(DBO.GET_NUMBER) IS NOT NULLDROP FUNCTION DBO.GET_NUMBERGOCREATE FUNCTION DBO.GET_NUMBER(S VARCHAR(100))RETURNS VARCHAR(100)ASBEGINWHILE PATI…

【java】实现数据在页面之间传输

传数据页面&#xff1a; 方法&#xff1a;使用a标签传输数据 格式&#xff1a; <a name"C03S417" href"getRoomFinal.jsp?roomNumberC03S415">入住 </a> 接收数据页面&#xff1a; 方法&#xff1a; &#xff08;1&#xff09;使用java代…

Android画图学习总结(四)——Animation(上)

随着对Drewable的深入了解&#xff0c;发现了Drawable更加强大的功能&#xff1a;显示Animation。Android SDK介绍了2种Animation&#xff1a; Tween Animation&#xff1a;通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果 Frame Animation&#xff1a;顺序播…

ES6 Rest参数

Rest参数接收函数的多余参数&#xff0c;组成一个数组&#xff0c;放在形参的最后&#xff0c;形式如下&#xff1a; function func(a, b, ...theArgs) { // ... }rest参数只包括那些没有给出名称的参数&#xff0c;注意&#xff0c;rest参数之后不能再有其它参数&#xff08;即…

Data - 深入浅出学统计 - 下篇

本文是已读书籍的内容摘要&#xff0c;少部分有轻微改动&#xff0c;但不影响原文表达。 &#xff1a;以漫画形式来讲解最基本的统计概念和方法。 ISBN: 9787121299636https://book.douban.com/subject/26906845/2 - 探寻参数 2.1 - 中心极限定理&#xff08;Central Limit The…

[网摘学习]在Ubuntu上安装和配置OpenStack Nova之二

再收藏一份Openstack的文章,这两天的操作与此相同.但其中出现的问题还需要查找原因.待个人继续学习研究. 原文参考:http://www.linuxde.net/2011/11/1599.html此处仅供学习记录,版权归原作者. OpenStack 是 Python 2.6 写的&#xff0c;CentOS 5.6 上默认的是 Python 2.4 的环境…

【Linux】Linux computer文件夹下各种文件的作用

1、bin&#xff1a;放可执行文件&#xff0c;一些Linux的命令 注&#xff1a;Linux的命令最终都是一些程序&#xff0c;这些程序都放在bin目录和sbin目录 2、boot : 启动目录 3、dev : 存放设备 注&#xff1a;在Linux中把所有硬件都叫设备 4、etc&#xff1a; 安装软件的各种…

售前十年,两种人生

售前十年&#xff0c;两种人生,多重感悟! 售前第一年&#xff1a; 你 开始会觉得兴奋、紧张、恐慌。你对客户的提问&#xff0c;会有机械性的反应&#xff0c;试着说服他&#xff0c;但客户的表现总让你很茫然&#xff0c;你总是想把自己装扮的像一个专家&#xff0c;甚至故意打…

点击返回上一页面

οnclick"javascript:window.history.back(-1);" 方法一、以按钮点击的方式实现&#xff1a; <input type"button" name"Submit" value"返回上一页" οnclick"javascript:window.history.back(-1);"> 或者 &l…

【Linux】Linux 简单操作指令之磁盘管理

注&#xff1a;有关Linux全面的命令可以到网站&#xff1a;http://linux.51yip.com/查询 1、pwd : 显示当前所在位置 2、ll : 显示当前目录下的内容 注&#xff1a; (1)如果开头为一个 d 则为一个文件夹 如果开头为 - 则是一个文件 (2)ll后可以跟上一个目录&#xff0c;表示显…

浅说——九讲背包之01背包

所谓九讲&#xff0c;也就是&#xff1a;0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包&#xff1a; [问题描述]&#xff08;经典&#xff09;有一个吝啬的地主&#xff0c;不愿…

msvcrt.lib和LIBCD.lib链接冲突

今天在移植一个开源代码到windows的VC6工程&#xff0c;编译时出现了这些奇怪的LINK错误。 msvcrt.lib(MSVCRT.dll) : error LNK2005: _toupper already defined in LIBCD.lib(toupper.obj)msvcrt.lib(MSVCRT.dll) : error LNK2005: _tolower already defined in LIBCD.lib(to…

Oracle 小知识点

-- 表create table test (names varchar2(12),dates date,num int,dou double);-- 视图create or replace view vi_test asselect * from test;-- 同义词create or replace synonym aafor dbusrcard001.aa;-- 存储过程create or replace produce dd(v_id in employee.empoy…

CC2540获取本机MAC地址

//获取自身蓝牙地址void GetOwnAddr(void){ static uint8 ownAddress[6] {0}; ownAddress[5] XREG(0x780E); ownAddress[4] XREG(0x780F); ownAddress[3] XREG(0x7810); ownAddress[2] XREG(0x7811); ownAddress[1] XREG(0x7812); ownAddress[0] XREG(0x7813);}转载于:h…

mysql的小练习

建立如下表&#xff1a; 建表语句&#xff1a; class表创建语句 create table class(cid int not null auto_increment primary key, caption varchar(32) not null)engineinnodb default charsetutf8;student表创建语句 create table student(-> sid int not null auto_inc…

针对 Windows Phone 7 上的独立存储的 Sterling

http://msdn.microsoft.com/zh-cn/magazine/hh205658.aspx转载于:https://www.cnblogs.com/thankchunzi/archive/2011/11/18/2254416.html