在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

rt-thread 驅動篇(三) serialX 壓力測試

出出 ? 來源:出出 ? 作者:出出 ? 2022-06-22 09:22 ? 次閱讀

前言

本周筆者花了好多天的時間,計劃從多個方面對串口驅動做個比較。下面就從以下幾個角度做個對比測試。
1. 工作模式對照
2. close open 測試
3. poll 發送測試
4. flush 支持測試
5. 非阻塞收發測試
6. 阻塞收發測試
7. 回環測試數據丟失率

其它未測試項:stream 支持,因為 v1 v2 只有 poll 模式支持, serialX 可以全模式支持,這一項未進行對比。

測試環境

- rt-thread 4.1.0
- STM32F429-ATK-APOLLO
- 串口收發緩存均設定 128 字節

工作模式對照

版本 poll收發 阻塞/非阻塞 驅動層緩存 DMA支持 STREM 支持
v1 Y - - Y 僅poll
v2 Y * Y Y 僅poll
X Y Y Y Y 全模式

> \* v2 對阻塞概念的認識,僅認為是降低 cpu 耗用。

close & open 測試

測試過程:

1. 先用 poll 模式打開,打開失敗直接返回;成功輸出 "POLL modeopen opened\n" 。
2. 輸出 "CLOSE & REOPEN\n" 。關閉串口設備,再用中斷收發模式打開,打開失敗直接返回;成功輸出 "INT mode opened\n" 。
3. 最后循環關閉打開 1百萬次。打開失敗直接返回。
4. 測試通過,使用 poll 模式打開串口設備,并輸出 "REOPEN successfull\n"。準備進入下一項測試。

版本 v1 v2 X
測試結果 通過 通過 通過

poll 發送測試

用 poll 模式打開串口,發送若干數據。

版本 v1 v2 X
測試結果 通過 通過 通過

flush 支持測試

如果沒有 flush ,驅動緩存的數據可能沒有完全輸出到外設,這個時候 close 設備可能出現丟失部分數據。

使用 flush 的目地就是保證驅動層緩存數據完全輸出到外設,之后對設備的任何操作不會影響之前的數據。

版本 v1 v2 X
測試結果 不支持 不支持 通過

> 因為 v1 不支持非阻塞發送,也沒有驅動層緩存,write 總是把最后一個字節寫到串口移位寄存器后才返回。所以 v1 不會出現丟失數據的現象。

> v2 在這一環節的表現和 v1 是一樣的,大家可以猜猜原因是啥。

**注:本部分為了測試 flush 特性有效性,因此 X 出現 close 的時候出現丟數現象。使用版在 close 設備的時候應該強制 flush 一下的。**

非阻塞收發測試

使用中斷非阻塞模式打開串口設備,發送 10k 左右數據量,同時測量一下時間。

數據量 v1 v2 X
102400 102400 / 9762ticks 102400 / 8863ticks 102400 / 8863ticks
10240 10240 / 976ticks 10240 / 876ticks 10240 / 876ticks
128 128 / 12ticks 128 / 11ticks 128 / 11ticks

這部分測試大體上符合預期,因為有緩存,v2 和 X 先把數據放到緩存中就返回了。這樣可以減少發送等待時間。

阻塞收發測試

數據量 v1 v2 X
102400 102400 / 9762ticks 102400 / 8902ticks 102400 / 8866ticks
10240 10240 / 976ticks 10240 / 890ticks 10240 / 884ticks
128 128 / 12ticks 128 / 11ticks 128 / 11ticks

> v1 在非阻塞和阻塞兩種模式下的表現是一樣的,因為它沒有阻塞概念。
>
> v2 耗時比 v1 少,這是在預料中的,但是,它還是比 X 多了幾個 tick 。這也是上文中工作模式對照部分對它的阻塞/非阻塞特性加 \* 的原因。

特別測試,當每次寫小于串口驅動層緩存大小的數據時,

數據量 v2 X
16 1ticks 0ticks
32 5ticks 0ticks
128 11ticks 0ticks

為什么出現了和上面表格不一樣的結果,因為這次測試,每次寫之前有個 1s 延時,保證串口緩存是空的。**當串口緩存大小是 N 前提下,每次 write 小于等于 N 數量的數據應該可以直接寫到緩存,并立馬返回!**所以,對于 X 來說耗時就是 **0**。

這個很重要,**當我們用串口調試程序,需要打印一些信息的時候,又不希望因為串口輸出數據影響到其它業務的時序,或者,最大限度地降低因串口輸出數據而影響其它程序執行時序**。

