模塊化編程是什么?就是可以吧你學的程序分成一個個模塊,方便修改和移植。從事單片機和嵌入式這方面,編程具有強大移植性可以說是重中之重,如果你寫一些LED數碼管之類的小程序,
用模塊化編程有些小題大做。但是在團隊做項目中,需要不同的人負責不同的一段程序,這時候就需要模塊化編程了,在個人編大程序時也要用,因為好修改,想想你的代碼幾十行還好,如果
幾百幾千行呢?所以說到這里,可見模塊化編程幾乎是所有大程序要做的,不然怎么修改?尤其是單片機這種靈活的語言。(建議有C語言基礎的同學看)
先提前說說與模塊化編程有關的關鍵字加上英文意思;
static(靜止的)
extern(外部的)
typedef(類型定義)
#define(定義)
**********************************
#ifndef __**_H_ //如果有**.h文件,就。。。
#define __**_H_ //如果沒有就尋找**.h文件
#endif //否則就結束
呵呵,先看看熱熱身 ,我們知道C語言有.c文件和.h文件,.c文件就是我們寫的程序。.h文件呢是庫文件,在寫C語言程序的時候, #include“***.h”或include<***.h>,就是尋找庫文件路徑的意思,只是開始尋找的起點不同,
比如printf輸出函數在stdio庫里就有這個函數,我們只不過是拿來用而已,我想表達的是,庫文件里面存了方便我們去寫程序的函數(也是程序,不過以函數的形式打包來讓我們用)
順便說說code這個關鍵字吧,比如 int code arr[]={};意思是把這個 i 變量的所占用的空間放在ROM中,也就是只讀存儲器,這樣動態數據就可以擁有更多的空間速度也快了CPU也輕松了。單片機的內存是很寶貴的,RAM的容量運比ROM的小,而RAM又與CPU掛鈎,其實我們手機的性能好不好與RAM有很大關系,我們說的運行內存就是RAM,太專業的小編也不會,我們知道code可以節省單片機內存就知道了。
關鍵字這些與內存掛鈎,C語言難也是難在內存上,我們掌握基本的用法來編C51就行不是嗎,我這里是淺談,
想深入了解static的點這個鏈接 https://blog.csdn.net/keyeagle/article/details/6708077
static 在程序中的作用是,當你在變量或函數面前加static后,表示該函數或變量就只能在這個C文件里用了,相當於一把鎖來鎖住它們。
想深入了解extern的點這個鏈接 https://www.cnblogs.com/Lunais/p/5991135.html
typedef和#define在兩個宏定義很常用,以后還會專門為typedef搞個庫方便調用,
比如現在要定義數據類型
可以這樣 typedef int P;(加分號)
#define P int(不允許加任何符號)
在后面要用到int來定義變量時可以直接,P i=0(int i=0); 我們用宏定義給這個數據可惜起了一個新名字P;C51的大程序里用的很多;
typedef unsigned int uInt8; typedef unsigned char uChar16; 表示用uInt8新名字來代替unsigned int的類型
接下來開始模塊化編程,想按照步驟試試一遍,首先建立一個文件夾
在里面
建立四個文件夾,c文件夾放.c文件,h文件夾放.h文件,main文件夾放main.c主函數文件,project文件夾放一些項目文件;
這樣可能有點暈是吧,沒事下面就懂了;打開keil軟件新建項目
放在project文件夾里;取名pro,當然名字隨便取的
之后開始建立才C和H文件,一個C文件對應一個H文件,
分別命名為delay.c delay.h led.h led.c main.c 存到之前建立的c和h main文件夾中。
main.c主C文件單獨放在main文件夾中
全部保存效果是這樣的
一個C文件對應一個h文件,名字一樣,這樣好找。現在可以先在C文件里編程,也可以先提前設置好一些東西,這個前后順序是沒關系的,我先設置吧
點這個;彈出
可以吧標號1看做是大的以個文件夾,標號2是子文件,編號3是子文件夾對應的C文件;名字隨便取,
這里我取的是這些名字,接下來是到入C文件
藍底寬表示選中的目錄下 導入,
接下來是同樣的步驟導入對應的C文件,完成后點擊OK
完成之后就是這樣的以個布局效果;
問題來了,這么多的C文件,我們要把編譯的路徑告訴給軟件,不然找不到H也就是庫文件,之前不是模塊化編程我們不用理路徑,是應為軟件自帶了#include"reg52.h"這些了,而現在我們是要自己
造出#include“”這些,所以要給路徑,
第三是設置晶振頻率,和編寫的程序的晶振頻率一樣,第四是勾選生存HEX文件
第五是搞路徑的如圖
在這個框點6,
點7建立 ×是刪除
點7后有框出來點8添加文件夾上的H文件夾就可以了;然后一直OK;
編譯后有兩個警告是因為兩個H文件夾沒用,接下來編程;
還有就是特別注意,#include" **.h"這里的名字一定是和H文件夾的名字一樣。
是的delayh文件書寫格式是這樣的;把函數名搞都里面;其實還要在void前面加extern的,但是keil5軟件是默認前面已經加了,所以可加可不加;還有就是#ifndef后面加的這些__DELAY_H_ 紅色部分是可以以隨便起不與其它重復的名稱的,但是不管起什么名都得和下面#define一樣,
LED的C程序,引用了Delay_Ms函數;
所以接下來
在LED的H中包delay的庫包含進來,那么現在#include“led.h中有幾個庫呢?有52的耶有delay的,
那寫個主程序main編譯后就直觀了。
零錯誤警告
看到了嗎,箭頭的地方是那些h文件,是不是層層疊起來的,所以現在有點明白了這些格式的含義和模塊化編程的強大了嗎,
都練習幾次,加深理解,還有學到這里讀者可以去網上看看別的模塊化程序,還有很多技巧筆者就不多說了,有了基礎可以慢慢理解別人的的知識,然后
會做,最后形成自己的編程風格。