新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 有限狀態機的嵌入式Linux按鍵驅動設計

        有限狀態機的嵌入式Linux按鍵驅動設計

        作者: 時間:2010-05-27 來源:網絡 收藏





        這里的定時函數使用了的內核定時器。使用內核定時器可以方便地實現每個的特定定時時間,并且安全釋放CPU,提高CPU的效率。程序的基本思路是,首先被按下進入中斷服務程序buttons_interrupt(),在中斷服務程序里確定是否為初始態。如果是,則進行kbd_timer初始化且使按鍵轉為消抖狀態。當kbd_timer定時到以后,按鍵檢測按鍵狀態是否仍處于按下時轉換狀態為按鍵確定狀態,如果不是則恢復初始態。當定時器1 s到達后,判斷按鍵是否仍是按下。如是則轉換為連發狀態,否則恢復初始態。當0.5 s到達后,重新判斷按鍵是否仍是按下。如是,則繼續為連發狀態,輸出值加10;如果按鍵抬起,則恢復初始態。

        4 實驗結果

        程序經過gcc-arm-liunx-3.4.4編譯,并在Micro2440SDK開發板上運行(開發板上的系統版本為linux2.6.13),運行結果如圖3所示。



        從運行結果可以看出,如果按下按鍵并在1 s抬起,輸出值每次只加1;如果按下按鍵超過1 s,系統的輸出值每隔0.5s將加10。說明本運行正常,且具有了連發功能。

        結 語

        本文主要分析了按鍵狀態機的工作過程,并利用Liunx內核定時器實現了狀態機的狀態轉換時間間隔,最后給出了基于狀態機的具有連發功能編寫代碼,實現了具有連發功能的按鍵驅動,為基于狀態機的按鍵驅動提供了一種解決思路。
        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 平舆县| 罗田县| 濉溪县| 修文县| 高密市| 洛扎县| 明星| 盐城市| 恭城| 铜鼓县| 淄博市| 老河口市| 麟游县| 渭源县| 青龙| 马公市| 黔西县| 重庆市| 大关县| 黎川县| 新巴尔虎左旗| 永济市| 昆明市| 吉安市| 平顺县| 沙坪坝区| 长葛市| 伽师县| 温州市| 蓝田县| 深州市| 中阳县| 赣州市| 九寨沟县| 三河市| 江山市| 磐安县| 古田县| 乐平市| 巴东县| 澄城县|