亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                嵌入式 C 語言 .c 和 .h 文件的關(guān)系

                .h 文件與 .c 文件的關(guān)系

                參考高手的程序時(shí),發(fā)現(xiàn)別人寫的嚴(yán)格的程序都帶有一個(gè)“KEY.H”,里面定義了.C文件里用到的自己寫的函數(shù),如Keyhit()、Keyscan()等。

                .H文件就是頭文件,估計(jì)就是Head的意思吧,這是規(guī)范程序結(jié)構(gòu)化設(shè)計(jì)的需要,既可以實(shí)現(xiàn)大型程序的模塊化,又可以實(shí)現(xiàn)根各模塊的連接調(diào)試。

                .H 文件介紹:

                在單片機(jī)嵌入式C程序設(shè)計(jì)中,項(xiàng)目一般按功能模塊化進(jìn)行結(jié)構(gòu)化設(shè)計(jì)。將一個(gè)項(xiàng)目劃分為多個(gè)功能,每個(gè)功能的相關(guān)程序放在一個(gè)C程序文檔中,稱之為一個(gè)模塊,對(duì)應(yīng)的文件名即為模塊名。

                一個(gè)模塊通常由兩個(gè)文檔組成,一個(gè)為頭文件*.h,對(duì)模塊中的數(shù)據(jù)結(jié)構(gòu)和函數(shù)原型進(jìn)行描述;另一個(gè)則為C文件*.c ,對(duì)數(shù)據(jù)實(shí)例或?qū)ο蠖x,以及函數(shù)算法具體實(shí)現(xiàn)。

                .H 文件的作用

                作為項(xiàng)目設(shè)計(jì),除了對(duì)項(xiàng)目總體功能進(jìn)行詳細(xì)描述外,就是對(duì)每個(gè)模塊進(jìn)行詳細(xì)定義,也就是給出所有模塊的頭文件。

                通常H頭文件要定義模塊中各函數(shù)的功能,以及輸入和輸出參數(shù)的要求。模塊的具體實(shí)現(xiàn),由項(xiàng)目組成根據(jù)H文件進(jìn)行設(shè)計(jì)、編程、調(diào)試完成。為了保密和安全,模塊實(shí)現(xiàn)后以可連接文件OBJ、或庫文件LIB的方式提供給項(xiàng)目其他成員使用。

                由于不用提供源程序文檔,一方面可以公開發(fā)行,保證開發(fā)人員的所有權(quán);另一方面可以防止別人有意或無意修改產(chǎn)生非一致性,造成版本混亂。

                所以H頭文件是項(xiàng)目的詳細(xì)設(shè)計(jì)和團(tuán)隊(duì)工作劃分的依據(jù),也是對(duì)模塊進(jìn)行測(cè)試的功能說明。要引用模塊內(nèi)的數(shù)據(jù)或算法,只要用包含include指定模塊H頭文件即可。

                .H文件的基本組成

                /*如下為鍵盤驅(qū)動(dòng)的頭文檔*/#ifndef _KEY_H_ //防重復(fù)引用,如果沒有定義過_KEY_H_,則編譯下句#define _KEY_H_ //此符號(hào)唯一, 表示只要引用過一次,即#i nclude,則定義符號(hào)_KEY_H_/////////////////////////////////////////////////////////////////char keyhit( void ); //擊鍵否unsigned char Keyscan( void ); //取鍵值/////////////////////////////////////////////////////////////////#endif

                盡量使用宏定義#define

                開始看別人的程序時(shí),發(fā)現(xiàn)程序開頭,在文件包含后面有很多#define語句,當(dāng)時(shí)就想,搞這么多標(biāo)示符替換來替換去的,麻不麻煩啊,完全沒有理解這種寫法的好處。

                原來,用一個(gè)標(biāo)示符表示常數(shù),有利于以后的修改和維護(hù),修改時(shí)只要在程序開頭改一下,程序中所有用到的地方就全部修改,節(jié)省時(shí)間。

                #define KEYNUM 65//按鍵數(shù)量,用于Keycode[KEYNUM]#define LINENUM 8//鍵盤行數(shù)#define ROWNUM 8//鍵盤列數(shù)

                注意的地方:

                • 宏名一般用大寫

                • 宏定義不是C語句,結(jié)尾不加分號(hào)

                不要亂定義變量類型

                以前寫程序,當(dāng)需要一個(gè)新的變量時(shí),不管函數(shù)內(nèi)還是函數(shù)外的,直接在程序開頭定義,雖然不是原則上的錯(cuò)誤,但是很不可取的作法。下面說一下,C語言中變量類型的有關(guān)概念。從變量的作用范圍來分,分為局部變量和全局變量:

                • 全局變量:是在函數(shù)外定義的變量,全局變量在程序全部執(zhí)行過程中都占用資源,全局變量過多使程序的通用性變差,因?yàn)槿肿兞渴悄K間耦合的原因之一。

                • 局部變量:在函數(shù)內(nèi)部定義的變量,只在函數(shù)內(nèi)部有效。

                從變量的變量值存在的時(shí)間分為兩種:

                • 靜態(tài)存儲(chǔ)變量:程序運(yùn)行期間分配固定的存儲(chǔ)空間。

                • 動(dòng)態(tài)存儲(chǔ)變量:程序運(yùn)行期間根據(jù)需要?jiǎng)討B(tài)地分配存儲(chǔ)空間。

                具體又包括四種存儲(chǔ)方式:

                • auto
                • static
                • register
                • extern

                不加說明默認(rèn)為auto型,即動(dòng)態(tài)存儲(chǔ),如果不賦初值,將是一個(gè)不確定的值。

                而將局部變量定義為static型的話,則它的值在函數(shù)內(nèi)是不變的,且初值默認(rèn)為0。編譯時(shí)分配為靜態(tài)存儲(chǔ)區(qū),可以被本文件中的各個(gè)函數(shù)引用。

                如果是多個(gè)文件的話,如果在一個(gè)文件中引用另外文件中的變量,在此文件中要用extern說明。

                不過如果一個(gè)全局變量定義為static的話,就只能在此一個(gè)文件中使用。

                register定義寄存器變量,請(qǐng)求編譯器將這個(gè)變量保存在CPU的寄存器中,從而加快程序的運(yùn)行。

                特殊關(guān)鍵字const volatile的使用

                const

                const用于聲明一個(gè)只讀的變量。

                const unsigned char a=1;//定義a=1,編譯器不允許修改a的值

                作用:保護(hù)不希望被修改的參數(shù)。

                volatile

                一個(gè)定義為volatile的變量是說這變量可能會(huì)被意想不到地改變,這樣,編譯器就不會(huì)去假設(shè)這個(gè)變量的值了。精確地說就是,優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保存在寄存器里的備份。

                static int i=0;int main(void){…while (1){if (i)dosomething();}}/* Interrupt service routine. */void ISR_2(void){i=1;}

                程序的本意是希望ISR_2中斷產(chǎn)生時(shí),在main當(dāng)中調(diào)用dosomething函數(shù),但是,由于編譯器判斷在main函數(shù)里面沒有修改過i,因此可能只執(zhí)行一次對(duì)從i到某寄存器的讀操作。

                然后每次if判斷都只使用這個(gè)寄存器里面的“i副本”,導(dǎo)致dosomething永遠(yuǎn)也不會(huì)被調(diào)用。如果將將變量加上volatile修飾,則編譯器保證對(duì)此變量的讀寫操作都不會(huì)被優(yōu)化(肯定執(zhí)行)。

                一般說來,volatile用在如下的幾個(gè)地方:

                • 中斷服務(wù)程序中修改的供其它程序檢測(cè)的變量需要加volatile;

                • 多任務(wù)環(huán)境下各任務(wù)間共享的標(biāo)志應(yīng)該加volatile;

                • 存儲(chǔ)器映射的硬件寄存器通常也要加volatile說明,因?yàn)槊看螌?duì)它的讀寫都可能由不同意義。
                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年6月18日 19:04
                下一篇 2022年6月18日 19:04

                相關(guān)推薦

                • 30個(gè)無加盟費(fèi)的項(xiàng)目(茶顏悅色奶茶店加盟費(fèi)多少)

                  茶顏悅色又爆了,8月18日,茶顏悅色南京門店正式開業(yè),開張不到半小時(shí),門店就人滿為患,消費(fèi)者的購買熱情十分高漲,而由于人流量過大造成擁堵,茶顏悅色也不得不暫停營(yíng)業(yè)。 當(dāng)然,這里面排…

                  2022年11月27日
                • 存儲(chǔ)過程語法(sql server存儲(chǔ)過程語法)

                  今天小編給各位分享存儲(chǔ)過程語法的知識(shí),其中也會(huì)對(duì)sql server存儲(chǔ)過程語法進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! oracle存儲(chǔ)過程基本語法…

                  2022年11月26日
                • 凈利潤(rùn)率越高越好嗎(凈利潤(rùn)率多少合適)

                  一、持續(xù)增收不增利,平均凈利潤(rùn)率首次跌入個(gè)位數(shù) 2021年,增收不增利依舊是行業(yè)主流。具體來看,大部分企業(yè)營(yíng)業(yè)收入呈增長(zhǎng)態(tài)勢(shì),E50企業(yè)平均同比增速達(dá)到17.3%,但是利潤(rùn)增速則明…

                  2022年11月26日
                • 全民K歌升級(jí)新版本7.0之后,有哪些隱藏功能?

                  作者:高百烈來源:知乎 這個(gè)功能,舊版并沒有,要升級(jí)到全新的全民K歌7.0版本才能發(fā)現(xiàn)。 作為朋友圈當(dāng)代K歌之王,我費(fèi)了不少功夫才搶到內(nèi)測(cè)版本。有一說一,全民K歌的路子真的很野,新…

                  2022年11月25日
                • 規(guī)范透明促PPP高質(zhì)量發(fā)展——16萬億元大市場(chǎng)迎來新規(guī)

                  近日,財(cái)政部印發(fā)《關(guān)于進(jìn)一步推動(dòng)政府和社會(huì)資本合作(PPP)規(guī)范發(fā)展、陽光運(yùn)行的通知》,從做好項(xiàng)目前期論證、推動(dòng)項(xiàng)目規(guī)范運(yùn)作、嚴(yán)防隱性債務(wù)風(fēng)險(xiǎn)、保障項(xiàng)目陽光運(yùn)行四個(gè)方面進(jìn)一步規(guī)范P…

                  2022年11月25日
                • 上手Reno8 Pro體驗(yàn)跨屏互聯(lián) 實(shí)在太方便!

                  11月已經(jīng)來到了月底,在手機(jī)品牌又要推出新一年度的新品手機(jī)之前,我們來點(diǎn)評(píng)一下今年令人驚喜的產(chǎn)品。如OPPO的Reno8 Pro系列,該系列搭載雙芯影像配置獲得了很多消費(fèi)者的認(rèn)可。…

                  2022年11月25日
                • 推薦3種白手起家的賺錢項(xiàng)目(白手起家賺錢項(xiàng)目有哪些)

                  如今社會(huì)壓力非常的大,家有老少要養(yǎng)活,這些都加速了窮人想要?jiǎng)?chuàng)業(yè)的欲望,但是創(chuàng)業(yè)路總是那么的艱難,資金就是創(chuàng)業(yè)的重頭戲,所以選擇一個(gè)低成本又賺錢的項(xiàng)目是大多數(shù)人最期望的了,那么有哪些…

                  2022年11月25日
                • 科比19歲女兒遭自稱與她生“科比式孩子”男子跟蹤騷擾

                  極目新聞?dòng)浾咄趿亮咙S佳琪 據(jù)??怂剐侣劸W(wǎng)報(bào)道,當(dāng)?shù)貢r(shí)間11月21日,已故籃球巨星科比·布萊恩特的長(zhǎng)女娜塔莉亞·布萊恩特21日向法院提交臨時(shí)限制令,聲稱這位32歲的前科從十幾歲起就騷…

                  2022年11月24日
                • 今天出入濟(jì)南最新通知(出入濟(jì)南政策最新消息今天)

                  近日濟(jì)南疫情感染人數(shù)也在不斷增加,劃分的高風(fēng)險(xiǎn)區(qū)也是越來越多了。據(jù)最新統(tǒng)計(jì),截止2022年11月24日11時(shí),濟(jì)南共有低風(fēng)險(xiǎn)地區(qū)12處,高風(fēng)險(xiǎn)地區(qū)338處。很多朋友都擔(dān)心現(xiàn)在濟(jì)南無…

                  2022年11月24日
                • 免費(fèi)清理c盤的軟件(清理c盤空間不影響系統(tǒng))

                  電腦用久了慢如龜速,還卡頓,這最大的原因啊就是C盤空間不足造成的。 即使電腦配置再好,或者硬盤再快,如果長(zhǎng)時(shí)間沒有打掃C盤,打開文件或者穩(wěn)定之類的,都卡得讓人頭大。 這時(shí)候呢不要去…

                  2022年11月24日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息