利用函數參數和返回值提高嵌入式軟件質(zhì)量
提高軟件代碼的質(zhì)量是每一個(gè)軟件設計者都必須考慮的問(wèn)題,這涉及軟件的有效性和經(jīng)濟價(jià)值?;?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/嵌入式">嵌入式系統的軟件設計多數是以實(shí)時(shí)操作系統為平臺,這和傳統的以WindOWS操作系統為平臺的程序設計有很大的不同。前者要求對操作系統有更加深入的了解,要求使用者對自己的處理器和編譯器工作原理有相當的理解,能夠編寫(xiě)一定量的移植代碼實(shí)現操作系統和底層硬件的連接。μC/OS―II是一種源代碼公開(kāi)的占先式實(shí)時(shí)操作系統內核,本文主要結合μC/OS―II的系統函數的應用,說(shuō)明利用μC/OS―II系統函數的參數和返回值來(lái)提高程序設計效率和代碼質(zhì)量的方法。
1 參數和返回值分類(lèi)
通過(guò)對μC/0S―II的學(xué)習和研究,可以發(fā)現它提供的系統函數大多是用標準C語(yǔ)言寫(xiě)的;受C語(yǔ)言語(yǔ)法規則的限制,這些函數只有一個(gè)返回值。為了在使用μC/0SII的系統函數時(shí)得到更多的狀態(tài)信息,將狀態(tài)信息保存在函數參數中。這樣,μC/OS―II系統函數的參數可以分為兩類(lèi):第一類(lèi)是普通的形式參數,這類(lèi)參數符合傳統的使用方法,主要傳遞實(shí)際參數的值,起到數值傳遞的作用;第二類(lèi)形式參數在使用時(shí),不傳遞有效數值,僅是一個(gè)變量。系統函數在執行時(shí)產(chǎn)生的狀態(tài)信息就保存在第二類(lèi)參數里,在系統函數調用結束時(shí)通過(guò)這類(lèi)參數的值來(lái)查看系統函數執行過(guò)程中產(chǎn)生的狀態(tài)信息。
本文以函數0SSemPend()為例來(lái)介紹。這個(gè)函數沒(méi)有返回值,它每個(gè)形式參數的具體含義見(jiàn)參考文獻,這里不做具體的描述。其參數可歸為上述的兩類(lèi):OS_EVENT*pevent和INTl6U timeout為第一類(lèi),應用程序中的實(shí)際參數要給予它們具體的數值;INT8U*err為第二類(lèi),應用程序中的實(shí)際參數不需要給出具體的數值,在函數代碼執行時(shí),會(huì )根據不同的情況給INT8U*err賦值,這個(gè)值反映了函數的執行情況。如OSSemPend()函數的應用所示。
2 函數參數和返回值中的狀態(tài)信息
μC/OS―II的系統函數根據實(shí)際情況可以分為沒(méi)有參數和返回值的函數、有參數沒(méi)有返回值的函數和既有參數又有返回值的函數。在這里不討論第一種情況,本文主要研究的是第二和第三種情況。如前所述,μC/OS―II為了增加系統函數執行產(chǎn)生的狀態(tài)信息和返回值,將狀態(tài)信息放到函數的參數中。筆者通過(guò)對μC/0S―II的系統函數的研究發(fā)現,這些函數并不是都將狀態(tài)信息放到函數的參數中。有的也放到返回值中,如OSsemQtJery()函數,就是用返回值傳遞的狀態(tài)信息,而用函數的參數傳遞的有效信息。這些狀態(tài)信息反映了在使用μC/OS―II的系統函數時(shí)出現的問(wèn)題,通過(guò)讀這些狀態(tài)可以知道系統函數執行的情況。因此,從安全的角度來(lái)說(shuō),在使用這些系統函數時(shí)應該讀出所有狀態(tài)信息,并且根據狀態(tài)的不同給出相應的處理指令。按照這種思路,對OSSemPend()函數的應用的改進(jìn)如下:
可以看到,在調用系統服務(wù)函數OSSemPend()時(shí),臨時(shí)變量err作為實(shí)際參數傳遞給OSSemPend()。在執行這個(gè)函數后,err這個(gè)臨時(shí)變量就包含了函數執行時(shí)產(chǎn)生的狀態(tài)信息。這些狀態(tài)信息使用常量而不用一個(gè)常數,是為了增加軟件的可讀性和通用性。具體的定義和含義如表1所列,其中前兩種返回值是正常的:第一種是有信號可用時(shí)的情況,進(jìn)行正常的處理;第二種是在規定的時(shí)間內沒(méi)有信號到來(lái),要做超時(shí)處理。后面三種情況是人為錯誤造成的。在調用OSSemPend()系統函數后要對這個(gè)包含狀態(tài)信息的變量進(jìn)行分析處理,過(guò)程如上述程序所示,由于篇幅關(guān)系,這里只是用簡(jiǎn)單的一句話(huà)來(lái)代表處理過(guò)程。
評論