色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

serialX的posix接口測(cè)試

冬至子 ? 來(lái)源:出出啊 ? 作者:出出啊 ? 2023-10-13 10:30 ? 次閱讀

測(cè)試環(huán)境

開發(fā)板: NK-980IOT V1.0 的開發(fā)板
rt-thread 版本:4.1.1
IDE:keil + env

啟用 posix

首先,啟用 DFS:”RT-Thread Components” -> “DFS: device virtual file system” 。進(jìn)入子菜單,選擇

“Using posix-like functions, open/read/write/close”
“ Using devfs for device objects”

其它項(xiàng)可以取消選擇。

然后進(jìn)入 “RT-Thread Components” -> “C/C++ and POSIX layer” -> “POSIX (Portable Operating System Interface) layer” 子菜單項(xiàng),選擇

“Enable POSIX file system and I/O”
“Enable I/O Multiplexing select() “
“Enable Terminal I/O “

其它項(xiàng)可以取消選擇。

測(cè)試

我們繼續(xù)使用 rt-thread 驅(qū)動(dòng)篇 之 serialX 全網(wǎng)公測(cè) 提供的測(cè)試方案,但是把里面的讀寫 API 改一改,rt_device_open 改成 open,rt_device_read 改成 read,rt_device_write 改成 write,rt_device_close 改成 close。

我們知道, open/read/write/close 分別對(duì)應(yīng)調(diào)用 dfs_file_(open/read/write/close) 進(jìn)而調(diào)用 struct dfs_file_ops 結(jié)構(gòu)體中定義的 open/read/write/close 接口。在串口驅(qū)動(dòng)框架里就是 serial_fops_(open/read/write/close) 等幾個(gè)函數(shù)。

serial_fops_open

需要說明的是,我們只能選擇“中斷”或者“DMA”中的一種模式了。另外,除了 O_RDONLY O_WRONLY O_RDWR 三種讀寫標(biāo)志,還可以支持 O_NONBLOCK ,它等于 RT_DEVICE_OFLAG_NONBLOCKING。

serial_fops_read

原來(lái)的實(shí)現(xiàn)有如下一個(gè) while 循環(huán),這個(gè)循環(huán)的本意是:非阻塞模式下,如果沒有 read 到數(shù)據(jù)返回 -EAGAIN 錯(cuò)誤值,告知應(yīng)用層無(wú)數(shù)據(jù)并可以再次讀;阻塞模式下,如果沒有 read 到數(shù)據(jù)將等待工作隊(duì)列而掛起線程。

do
{
    size = rt_device_read(device, -1, buf, count);
    if (size <= 0)
    {
        if (fd- >flags & O_NONBLOCK)
        {
            size = -EAGAIN;
            break;
        }
        rt_wqueue_wait(&(device- >wait_queue), 0, RT_WAITING_FOREVER);
    }
}while (size <= 0);

這和原來(lái) serialX 的阻塞模式概念是一致的,如此一來(lái),我們發(fā)現(xiàn)阻塞模式時(shí) rt_device_read 先阻塞了,并不會(huì)走到 if 條件語(yǔ)句塊內(nèi)。

flush 概念

大家一定知道,flush 支持是 serialX 獨(dú)有的,v1 v2 沒有這個(gè)。當(dāng)我們開啟 posix 之后,發(fā)現(xiàn) dfs 實(shí)現(xiàn)了一個(gè)函數(shù) fsync ,同時(shí)還有一個(gè) dfs_file_flush 函數(shù),以及 struct dfs_file_ops 也定義了 flush 接口。只是在之前的版本里這個(gè)都沒有實(shí)現(xiàn)。于是,我們對(duì) “serialX.c” 做如下修改

找到 const static struct dfs_file_ops _serial_fops = 變量定義代碼行,將 RT_NULL, /* flush / 修改為 serial_fops_flush, / flush */ 。然后在上面添加 serial_fops_flush 函數(shù)實(shí)現(xiàn):

static int serial_fops_flush(struct dfs_fd *fd)
{
rt_device_t device;
device = (rt_device_t)fd->data;
return rt_device_flush(device);
}

瞧,serialX 的 flush 和 dfs 的 flush 以及 posix 的 fsync 銜接起來(lái)了。

select io 復(fù)用

之前設(shè)計(jì)的測(cè)試方案里,只有回環(huán)測(cè)試改動(dòng)比較大。這里我們使用 select 這個(gè)高級(jí)的用法,監(jiān)聽是否有數(shù)據(jù)。

