邊聽邊看,簡單的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)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。