什么是51單片機?它有什么注意事項?編程也好設(shè)計也罷,都要有遵循的規(guī)則。可以發(fā)揮自己的創(chuàng)新但是要顧全大局,不能隨意的編程。下面分享關(guān)于51單片機編程的一些規(guī)則,希望能幫到大家,避免大家四處碰壁。
編程首要是要考慮程序的可行性,然后是可讀性、可移植性、健壯性以及可測試性,這是總則。但是很多人忽略了可讀性、可移植性和健壯性(可調(diào)試的方法可能歌不相同),這是不對的。
1.當項目比較大時,最好分模塊編程,一個模塊一個程序,很方便修改,也便于重用和便于閱讀。
2.每個文件的開頭應(yīng)該寫明這個文件是哪個項目里的哪個模塊,是在什么編譯環(huán)境下編譯的,編程者(/修改者)和編程日期,值得注意的是一定不要忘了編程日期,因為以后你再看文件時,會知道大概是什么時候編寫的,有些什么功能,并且可能知道類似模塊之間的差異(有時同一模塊所用的資源不同,和單片機相連的方法也不同,或者只是在原有的模塊上加以改進)。
3.一個C源文件配置一個h頭文件或者整個項目的C文件配置一個h頭文件,我自己采用整個項目的C文件配置一個h頭文件的方法,并且使用#ifndef/#define/#endif的宏來防止重復(fù)定義,方便各模塊之間相互調(diào)用。
4.一些常量(如圓周率PI)或者常需要在調(diào)試時修改的參數(shù)最好用#define定義,但要注意宏定義只是簡單的替換,因此有些括號不可少。
5.不要輕易調(diào)用某些庫函數(shù),因為有些庫函數(shù)代碼很長(我是反對使用printf之類的庫函數(shù)的,但是是一家之言,并不勉強各位)。
6.書寫代碼時要注意括號對齊,固定縮進,一個{}各占一行,我本人采用縮進4個字符,應(yīng)該還是比較合適的,if/for/while/do等語句各占一行,執(zhí)行語句不得緊跟其后,無論執(zhí)行語句多少都要加{},千萬不要寫成如下格式:
for(i=0;i<100;i++){fun1();fun2();}
for(i=0;i<100;i++){
fun1();
fun2();
}
而應(yīng)該寫成:
for(i=0;i<100;i++)
{
fun1();
fun2();
}
7.一行只實現(xiàn)一個功能,比如:
a=2;b=3;c=4;宜改成:
a=2;
b=3;
c=4;
8.重要難懂的代碼要寫注釋,每個函數(shù)要寫注釋,每個全局變量要寫注釋,一些局部變量也要寫注釋。注釋寫在代碼的上方或者右方,千萬不要寫在下方(相信沒有人寫在左方吧)。
9.對各運算符的優(yōu)先級右所了解,記不得沒關(guān)系,加括號就是,千萬不要自作聰明說自己記得很牢。
10.不管有沒有無效分支,switch函數(shù)一定要defaut這個分支。一來讓閱讀者知道程序員并沒有遺忘default,并且防止程序運行過程中出現(xiàn)的意外(健壯性)。
11.變量和函數(shù)的命名最好能做到望文生義。不要命名什么x,y,z,a,sdrf之類的名字。
12.函數(shù)的參數(shù)和返回值沒有的話最好使用void。
13.goto語句:從匯編轉(zhuǎn)型成C的人很喜歡用goto,但goto是C語言的大忌,但是老實說,程序出錯是程序員自己造成的,不是goto的過錯;本人只推薦一種情況下使用goto語句,即從多層循環(huán)體中跳出。
14.指針是C語言的精華,但是在C51中我個人認為少用為妙,一來有時反而要花費多的空間,還有在對片外數(shù)據(jù)進行操作時會出錯(可能是時序的問題)。
15.一些常數(shù)和表格之類的應(yīng)該放到code去中以節(jié)省RAM。
16.程序編完編譯看有多少code多少data,注意不要使堆棧為難。
17.程序應(yīng)該要能方便的進行測試,其實這也與編程的思維有關(guān);一般有三種:一種是自上而下先整體再局部;一種是自下而上先局部再整體;還有一種是結(jié)合兩者往中間湊。我的做法是現(xiàn)大概規(guī)劃一下整個編程,然后一個模塊模塊獨立編程,每個模塊調(diào)試成功再拼湊在一塊調(diào)試。我建議:如果程序不大,可以直接用一個文件直接編,如果程序很大,宜采用自上而下的方式,但更多的是那種處在中間的情況,宜采用自下而上或者結(jié)合的方式。以上就是51單片機的解析,希望能給大家?guī)椭?