域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過
C語(yǔ)言博大精深,玩了很長(zhǎng)時(shí)間了,一直徘徊在入門處。看了很多別人的編程經(jīng)驗(yàn),加上項(xiàng)目程序越做越大,直到這半年來(lái)突然有很多體會(huì),明天就要回家了,下午閑來(lái)無(wú)事也試著總結(jié)一些心得體會(huì),喜歡對(duì)師弟妹們的學(xué)習(xí)有所幫助。
首先要說(shuō)說(shuō)編程的幾個(gè)重要原則,看了很多別人的編程經(jīng)驗(yàn),更多的是說(shuō)技巧。技巧能顯著提高程序的效率,固然重要但是技巧的掌握靠了還是大量的工程實(shí)踐,只有在有一定功底后才可以去追求這些編程技巧。但是編程的原則卻是要在學(xué)習(xí)一開始就要認(rèn)真貫徹,才能養(yǎng)成良好的編程習(xí)慣,苦練內(nèi)功后練上層功夫才不會(huì)走火入魔。
言歸正傳,嵌入式系統(tǒng)C語(yǔ)言編程需要遵守什么樣的原則呢?隨著時(shí)代和技術(shù)的不斷發(fā)展,這個(gè)問題也許仁者見仁智者見智了,但是總結(jié)起來(lái)大家還是有很多共識(shí)。根據(jù)目前提倡的軟件工程的做法,和我們教研室的做法,列舉最重要原則:
一、模塊劃分.C語(yǔ)言作為一種結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言,在模塊的劃分上主要依據(jù)功能:
(1) 一個(gè)功能模塊即是一個(gè).c文件和一個(gè).h文件的結(jié)合,.h文件中是對(duì)于該模塊功能函數(shù)和使變 量的聲明
(2) 該模塊提供給其它模塊調(diào)用的外部函數(shù)及數(shù)據(jù)都需要在.h中文件中以extern關(guān)鍵字聲明
(3) 模塊內(nèi)的函數(shù)和全局變量只能在.c文件定義
(4) 不允許在.h文件中定義變量(定義變量和聲明變量的區(qū)別在于定義會(huì)產(chǎn)生內(nèi)存分配的操作,而聲明則只是告訴包含該聲明的模塊在連接階段從其它模塊尋找外部函數(shù)和變量)。
二、一個(gè)嵌入式系統(tǒng)程序包括兩類模塊分三層編寫:
(1)硬件驅(qū)動(dòng)模塊,一種特定硬件對(duì)應(yīng)一個(gè)模塊,包括了片內(nèi)集成的硬件模塊和外部擴(kuò)展的
(2)軟件功能模塊,軟件功能模塊是建立在硬件驅(qū)動(dòng)模塊上的與硬件無(wú)關(guān)的邏輯功能。
(3)三層編寫即HAL(硬件應(yīng)用層),API(應(yīng)用函數(shù)包),APP(邏輯應(yīng)用層)注:名稱是借用的,表大個(gè)意思而已。HAL就是硬件驅(qū)動(dòng)模塊和系統(tǒng)硬件密切相關(guān),API可以是建立在HAL上的硬件應(yīng)用服務(wù)程序也可以是通用的函數(shù)模塊,APP則是最終構(gòu)成嵌入式系統(tǒng)應(yīng)用的功能邏輯關(guān)系。HAL和API是為了方便技術(shù)積累和提高開發(fā)效率而分開了,APP則是針對(duì)特殊應(yīng)用而定制的。
三、中斷服務(wù)程序的要求:
(1)不能返回值
(2)不能向ISR傳遞參數(shù)
(3)ISR應(yīng)該盡可能的短小精悍,不允許有等待信號(hào)的操作
四、編程風(fēng)格問題
五、需要學(xué)會(huì)熟練應(yīng)用的C語(yǔ)言的基本手法
(1)數(shù)據(jù)指針,不能僅僅只會(huì)使用數(shù)組
(2)宏定義,定義寄存器地址,定義宏函數(shù)等
(3)函數(shù)指針的應(yīng)用
(4)條件編譯,在帶操作系統(tǒng)的應(yīng)用時(shí)經(jīng)常要用
六、不要偷懶,寫好必要的注釋
七、做到以上幾點(diǎn)時(shí)就可以吸收高超的編程技巧了。
轉(zhuǎn)載請(qǐng)保留連接
本文由www.uchn.org整理
申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!