【轉載】別看這個最簡單的IO驅動,裏面也是充滿智慧的

邊聽邊看,簡單的IO驅動,你有沒有躺槍web

本文轉載自嵌入式資訊精選安全

《單片機與嵌入式系統應用》小編舒適提示:GPIO驅動是嵌入式系統中最簡單的驅動,然而有多少電子類高材生在它身上栽了跟頭?微信


從單片機到ARM七、ARM九、Cortex-A8,從uC/OS到WinCE、Linux,GPIO驅動都是最簡單、最易編寫的驅動。但看似簡單、毫無技術含量的驅動,其是否完整?是否規範?是否安全?函數


典型案例url

本節將選取兩例典型案例,從反、正兩個角度進行對比。spa


反方案例.net

以某一源碼中XXX驅動爲例,截取XXX_IOControl部分的代碼,如程序清單1所示;請留意代碼突出顯示部分。3d

程序清單1指針


從反方案例,實現GPIO電平狀態的讀或寫的功能僅須要幾行代碼,很是簡單。orm


正方案例

如程序清單2所示,代碼截取自ZLG某核心板GPIO驅動,請留意代碼中突出顯示部分。


程序清單2




從正方案例,實現GPIO電平狀態的讀或寫的功能卻花費了2倍的代碼工做量,差別爲什麼如此大?


案例點評

1、指針使用

在反方案例中,函數傳遞進來的指針參數未經判斷而直接使用,這種狀況下若爲空指針或野指針,則程序很可能出現異常甚至崩潰!反方案例在讀取操做後,使用「*pBytesReturned = 2;」返回實際讀取的字節數,可是,該指針依然未經判斷而直接使用!而正反案例則在每一項參數使用前均對參數範圍、有效性進行判斷,從根本上避免了參數異常狀況的發生!


2、錯誤提示

在反方案例中,XXX_IOControl只是返回TRUE或FALSE,返回FALSE時應用層無從獲取或獲知是什麼緣由形成了「FALSE」!對比正方案例,在參數判斷時即開始添加錯誤提示,在return以前,調用SetLastError函數,應用層則能夠經過GetLastError獲取錯誤緣由,容許用戶更快速、準確的定位錯誤點。


3、註釋

反方案例函數體內外幾乎無註釋;而正方案例,不管函數體內的關鍵位置仍是函數體外,均作必要、詳細的註釋說明,爲程序的後期維護帶來極大的便利!包括最簡單的GPIO在內,驅動實現功能很是容易,但驅動的完整性與可靠性卻蘊藏着軟件工程的大智慧。

本文轉載自嵌入式資訊精選,如需轉載請與原做者聯繫

嵌入式

程序猿

微信號:InterruptISR


嵌入式程序猿致力於打造程序猿工程師交流分享的精品移動平臺,歡迎各位猿友加入和分享。微信搜索嵌入式程序猿添加關注,或者長按下方二維碼,選擇識別圖中二維碼添加關注。


本文分享自微信公衆號 - 嵌入式程序猿(InterruptISR)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索