用這種方式,我們可以同時(shí)監(jiān)聽多個(gè)串口設(shè)備了。或者說,一個(gè)線程“同時(shí)”讀多個(gè)串口設(shè)備。

termios

開啟了 posix ,串口設(shè)備修改波特率、數(shù)據(jù)位等需要使用 termios。這部分的問題留待下一篇 libmodbus 部分詳說。

總結(jié)

啟用了 posix 后我們發(fā)現(xiàn),posix 是在原來(lái)的設(shè)備驅(qū)動(dòng)框架基礎(chǔ)上套的一層殼。增加了函數(shù)調(diào)用跳轉(zhuǎn)次數(shù)。如果沒有必要的理由,還是不啟用 posix 了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C++語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    6989
  • Posix
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    9496
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1285

    瀏覽量

    40089
  • DFS
    DFS
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    9162
  • FreeModbus
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    4466
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    rt-thread 驅(qū)動(dòng)篇(六)serialX弊端及解決方法

    serialX 作為一個(gè)非阻塞串口驅(qū)動(dòng)框架,在遇到一些異常時(shí),需要做一些特殊處理,今天,筆者帶大家來(lái)扒一扒 serialX 使用過程中需要注意哪些問題。
    的頭像 發(fā)表于 06-20 11:43 ?3523次閱讀

    請(qǐng)問rtthread的外設(shè)驅(qū)動(dòng)為什么不實(shí)現(xiàn)posix接口

    外設(shè)驅(qū)動(dòng)想支持posix接口,如select\\poll、read、write、ioctl,希望能支持異步通知、輪詢、batch設(shè)置功能。但是rtthread在通過
    發(fā)表于 07-15 06:34

    在RT-Thread中使用POSIX Threads接口

    POSIX Threads簡(jiǎn)稱Pthreads,POSIX是"Portable Operating System Interface"(可移植操作系統(tǒng)接口) 的縮寫,POSIX
    發(fā)表于 08-12 15:02

    嘗試一下在freemodbus里使用serialX

    接口中的每一個(gè)函數(shù)的功能。完全按照每一個(gè)函數(shù)功能定義去做,后面的事情就是水到渠成的。花了小半天的時(shí)間從 drv_uart.c 改成 drv_uartX.c 。然后使用 serialX 中提供的 測(cè)試
    發(fā)表于 02-13 15:09

    測(cè)試serialXposix支持詳解

    看看有什么問題,然后發(fā)現(xiàn)困難重重,于是退而求其次,先測(cè)試 serialXposix 接口測(cè)試環(huán)境開發(fā)板: NK-980IOT V1.
    發(fā)表于 02-14 11:29

    淺析基于serialX串口驅(qū)動(dòng)移植libmodbus

    詳細(xì)比對(duì),libmodbus 打開串口設(shè)備后使用 termios 配置串口設(shè)備的波特率數(shù)據(jù)位等。而筆者上次在測(cè)試 posix 接口時(shí)使用的默認(rèn)配置,并沒有修改波特率。為了驗(yàn)證并跟蹤問題位置,筆者在
    發(fā)表于 02-15 11:07

    嵌入式軟件使用POSIX接口的優(yōu)缺點(diǎn)

    POSIX既然是可移植操作系統(tǒng)接口,那基于該接口的應(yīng)用程序可移植性自然是很高的。基于POSIX接口設(shè)計(jì)的應(yīng)用程序可以在不做修改或僅做極少量的
    發(fā)表于 11-14 08:45 ?5622次閱讀

    posix是什么

    POSIX表示可移植操作系統(tǒng)接口POSIX標(biāo)準(zhǔn)定義了操作系統(tǒng)應(yīng)該為應(yīng)用程序提供的接口標(biāo)準(zhǔn),是IEEE為要在各種UNIX操作系統(tǒng)上運(yùn)行的軟件而定義的一系列API標(biāo)準(zhǔn)的總稱,其正式稱呼為
    發(fā)表于 11-14 15:09 ?1.1w次閱讀
    <b class='flag-5'>posix</b>是什么

    Linux信號(hào)量(2):POSIX 信號(hào)量

    存儲(chǔ))置于可選部分中。在 SUSv4 之前,POSIX 信號(hào)量接口已經(jīng)被包含在信號(hào)量選項(xiàng)中。在 SUSv4 中,這些接口被移至了基本規(guī)范,而消息隊(duì)列和共享存儲(chǔ)接口依然是可選的。
    的頭像 發(fā)表于 10-29 17:34 ?708次閱讀

    RT-Thread 4.1.0中POSIX淵源介紹

    可移植操作系統(tǒng)接口POSIX 標(biāo)準(zhǔn)定義了操作系統(tǒng)(很多時(shí)候針對(duì)的是類 Unix 操作系統(tǒng))應(yīng)該為應(yīng)用程序提供的接口標(biāo)準(zhǔn),從而保證了應(yīng)用程序在源碼層次的可移植性,如今主流的 Linux 系統(tǒng)都做
    的頭像 發(fā)表于 04-27 10:22 ?1802次閱讀

    RT-Thread 大會(huì):POSIX簡(jiǎn)介和使用

    可移植操作系統(tǒng)接口POSIX標(biāo)準(zhǔn)定義了操作系統(tǒng)(很多時(shí)候針對(duì)的是類Unix操作系統(tǒng))應(yīng)該為應(yīng)用程序提供的接口標(biāo)準(zhǔn),從而保證了應(yīng)用程序在源碼層次的可移植性。如今主流的Linux系統(tǒng)都做到了兼容
    的頭像 發(fā)表于 05-27 16:27 ?1899次閱讀
    RT-Thread 大會(huì):<b class='flag-5'>POSIX</b>簡(jiǎn)介和使用

    rt-thread 驅(qū)動(dòng)篇(五)serialX 小試牛刀

    終于來(lái)到了 serialX 的實(shí)踐篇,期待很久了。
    的頭像 發(fā)表于 06-16 11:29 ?4534次閱讀
    rt-thread 驅(qū)動(dòng)篇(五)<b class='flag-5'>serialX</b> 小試牛刀

    基于serialX串口驅(qū)動(dòng)移植libmodbus的步驟

    之前,筆者介紹 serialX 的時(shí)候,曾詳細(xì)的講解過 struct rt_uart_ops 接口中的每一個(gè)函數(shù)的功能。完全按照每一個(gè)函數(shù)功能定義去做,后面的事情就是水到渠成的。
    發(fā)表于 08-10 15:25 ?690次閱讀

    基于serialX串口驅(qū)動(dòng)移植freemodbus

    之前,筆者寫過多篇 serialX 的文章,已經(jīng)把它的原理和理念完完全全明明白白講了,包括它的優(yōu)勢(shì)以及使用它需要注意的方面和可能遇到的問題。
    的頭像 發(fā)表于 10-13 14:54 ?829次閱讀

    POSIX適合對(duì)象存儲(chǔ)嗎?

    最近,留意到 MinIO 官方博客的一篇題為“在對(duì)象存儲(chǔ)上實(shí)現(xiàn) POSIX 訪問接口是壞主意[1]”的文章,作者以 S3FS-FUSE 為例分享了通過 POSIX 方式訪問 MinIO 中的數(shù)據(jù)時(shí)碰到了性能方面的困難,性能遠(yuǎn)不如
    的頭像 發(fā)表于 10-29 10:19 ?645次閱讀
    <b class='flag-5'>POSIX</b>適合對(duì)象存儲(chǔ)嗎?
    主站蜘蛛池模板: 中文字幕一区二区三区在线观看 | 国产小视频免费看| 亚洲AV久久无码精品国产网站 | 久久99精品涩AV毛片观看| 亚洲欧美日本国产在线观18| 黄色a三级免费看| 伊人久久综合| 内射白嫩少妇超碰| 成人网站国产在线视频内射视频| 色欲AV蜜臀AV在线观看麻豆| 国产精品一久久香蕉国产线看| 亚洲伦理精品久久| 麻豆第一区MV免费观看网站| va亚洲va天堂va视频在线| 网友自拍偷拍| 精品手机在线1卡二卡3卡四卡| 亚洲 欧美 清纯 校园 另类| 国产色精品久久人妻无码看片| 窝窝影院午夜看片毛片| 国产香蕉尹人视频在线| 新图解av吧| 久久电影精品久久99久久| 亚州综合网| 好男人好资源视频高清| 亚洲偷偷自拍免费视频在线| 国产人成精品综合欧美成人| 亚洲AV久久婷婷蜜臀无码不卡| 国产成人8x视频一区二区| 色琪琪丁香婷婷综合久久| 极品少妇高潮XXXXX| www.黄色| 亚洲视频免费| 日本三级黄色大片| 久久这里的只有是精品23| 超级乱淫片午夜电影网99| 亚洲欧美激情精品一区二区| 青柠在线观看免费全集| 黄色软件视频app| 国产AV精品久久久免费看| 中文字幕中文字幕永久免费| 羲义嫁密着中出交尾gvg794|