精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

英創信息技術串口通訊中數據發送的有關問題分析

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2020-02-04 11:27 ? 次閱讀

異步串口(UART)通訊是嵌入式設備中最常見的通訊方式之一。本文主要針對預裝Windows CE操作系統的英創主板,分析用戶層程序在使用UART進行發送時的幾個有關問題,供客戶在設計應用程序時參考。

問題1:數據是否發送出去了?

WriteFile函數是發送串口數據的基本API,具體函數形式及參數定義如下:

BOOLWriteFile(

HANDLE hFile,//CreateFile返回函數Handle

LPCVOID lpBuffer,//裝載發送數據的Buffer指針

DWORD nNumberOfBytesToWrite,//待發送數據的字節長度

LPDWORD lpNumberOfBytesWritten,//返回的實際發送的字節數

LPOVERLAPPED lpOverlapped// = NULL,CE未使用該參數

);

WriteFile的返回值為TRUE并不代表發送Buffer中的數據已全部發送出去了,需要檢查返回的實際字節長度lpNumberOfBytesWritten。所以推薦的調用方法為

// 發送緩沖區pTxBuff, 發送長度dwLen

DWORD dwNumberOfBytesWritten = 0;

BOOL bRet = WrietFile(hFile, pTxBuf, dwLen, &dwNumberOfBytesWritten, NULL);

if(bRet && (dwLen == dwNumberOfBytesWritten))

{

//發送緩沖區中的數據已成功送入UART硬件的發送端口,大多數情況數據已從

//物理端口發送出去,但此時可能還有若干字節還在UART的硬件TX FIFO中,等

//待硬件控制器順序發送。

//… 發送成功 …

}

else

{

//發送出錯處理。。。。

}

問題2:WriteFile函數的阻塞問題

CE串口驅動的執行數據發送時,為了保持代碼的高效率,沒有在驅動程序中層另外分配Buffer,把應用層需發送的數據先Copy到內部再發送,而是直接利用用戶層的pTxBuf。因此原則上說,當數據沒有發送完前,WriteFile函數是不會返回,處于阻塞掛起狀態的。進一步,可能存在某種原因,數據始終沒有發送完畢,則WriteFile將永遠阻塞而不會返回。不少應用程序并不希望這樣的永遠阻塞,而是希望WriteFile能在一定時間內返回,即使出錯,也讓應用程序有機會進行出錯處理。CE驅動為此專門設置了超時機制,其數據結構如下:

typedefstruct_COMMTIMEOUTS {

DWORD ReadIntervalTimeout; //與接收有關,本文不討論

DWORD ReadTotalTimeoutMultiplier; //與接收有關,本文不討論

DWORD ReadTotalTimeoutConstant; //與接收有關,本文不討論

DWORD WriteTotalTimeoutMultiplier; //發送超時倍數因子

DWORD WriteTotalTimeoutConstant; //發送超時固定常數值

} COMMTIMEOUTS,*LPCOMMTIMEOUTS;

實際在驅動中,發送超時的計算及使用方法如下:

DWORD dwTimeout =

CommTimeouts.WriteTotalTimeoutMultiplier*dwLen +

CommTimeouts.WriteTotalTimeoutConstant;

if( !dwTimeout )

dwTimeout = INFINITE;

//等待來自發送中斷線程的發送結束事件

ULONG WaitReturn = WaitForSingleObject(hTransmitEvent, dwTimeout);

上面的代碼中dwTimeout的單位為ms,在第一次打開串口驅動”COM#”時,超時數據結構中的WriteTotalTimeoutMultiplier和WriteTotalTimeoutConstant均為0,所以就有發送超時無窮的問題。為了讓dwTimeout為有限值,需要設置超時參數如下:

COMMTIMEOUTS CommTimeouts; //定義局部變量

GetCommTimeouts(hFile, &CommTimeouts); //讀取串口的超時參數

//假設應用程序設置的串口波特率為baud

CommTimeouts. WriteTotalTimeoutConstant = baud / BR9600 + 1;

CommTimeouts. WriteTotalTimeoutMultiplier =

CommTimeouts.WriteTotalTimeoutConstant * 2;

SetCommTimeouts(hFile, &CommTimeouts); //重新設置串口超時參數

上述代碼大致設置了一個2倍發送時間長度的超時時間,其中選取BR9600為單位時間,是因為9600bps波特率基本對應一個字節的發送時間為1ms。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • WINDOWS
    +關注

    關注

    3

    文章

    3526

    瀏覽量

    88449
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6085

    瀏覽量

    35225
