嵌入式C語言模組化編程

來源:互聯網
上載者:User

原文轉載於:http://blog.csdn.net/zhzht19861011/article/details/5974945,非常感謝。


初學者往往搞不懂如何模組化編程,其實它是簡單易學,而且又是組織良好程式結構行之有效方法之一。

本文將先大概講一下模組化的方法和注意事項,最後將以初學者使用最廣的keil c編譯器為例,給出模組化編程的詳細步驟。

模組化程式設計應該理解以下概述:

(1) 模組即是一個.c 檔案和一個.h 檔案的結合,標頭檔(.h)中是對於該模組介面的聲明;

這一條概括了模組化的實現方法和實質:將一個功能模組的代碼單獨編寫成一個.c檔案,然後把該模組的介面函數放在.h檔案中.舉例:假如你用到液晶顯示,那麼你可能會寫一個液晶驅動模組,以實現字元、漢字和映像的現實,命名為: led_device.c,該模組的.c檔案大體可以寫成:

[cpp]  view plain  copy  print ? /*************************************************************************  * 液晶驅動模組  *  * 文 件: lcd_device.c  * 編 寫 人: 小瓶蓋  * 描 述:液晶串列顯示驅動模組,提供字元、漢字、和映像的實現介面  * 編寫時間: 2009.07.03  * 版 本:1.2  *************************************************************************/   #include …   …   //定義變數    unsigned char value;//全域變數   …   //定義函數   //這是本模組第一個函數,起到延時作用,只供本模組的函數調用,所以用到static關鍵字修飾   /********************延時子程式************************/   static void delay (uint us) //delay time   {}   //這是本模組的第二個函數,要在其他模組中調用   /*********************寫字元程式**************************  ** 功能:向LCD寫入字元  ** 參數:dat_comm 為1寫入的是資料,為0寫入的是指令  content 為寫入的數字或指令  ******************************************************/   void wr_lcd (uchar dat_comm,uchar content)   {}   ……   ……   /***************************** END Files***********************************/  

註:此處唯寫出這兩個函數,第一個延時函數的作用範圍是模組內,第二個,它是其它模組需要的。為了簡化,此處並沒有寫出函數體.

.h檔案中給出模組的介面.在上面的例子中, 向LCD寫入字元函數:wr_lcd (uchar dat_comm,uchar content)就是一個介面函數,因為其它模組會調用它,那麼.h檔案中就必須將這個函式宣告為外部函數(使用extrun關鍵字修飾),另一個延時函數:void delay (uint us)只是在本模組中使用(本地函數,用static關鍵字修飾),因此它是不需要放到.h檔案中的。

.h檔案格式如下:

[cpp]  view plain  copy  print ? /*****************************************************************************  * 液晶驅動模組 標頭檔  *  * 文 件: lcd_device.h  * 編 寫 人: 小瓶蓋  * 編寫時間: 2010.07.03  * 版 本:1.0  *********************************************************************************/   //聲明全域變數   extern unsigned char value;   //聲明介面函數   extern void wr_lcd (uchar dat_comm,uchar content); //向LCD寫入字元   ……   /***************************** END Files***********************************/  

這裡注意三點:

1. 在keil 編譯器中,extern這個關鍵字即使不聲明,編譯器也不會報錯,且程式運行良好,但不保證使用其它編譯器也如此。強烈建議加上,養成良好的編程規範。

2. .c檔案中的函數只有其它模組使用時才會出現在.h檔案中,像本地延時函數static void delay (uint us)即使出現在.h檔案中也是在做無用功,因為其它模組根本不去調用它,實際上也調用不了它(static關鍵字的限制作用)。

3.注意本句最後一定要加分號”;”,相信有不少同學遇到過這個奇怪的編譯器報錯: error C132: 'xxxx': not in formal parameter list,這個錯誤其實是.h的函式宣告的最後少了分號的緣故。

模組的應用:假如需要在LCD菜單模組lcd_menu.c中使用液晶驅動模組lcd_device.c中的函數void wr_lcd (uchar dat_comm,uchar content),只需在LCD菜單模組的lcd_menu.c檔案中加入液晶驅動模組的標頭檔lcd_device.h即可.

[cpp]  view plain  copy  print ?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.