量使用高級(jí)語(yǔ)言來(lái)編寫(xiě)?,F(xiàn)在許多開(kāi)發(fā)單片機(jī)的技術(shù)人員依然保留了80年代的開(kāi)發(fā)方法。使用匯編語(yǔ)言,逐條指令編寫(xiě),并且手工分配單片機(jī)中的內(nèi)存資源。這種方法在寫(xiě)小規(guī)模軟件還可以,可一旦軟件規(guī)模變大之后,由于匯編語(yǔ)言的低可讀性、低結(jié)構(gòu)性往往會(huì)讓設(shè)計(jì)人員被自己軟件中的復(fù)雜的邏輯關(guān)系搞得暈頭轉(zhuǎn)向,在一個(gè)軟件的邏輯關(guān)系混亂后,要保證寫(xiě)出來(lái)的軟件能安全運(yùn)轉(zhuǎn)是很困難的。
我們推薦使用C語(yǔ)言來(lái)寫(xiě)軟件單片機(jī)代碼。(對(duì)于常見(jiàn)的8031系列,我們一般使用KEIL、FLANKLIN 等軟件。其它類(lèi)型的單片機(jī)一般都有其配套的C語(yǔ)言編譯器,該型號(hào)單片機(jī)的經(jīng)銷(xiāo)商一般可提供)用C語(yǔ)言有這么幾個(gè)好處:
1. 可以大幅度加快開(kāi)發(fā)進(jìn)度。
2. 可以實(shí)現(xiàn)軟件的結(jié)構(gòu)化編程,它使得軟件的邏輯結(jié)構(gòu)變得清晰、有條理。
3. 在寫(xiě)一些數(shù)學(xué)算法和循環(huán)、判斷語(yǔ)句的時(shí)候有比匯編語(yǔ)言高得多的效率。
4. 省去了人工分配內(nèi)存資源的工作,在匯編語(yǔ)言中我們不得不為每一個(gè)子程序來(lái)分配儲(chǔ)存變量的空間,這是一個(gè)復(fù)雜、乏味又容易出差錯(cuò)的工作。而使用C語(yǔ)言后你只要在代碼中申明一下變量的類(lèi)型,編譯器就會(huì)自動(dòng)為你分配寄存器和內(nèi)存,低級(jí)重復(fù)易出差錯(cuò)的事情都由計(jì)算機(jī)代勞了。根本不要人工干預(yù)。
5. 因?yàn)檠h(huán)、判斷語(yǔ)句和變量名字都使用自然語(yǔ)言,因此寫(xiě)出來(lái)代碼的可維護(hù)性和軟件可讀性很好。這樣當(dāng)需要更換軟件開(kāi)發(fā)人員的時(shí)候,可以比較容易地進(jìn)行代碼移交和消化。即使沒(méi)有更換人員,他們?cè)诰S護(hù)自己的代碼的時(shí)候也比較容易。
6. 當(dāng)寫(xiě)好了一個(gè)算法后,以后需要在不同種類(lèi)的CPU上也需要這個(gè)算法時(shí),可以直接引用原來(lái)的代碼,再配合這種CPU專(zhuān)用的編譯器重新編譯就可以了。這樣可以實(shí)現(xiàn)軟件的低成本跨平臺(tái)移植。而匯編語(yǔ)言在這種情況下,除了重新寫(xiě)代碼,沒(méi)有別的辦法。因?yàn)镃語(yǔ)言的這種特性,如果在設(shè)計(jì)復(fù)雜算法時(shí)(比如視頻/音頻信號(hào)處理、模糊邏輯和人工神經(jīng)元算法等),可以在PC機(jī)上使用Visual C++、C++ Build等x86平臺(tái)的C語(yǔ)言編譯器設(shè)計(jì)、調(diào)試該算法的代碼,調(diào)試成功后就可以移植到單片機(jī)的軟件系統(tǒng)中去。由于PC機(jī)上有充足的系統(tǒng)資源,開(kāi)發(fā)調(diào)試進(jìn)度會(huì)有大幅度的提高,這樣就節(jié)約了軟件的時(shí)間成本。
7. 在團(tuán)體寫(xiě)作的軟件中,軟件接口容易做到規(guī)范統(tǒng)一。
雖然使用C語(yǔ)言寫(xiě)出來(lái)的代碼會(huì)比匯編語(yǔ)言所占用的空間要大5%~20%,但是由于半導(dǎo)體技術(shù)的發(fā)展,芯片的容量和速度有了大幅度的提高。在這種情況下,代碼占用的空間差異已經(jīng)不是很關(guān)鍵的了。相比之下,我們更應(yīng)該注重軟件是否可以長(zhǎng)期穩(wěn)定運(yùn)行的能力,注重使用先進(jìn)開(kāi)發(fā)工具所帶來(lái)的時(shí)間成本的優(yōu)勢(shì)。