收藏 人收藏

    評論

    相關推薦

    中科達榮獲2024年軟件和信息技術服務優秀企業

    及前百家企業”名單。中科達憑借非凡的技術實力與持續的創新能力,成功入選“2024年度軟件和信息技術服務競爭力百強企業”以及“2024年軟件和信息技術服務優秀企業”。
    的頭像 發表于 10-30 11:44 ?391次閱讀

    加速鯤鵬落地!拓維信息遷移工具榮獲鯤鵬原生開發技術認證

    認證。圖/拓維·數據庫適配中間件取得鯤鵬原生開發N認證在數字化時代的大潮,信戰略作為國家推動信息技術應用創新、保障信息安全與自主可控的關
    的頭像 發表于 09-10 08:03 ?397次閱讀
    加速鯤鵬落地!拓維<b class='flag-5'>信息</b>信<b class='flag-5'>創</b>遷移工具榮獲鯤鵬原生開發<b class='flag-5'>技術</b>認證

    軟國際信服務助力大連信產業發展

    為進一步激發大連本地信產業生態的活力與潛力,搭建一個高效、開放的交流平臺。由大連軟件行業協會攜手大連市信息技術應用創新綜合服務中心主辦,軟國際協辦的,2024年大連市信息技術應用創
    的頭像 發表于 08-27 16:49 ?813次閱讀

    LABVIEW串口通訊

    labview實現串口通訊
    發表于 08-19 14:37 ?5次下載

    ESP32串口接收和發送數據,會有延遲是怎么回事?

    測試環境:串口波特率600bps,串口接收256字節數據。 在調試串口時,發現發送多于120字節時,串口
    發表于 06-26 08:07

    BIG WALNUT大核桃全面響應國家“信”號召,傾力“智”造國產芯片+國產加密安全系統通訊產品

    信息化高速發展的今天,信息技術的自主可控和信息安全已經成為國家發展的重要基石。國家信戰略的提出,旨在推動國產信息產業的崛起,實現
    的頭像 發表于 06-18 17:42 ?495次閱讀

    使用STM8S103系列單片機的串口通訊,發現串口發送數據后一直進入接收中斷為什么?

    使用STM8S103系列單片機的串口通訊,發現串口發送數據后一直進入接收中斷??是什么原因所致的???
    發表于 04-30 07:25

    中興通訊中標2023年中移動信息IT云系統框架采購項目

    近日,移(動)信息技術有限公司(以下簡稱中移動信息)公布2023年IT云資源池SDN系統框架采購項目招標結果,中興通訊以第一名50%份額中標。
    的頭像 發表于 03-15 10:20 ?414次閱讀

    股份今日登陸科

    山東軟件商用中間件股份有限公司(以下簡稱“股份”)近日在上海證券交易所科板成功上市,標志著這家國內知名的民營軟件和
    的頭像 發表于 03-13 14:19 ?503次閱讀

    股份在上交所科板上市

    山東軟件商用中間件股份有限公司(以下簡稱“股份”)近日在上海證券交易所科板成功上市,標志著這家國內知名的民營軟件和
    的頭像 發表于 03-13 14:02 ?502次閱讀

    串口通訊時的數據幀格式和通訊協議有什么區別?

    串口通訊時的數據幀格式和通訊協議是兩個不同的概念,它們在串口通訊
    的頭像 發表于 01-30 09:21 ?1893次閱讀

    dma和串口直接發送的區別

    ,我們先來介紹一下DMA和串口直接發送的原理和工作方式。 DMA是一種高速數據傳輸技術,它允許外設直接與內存進行數據交換,而不需要CPU的介
    的頭像 發表于 01-07 17:43 ?2734次閱讀

    USB虛擬串口串口1可以同時發送

    可以同時發送,USB虛擬串口和物理串口1都可以作為數據傳輸的通道,可以同時操作和發送數據。 US
    的頭像 發表于 01-04 11:26 ?1487次閱讀

    AWTK 串口屏開發(3) - 告警信息

    告警信息是一個常用的功能。在AWTK開源串口,內置告警信息模型,只需設計用戶界面即可實現告警信息的顯示和管理。1.功能告警
    的頭像 發表于 12-23 08:24 ?430次閱讀
    AWTK <b class='flag-5'>串口</b>屏開發(3) - 告警<b class='flag-5'>信息</b>

    單片機串口通信的接收與發送

    單片機串口通信是一種常見的通信方式,它可以實現單片機與外部設備的數據交換。在實際應用,單片機串口通信常用于與電腦、傳感器、LCD顯示屏等外設進行
    的頭像 發表于 12-20 14:03 ?3528次閱讀