新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于PXA310平臺(tái)的溫濕度傳感器設(shè)計(jì)

基于PXA310平臺(tái)的溫濕度傳感器設(shè)計(jì)

作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/article/201612/324471.htm

▲圖2 驅(qū)動(dòng)程序流程圖


  上述函數(shù)中start_trans; write_byte; read_data; read_byte 分別利用PXA310 引腳模擬時(shí)序完成啟動(dòng)傳輸、寫字節(jié),讀一位數(shù)據(jù)和讀字節(jié)的操作。

  內(nèi)核tasklet_schedule() 調(diào)度執(zhí)行指定的tasklet,在獲得運(yùn)行機(jī)會(huì)之前只會(huì)調(diào)度一次,如果在運(yùn)行時(shí)被調(diào)度, 則完成后會(huì)被再次運(yùn)行。
  wait_for_completion()這個(gè)函數(shù)進(jìn)行一個(gè)不可打斷的等待,如果有代碼調(diào)用它,并且沒有完成這個(gè)任務(wù),結(jié)果會(huì)是一個(gè)不可殺死的進(jìn)程。copy_to_user()將內(nèi)核空間數(shù)據(jù)傳向上層用戶空間,并讓上層測試程序做進(jìn)一步處理。
  3.3 Linux 溫濕度傳感器設(shè)備阻塞操作
  由于溫濕度傳感器測量需要一定時(shí)間,為提高系統(tǒng)運(yùn)行效率和實(shí)時(shí)性,在驅(qū)動(dòng)程序中阻塞線程,交出內(nèi)核控制權(quán),等待操作完成后喚醒線程,提高系統(tǒng)利用率。complete()在函數(shù)中就是喚醒一個(gè)等待的讀取線程。任務(wù)隊(duì)列實(shí)現(xiàn)函數(shù)如下所示。

  Tasklet可以使測量操作在系統(tǒng)負(fù)荷不重時(shí)被調(diào)用,或是被立即執(zhí)行,但始終不會(huì)晚于下一個(gè)CPU clock.
  Tasklet 始終在中斷期間運(yùn)行,并且在調(diào)度他的同一CPU 上運(yùn)行。對比單片機(jī)系統(tǒng),在單線程情況下,一般在sht10_read()中調(diào)用2 次measure_ sht10()來等待測量完成,測量效率依賴2 次測量消耗的時(shí)間;但在Linux 驅(qū)動(dòng)程序中,使用Tasklet 方式操作,2 次測量過程不會(huì)對其他線程產(chǎn)生影響,在有其他實(shí)時(shí)事件需要及時(shí)處理時(shí)(如網(wǎng)絡(luò),視頻),可以更有效提高驅(qū)動(dòng)運(yùn)行效率,降低對其他實(shí)時(shí)處理產(chǎn)生的影響。
  4 溫濕度傳感器測試與驗(yàn)證
  驅(qū)動(dòng)程序完成以后,需要相應(yīng)測試程序驗(yàn)證驅(qū)動(dòng)程序編寫的正確性。由于驅(qū)動(dòng)程序中不能對數(shù)據(jù)進(jìn)行浮點(diǎn)數(shù)運(yùn)算,所以測試程序必須將驅(qū)動(dòng)程序傳遞來的數(shù)據(jù)進(jìn)行浮點(diǎn)數(shù)運(yùn)算才能得到相應(yīng)的溫濕度值。


評論


技術(shù)專區(qū)

關(guān)閉