哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

serialX的posix接口測試

冬至子 ? 來源:出出啊 ? 作者:出出啊 ? 2023-10-13 10:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

測試環(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” 。進入子菜單,選擇

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

其它項可以取消選擇。

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

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

其它項可以取消選擇。

測試

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

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

serial_fops_open

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

serial_fops_read

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

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);

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

flush 概念

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

找到 const static struct dfs_file_ops _serial_fops = 變量定義代碼行,將 RT_NULL, /* flush / 修改為 serial_fops_flush, / flush */ 。然后在上面添加 serial_fops_flush 函數(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 銜接起來了。

select io 復(fù)用

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

用這種方式,我們可以同時監(jiān)聽多個串口設(shè)備了?;蛘哒f,一個線程“同時”讀多個串口設(shè)備。

termios

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

總結(jié)

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

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

    關(guān)注

    0

    文章

    147

    瀏覽量

    7761
  • Posix
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

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

    關(guān)注

    32

    文章

    1634

    瀏覽量

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

    關(guān)注

    0

    文章

    26

    瀏覽量

    9614
  • FreeModbus
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    5107
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

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

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

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

    在RT-Thread中使用POSIX Threads接口

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

    嘗試一下在freemodbus里使用serialX

    接口中的每一個函數(shù)的功能。完全按照每一個函數(shù)功能定義去做,后面的事情就是水到渠成的?;诵“胩斓臅r間從 drv_uart.c 改成 drv_uartX.c 。然后使用 serialX 中提供的 測試
    發(fā)表于 02-13 15:09

    測試serialXposix支持詳解

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

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

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

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

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

    posix是什么

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

    Linux信號量(2):POSIX 信號量

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

    RT-Thread 4.1.0中POSIX淵源介紹

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

    RT-Thread 大會:POSIX簡介和使用

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

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

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

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

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

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

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

    POSIX適合對象存儲嗎?

    最近,留意到 MinIO 官方博客的一篇題為“在對象存儲上實現(xiàn) POSIX 訪問接口是壞主意[1]”的文章,作者以 S3FS-FUSE 為例分享了通過 POSIX 方式訪問 MinIO 中的數(shù)據(jù)時碰到了性能方面的困難,性能遠(yuǎn)不如
    的頭像 發(fā)表于 10-29 10:19 ?1399次閱讀
    <b class='flag-5'>POSIX</b>適合對象存儲嗎?
    达孜县| 泰州市| 张家港市| 双牌县| 叶城县| 肃北| 黔西县| 淮滨县| 邹平县| 盖州市| 山东| 蓬安县| 永丰县| 大兴区| 华蓥市| 蒙城县| 剑川县| 荣成市| 廊坊市| 昆明市| 汾阳市| 邵阳县| 罗定市| 黔南| 扶沟县| 香格里拉县| 乾安县| 西昌市| 江油市| 额敏县| 保山市| 扎鲁特旗| 乌拉特中旗| 德令哈市| 孝昌县| 石柱| 铜陵市| 囊谦县| 太谷县| 济南市| 舞钢市|