亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

芯靈思Sinlinx A64開發板 Linux內核等待隊列p

發布時間:2020-03-01 11:57:14 來源:網絡 閱讀:247 作者:sinlinx123 欄目:系統運維

開發平臺 芯靈思Sinlinx A64
內存: 1GB 存儲: 4GB
開發板詳細參數 https://m.tb.cn/h.3wMaSKm
開發板交流群 641395230

阻塞:阻塞調用是指調用結果返回之前,當前進程程會被掛起(休眠)。函數只有在得到結果之后才會返回。默認情況下,文件都是以這種方式打開。
非阻塞:指在不能立刻得到結果之前,該函數不會阻塞當前進程程,而會立刻返回。應用程序可選擇以阻塞或非阻塞方式打開設備文件,然后設備進行讀寫操作,如果驅動的讀寫函數支持阻塞和非阻塞功能,這兩種打開方式才會有區別。

阻塞示例 :fd = open("/xxx/word", O_RDONLY ); // 默認阻塞方式打開
如果此時沒有數據可以讀取,則執行休眠
如果有數據可以讀取,則馬上讀取數據,不休眠,讀取數據后馬上返回。
非阻塞示例 :fd = open("/xxx/word", O_RDONLY | O_NONBLOCK ); //非阻塞方式打開
如果此時已經有數據可以讀取,則讀取數據再返回。
如果沒有數據可以讀,也馬上返回,但是返回一個錯誤碼。

1)驅動中如何得到用戶空間應用程序打開的方式?
open一個設備,內核會創建一個file結構,并且把打開方式的數值存放到file結構成員f_flags成員中,驅動程序的read,write 接口可以使用參數file指針取得文件打開方式。file結構中有一個成員是f_flags ,創建時候,內核會把open 函數的最后一個參數 flag 數值保存在 f_flags 變量中。

static ssize_t xxx_read(struct file *pfile, char user *buf, size_t count, loff_t *poff)
{
    ……
    //判斷當前是否有按鍵動作
    if(沒有按鍵動作)
    {
        //判斷 pfile->f_flags 成員是否設置 O_NONBLOCK  
        if(pfile->f_flags & O_NONBLOCK) //表示用戶空間使用非阻塞打開
        {
                return - EAGAIN; //返回一個錯誤碼,告訴用戶空間你可以再嘗試讀取
        }
        //阻塞方式打開,沒有數據就休眠,不馬上返回else
        {
                //休眠,等待有按鍵動作喚醒進程。
        }
    }
}

2)如何知道是否有按鍵動作?
如果按鍵按鍵或松開時刻,會產生一個中斷,所以,在中斷程序設置一個標志即可。
定義一個全局變量,初始值為 0,表示沒有按鍵動作發生,在中斷程序中設置這個變量值為 1,表示發生按鍵動作。

3)如何讓進程進入休眠狀態?
最簡單,最直接的休眠方式: msleep 函數
這個函數:一旦調用,則調用進程會休眠指定長的時間,時間一到內核會喚醒這個進程.
//休眠,等待有按鍵動作喚醒進程。

    while(press == 0)
                 msleep(5); // 休眠5ms 
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉祥县| 蒙自县| 香格里拉县| 宜良县| 望都县| 高雄市| 邵东县| 吴桥县| 响水县| 北安市| 平昌县| 沅江市| 巫溪县| 四会市| 大丰市| 江北区| 井陉县| 驻马店市| 瑞金市| 共和县| 巨野县| 宿迁市| 清新县| 台中市| 普陀区| 资源县| 沙洋县| 河池市| 孟津县| 杨浦区| 永胜县| 吕梁市| 临邑县| 泗洪县| 内丘县| 高陵县| 中牟县| 章丘市| 曲沃县| 龙川县| 讷河市|