620-3030
价格:999.00
厦门莫格电气自动化有限公司销售Honeywell霍尼韦尔620-3030您迈开询价的一小步,我还您成功的一大步。​620-3030620-3030620-3030异步串口(UART)通讯是嵌入式设备中***常见的通讯方式之一。本文主要针对预装WindowsCE操作系统的英创主板,分析用户层程序在使用UART进行发送时的几个有关问题,供客户在设计应用程序时参考。问题1:数据是否发送出去了?WriteFile函数是发送串口数据的基本API,具体函数形式及参数定义如下:BOOLWriteFile(HANDLEhFile,//CreateFile返回函数HandleLPCVOIDlpBuffer,//装载发送数据的Buffer指针DWORDnNumberOfBytesToWrite,//待发送数据的字节长度LPDWORDlpNumberOfBytesWritten,//返回的实际发送的字节数LPOVERLAPPEDlpOverlapped//=NULL,CE未使用该参数);WriteFile的返回值为TRUE并不代表发送Buffer中的数据已全部发送出去了,需要检查返回的实际字节长度lpNumberOfBytesWritten。所以推荐的调用方法为//发送缓冲区pTxBuff,发送长度dwLenDWORDdwNumberOfBytesWritten=0;BOOLbRet=WrietFile(hFile,pTxBuf,dwLen,&dwNumberOfBytesWritten,NULL);if(bRet&&(dwLen==dwNumberOfBytesWritten)){//发送缓冲区中的数据已成功送入UART硬件的发送端口,大多数情况数据已从物理端口发送出去,但此时可能还有若干字节还在UART的硬件TXFIFO中,等待硬件控制器顺序发送。//…发送成功…}else{//发送出错处理。。。。}问题2:WriteFile函数的阻塞问题CE串口驱动的执行数据发送时,为了保持代码的***率,没有在驱动程序中层另外分配Buffer,把应用层需发送的数据先Copy到内部再发送,而是直接利用用户层的pTxBuf。因此原则上说,当数据没有发送完前,WriteFile函数是不会返回,处于阻塞挂起状态的。进一步,可能存在某种原因,数据始终没有发送完毕,则WriteFile将永远阻塞而不会返回。不少应用程序并不希望这样的永远阻塞,而是希望WriteFile能在一定时间内返回,即使出错,也让应用程序有机会进行出错处理。CE驱动为此专门设置了超时机制,其数据结构如下:typedefstruct_COMMTIMEOUTS{DWORDReadIntervalTimeout;//与接收有关,本文不讨论DWORDReadTotalTimeoutMultiplier;//与接收有关,本文不讨论DWORDReadTotalTimeoutC***tant;//与接收有关,本文不讨论DWORDWriteTotalTimeoutMultiplier;//发送超时倍数因子DWORDWriteTotalTimeoutC***tant;//发送超时固定常数值}COMMTIMEOUTS,*LPCOMMTIMEOUTS;实际在驱动中,发送超时的计算及使用方法如下:DWORDdwTimeout=CommTimeouts.WriteTotalTimeoutMultiplier*dwLen+CommTimeouts.WriteTotalTimeoutC***tant;if(!dwTimeout)dwTimeout=INFINITE;//等待来自发送中断线程的发送结束事件ULONGWaitReturn=WaitForSingleObject(hTran***itEvent,dwTimeout);上面的代码中dwTimeout的单位为ms,在***次打开串口驱动”COM#”时,超时数据结构中的WriteTotalTimeoutMultiplier和WriteTotalTimeoutC***tant均为0,所以就有发送超时无穷的问题。为了让dwTimeout为有限值,需要设置超时参数如下:COMMTIMEOUTSCommTimeouts;//定义局部变量GetCommTimeouts(hFile,&CommTimeouts);//读取串口的超时参数//假设应用程序设置的串口波特率为baudCommTimeouts.WriteTotalTimeoutC***tant=baud/BR9600+1;CommTimeouts.WriteTotalTimeoutMultiplier=CommTimeouts.WriteTotalTimeoutC***tant*2;SetCommTimeouts(hFile,&CommTimeouts);//重新设置串口超时参数上述代码大致设置了一个2倍发送时间长度的超时时间,其中选取BR9600为单位时间,是因为9600bps波特率基本对应一个字节的发送时间为1ms。ABBDAI0493BSE013280R1TU810V16DPW015DI6205DDI014DDO024DAI053DI6103DO6103DRA023DSAX4523DSDP1703PU5153IMASI23337911-4-03381252AO6102DSBC1762DSDX4522DSPC172H2DSQC3222DSQC3522IEMU112NTCL012PM6302PU515A2TC501V1503BSC550038R32TC514V22PM511V161AI625207KT97B135AE92137911-4-033812413BSE008538R113BSE013062R1PU51413BSE013231R1TU811V113BSE032400R1PU514A13HAC0373-113HNE00313-1(含10米线及插头)172395-4-03391231AI6101CI6251CI810B1CM10/2001DAI011DAI031DAO011DCP021DCP101DDI031DDO011DI8141DLM011DO6201DO8201DSAI1301DSAI130D1DSAI1451DSAO1101DSAX4521DSDX4521DSIH72VPENOK1DSPC1701*****************************************************************DSPC1721DSQC327A1DSQC327A1DSQC3541DSQC503A1DSQC503A1DSQC5391DSQC6021DSQC6031DSQC6081DSQC6581DSTD1081DSU14I37911-4-03456591EHDB280-21-111PM510V161PM6321PM645B1RDCO-01C1RVC6-5A1SNAT7261***1TC512V11IMASO111IMDSO141DSQC5401CI626V11PM6331SC6101SC5201SC5131SB5101SR5111TC5201SC5101CI545V011BB510(DC5256)1RF61513HNE00313-11FOXBORO电源53FBM0438FBM20237P0400DL30P0500RG31FBM0230P0904FH27P0916AC27P0500RY24FBM20123FCM10E22FBM20420P0916AG20FBM0318FBM20317FBM0116FBM23716P0914XA16FBM24215FBM0713FBM21712P0961FR-CP6011P0961BC-CP40B11AD196BC10FBM214c10FPS400-2410P0916AA11P0800DC9P0950CA9P0960AW-CP309FBM098FBM128FBM428P0903ZE8FBM417P0916JW7P0971WV-DNBT7P0400VE6FCM100Et6P0916AE6FBM025P0500SR5P0914ZM5P0972PP-NCNI5P0961BD-GW30B5P0960HA5130K-N4-LLPF4FBM054FBM2074P0700WB4P0916FJ4FCP2704P0961EF-CP30B4P0916JP3P0500RU3P0970BC-DNBT3P0400ZG3P0926CP-ZCP2703P0970VB3P0903CW2FBM2062FBM207B2FBM2112FCM10Ef2P0800DA2P0902YU2P0903NQ2P0903NW2P0903ZN2P0916NG1P0917MF2P0960JA-CP403P0961CA2P0970EJ-DNBX2P0400VP-CMP102FBI10E2FBM061FBM071FBM181FBM2141FBM2231FBM2241K0143AA-PK0143AC-A1P0400VT1P0901VK1P0903MU1P0904BS1P0911VJ1P0912CA1P0916AW1P0916FK1P0926GH1P0970BC-DNBI1PO911***1SRP981-BIDLS1NA1P0400HE1P0961FX-CP60S1P0916JS1FBM441TRICON3604E1137005300353501E53502E53601E53636R53503E4410143607E33805E42658230062411923607E23700A24118245002421112058125511300813511136251372113511137011)
厦门莫格电气自动化有限公司
业务 QQ: 1982497648