回環測試數據丟失率

使用阻塞模式打開串口設備。這次通過串口調試助手以 20ms 的定時間隔,發送 384 字節數據。

版本 v1 v2 X
丟失率 671144 / 556848/17.03% 1208816/1070464/11.45% 2390800/2390800/0%

> v2 在這一步表現很差,第一次,筆者應用層緩存是 512 字節,想 `rt_device_read(uart, -1, recvbuf, 512);` 發現 read 不到任何數據,read 也不阻塞了,而是總能返回,單步進去看到,但接收的數據大于驅動緩存的時候,驅動拒絕處理,直接返回0?。。2 的缺陷之一。
>
> 鑒于以上原因,之后改成 `rt_device_read(uart, -1, recvbuf, 128);` 應用緩存和驅動緩存大小相等。
>
> 手動單次發送,一次發送 344 字節數據(多于驅動緩沖大?。邮?256 字節,再次發送,接收 384 字節,第三次發送接收還是 256 字節,第四次又變成 384字節。

即便考慮到 v2 的上述缺陷,最多有 127 個字節數據被“滯留”串口驅動緩存里未及時返回。也彌補不了上述丟失率!

開啟 DMA 的表現

很遺憾,v1 只支持 DMA 接收不支持 DMA 發送(估計以后也用不上 v1 了),由以上對比測試我們發現 v2 和 v1 很類似,在測試 v2 DMA 接收發送時也發現總體效果和使用中斷沒多少差異。

X 的表現如何呢?等待您的發現!

> 遺憾的是,筆者對 STM32 的 HAL 極其不熟悉,又極其不想用 HAL ?;撕荛L時間想自己通過寄存器配置實現,最終沒成功,還是放棄了。
>
> HAL 有一個好處,那就是幾乎可以適配 STM32 所有系列芯片。但是,HAL 不是為 OS 而生的 `#error "USE_RTOS should be 0 in the current HAL release"`,在 OS 上用終究有可能遇到失鎖的問題。
>
> 使用 HAL 還有個小小的瑕疵,那就是 `is_dma_txing` 判斷變得不友好,無奈之下,筆者在 `struct stm32_uart` 中添加了個 `rt_bool_t dmaTxing;` 變量 —— ”HAL 中 gState 和 RxState 已經夠多了“ 。算是目前的一個小遺憾吧。

結束語

最后,依舊公開測試代碼,本次測試使用的代碼可以在 [serialX]( https://gitee.com/thewon/serialX ) 倉庫找到。近期,筆者也會將 serialX 提交到 rt-thread 主倉庫。

提前預告,下次我們來聊聊 serialX 在做控制臺串口時遇到的問題已經解決方案(包括使用中斷 DMA 收發模式打開的串口設備)。

相關文章:

rt-thread 驅動篇(一) serialX 框架理論

rt-thread 驅動篇(二) serialX 理論實現

審核編輯:湯梓紅

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

    關注

    8

    文章

    5373

    瀏覽量

    126976
  • 串口驅動
    +關注

    關注

    2

    文章

    82

    瀏覽量

    18720
  • RT-Thread
    +關注

    關注

    31

    文章

    1305

    瀏覽量

    40331
  • serialX
    +關注

    關注

    0

    文章

    7

    瀏覽量

    811
收藏 人收藏

    評論

    相關推薦

    RT-Thread記錄(一、版本開發環境及配合CubeMX)

    RT-Thread 學習記錄的第一文章,RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發環境 及
    的頭像 發表于 06-20 00:28 ?5324次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(一、版本開發環境及配合CubeMX)

    rt-thread 驅動(六)serialX弊端及解決方法

    serialX 作為一個非阻塞串口驅動框架,在遇到一些異常時,需要做一些特殊處理,今天,筆者帶大家來扒一扒 serialX 使用過程中需要注意哪些問題。
    的頭像 發表于 06-20 11:43 ?3627次閱讀

    RT-Thread ssd1306驅動

    RT-Thread 驅動ssd1306
    的頭像 發表于 04-21 10:08 ?26.5w次閱讀
    <b class='flag-5'>RT-Thread</b> ssd1306<b class='flag-5'>驅動</b>

    RT-Thread設備驅動開發指南基礎—以先楫bsp的hwtimer設備為例

    RT-Thread設備驅動開發指南》書籍是RT-thread官方出品撰寫,系統講解RT-thread IO設備驅動開發方法,從
    的頭像 發表于 02-20 16:01 ?1782次閱讀
    <b class='flag-5'>RT-Thread</b>設備<b class='flag-5'>驅動</b>開發指南基礎<b class='flag-5'>篇</b>—以先楫bsp的hwtimer設備為例

    【原創精選】RT-Thread征文精選技術文章合集

    serialX 理論實現rt-thread 驅動serialX
    發表于 07-26 14:56

    測試serialX的posix支持詳解

    Terminal I/O “其它項可以取消選擇。測試我們繼續使用 rt-thread 驅動serialX 全網公測 提供的
    發表于 02-14 11:29

    RT-Thread Studio驅動SD卡

    RT-Thread Studio驅動SD卡前言一、創建基本工程1、創建Bootloader2、創建項目工程二、配置RT-Thread Settings、代碼分析1.引入庫2.讀入數據
    發表于 12-27 19:13 ?20次下載
    <b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>驅動</b>SD卡

    RT-Thread全球技術大會:RT-Thread上的單元測試框架與運行測試用例

    RT-Thread全球技術大會:RT-Thread上的單元測試框架與運行測試用例 ? ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:21 ?1656次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>RT-Thread</b>上的單元<b class='flag-5'>測試</b>框架與運行<b class='flag-5'>測試</b>用例

    RT-Thread全球技術大會:在RT-Thread上編寫測試用例

    RT-Thread全球技術大會:在RT-Thread上編寫測試用例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:28 ?1513次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:在<b class='flag-5'>RT-Thread</b>上編寫<b class='flag-5'>測試</b>用例

    RT-Thread全球技術大會:RT-Thread測試用例集合案例

    RT-Thread全球技術大會:RT-Thread測試用例集合案例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:34 ?2131次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>RT-Thread</b><b class='flag-5'>測試</b>用例集合案例

    rt-thread 驅動(五)serialX 小試牛刀

    終于來到了 serialX 的實踐,期待很久了。
    的頭像 發表于 06-16 11:29 ?4632次閱讀
    <b class='flag-5'>rt-thread</b> <b class='flag-5'>驅動</b><b class='flag-5'>篇</b>(五)<b class='flag-5'>serialX</b> 小試牛刀

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread文檔_utest 測試框架

    RT-Thread文檔_utest 測試框架
    發表于 02-22 18:43 ?2次下載
    <b class='flag-5'>RT-Thread</b>文檔_utest <b class='flag-5'>測試</b>框架

    RT-Thread設備驅動開發指南》基礎--以先楫bsp的hwtimer設備為例

    一、概述(一)RT-Thread設備驅動RT-Thread設備驅動開發指南》書籍是RT-thread官方出品撰寫,系統講解
    的頭像 發表于 02-24 08:16 ?1812次閱讀
    《<b class='flag-5'>RT-Thread</b>設備<b class='flag-5'>驅動</b>開發指南》基礎<b class='flag-5'>篇</b>--以先楫bsp的hwtimer設備為例
    主站蜘蛛池模板: 国产主播在线观看 | 一级网站在线观看 | 国产拳头交一区二区 | 一级做a爱片在线播放 | 久久人人做人人玩人精品 | ts人妖在线观看 | 天天综合天天做天天综合 | 性色视频免费 | 天天躁夜夜躁狠狠躁躁 | 精品午夜视频 | 人人草人人爽 | 痴女中文字幕在线视频 | 高清国产下药迷倒美女 | 日日夜夜噜 | 亚洲一区区 | 黄色一级视频网 | 色多多免费视频观看区一区 | 美女无遮挡拍拍拍免费视频 | 农村妇女色又黄一级毛片卡 | 亚洲天堂网站 | 天天玩天天操 | 在线视频观看免费 | 性感美女视频黄.免费网站 性高清 | 色婷婷狠狠 | 色黄视频 | 色综合色综合色综合色综合 | 欧美黄色片一级 | 午夜影视免费观看 | 四虎影视入口 | 黄色天堂 | 亚洲卡1卡2卡新区网站 | 欧美一区二区三区免费高 | 国产高清视频免费最新在线 | 亚洲一区二区三区高清视频 | 欧美伊久线香蕉线新在线 | 天天天天添天天拍天天谢 | 男人j进女人j的一进一出视频 | 亚洲欧美啪啪 | 性欧美高清| 中文免费观看视频网站 | 男女交性视频播放 视频 视频 |