周相康
摘 要:本文對嵌入式軟件編程語言及軟件模塊化設計的概念進行概述,并給出應用C語言進行模塊化代碼編寫的方法及要點,希望給軟件開發(fā)人員以借鑒,提高代碼編寫效率,降低程序出錯概率,縮短軟件開發(fā)周期。
關鍵詞:模塊化;嵌入式;軟件設計
伴隨著科學發(fā)展,互聯(lián)網的興起,人們對軟件的應用需求越來越大,軟件功能越來越多,實現(xiàn)復雜度也隨之增加。嵌入式軟件編程成為軟件編程人員要進行學習及應用的技能,進行模塊化編寫,以解決軟件編制復雜度的難題。
一、什么是嵌入式軟件編程語言
嵌入式軟件編程在行業(yè)內通常應用匯編、C和C++三種語言編寫,這三種編程語言雖然都能夠用作嵌入式軟件編程,但在部分特性上存在著差異,實時性匯編最快、C++最慢,代碼移植性與維護性的便捷性比較,C++最簡單,匯編最難,最為繁瑣。業(yè)內常用C語言進行嵌入式軟件的編程,這由C語言的特性決定的,C語言在編程時更加側重過程,所編程的代碼在移植、共享方面較為容易;其次,大部分的軟件編程環(huán)境都支持C和匯編語言,少部分支持C++語言編譯器;最后C語言掌握及應用最為簡單。由于嵌入式軟件大多都應用C語言進行編寫,因此文章重點講解用C語言進行模塊化編程的方法、要點[1]。
二、什么是軟件模塊化設計
軟件開發(fā)工程在近年來難度不斷加大,當編寫出現(xiàn)漏洞時就會受到步驟、功能增加的制約,再修改起來難度、工作量極大,為此計算機領域專業(yè)人員提供各種軟件設計模型為編程人員服務。根據用戶需求,將功能較多、規(guī)模較大的軟件劃分為多個小模塊進行編寫,分工合作提升編寫效率,減少失誤。模塊化下的軟件編寫,每個模塊的編寫工作量小且工作獨立、互不影響,結構獨立及功能獨立,將軟件的開發(fā)分工化。
三、應用C語言進行模塊化代碼編寫
應用模塊化代碼編寫的軟件是由被加工對象及其在此軟件上實現(xiàn)的相關功能構成。在軟件的實際開發(fā)階段,通常應用兩種代碼編寫方法,基于功能的程序設計,要在其功能的實現(xiàn)中考慮到編寫過程以及人工操作的疏漏,這個疏漏是不確定且不可控的。程序的整體結構依賴于前期規(guī)劃好的程序功能,在后期的功能擴展、刪除和修改環(huán)節(jié)的難度都會不同程度的提升。在此模式下的軟件,其功能較為集中且耦合度也大,整個軟件結構可以定義為脆弱,經常會在編程上出現(xiàn)漏洞,且這個漏洞處理上也會非常的繁瑣,在未來使用中,難以滿足用戶的功能擴展需求,軟件可復用性差。
基于對象的程序設計中,要考慮的對象及數(shù)據結構、軟件結構都是相對穩(wěn)定的,易于控制和管理,盡管會對軟件的功能有一定的要求,要在使用中進行不斷的完善、演進,但在同一問題空間中的對象,都能夠保持對象本身的穩(wěn)定性、可控性,在此情況下圍繞對象進行的軟件編譯,編譯成型的軟件系統(tǒng)也同樣具備優(yōu)良的穩(wěn)定性和可控性。在實際代碼編制時,將屬性及服務封裝在對象中,當需要對軟件功能、編程細節(jié)進行修改時,這種封裝操作能夠有效的對對象結構的穩(wěn)定性、可控性進行維持,將進行的改動、漏洞修改鎖定在同一對象的內部,降低因為改動而導致的系統(tǒng)崩潰或是結構混亂。因此面向對象方法開發(fā)的軟件,必須具備一定的繼承性、封裝性,并且能夠支撐軟件代碼的重復使用,在日后的軟件完善、擴展等操作中,能夠良好的適應復雜系統(tǒng)變化的要求。
C++語言擁有面向對象的特性,因此應用C++語言能夠方便、快捷的完成軟件模塊化設計。C語言是面向過程的語言,因此缺少C++語言在面向對象上的優(yōu)勢,因此模塊化編程相對C語言而言實現(xiàn)較為困難。應用C語言以實現(xiàn)C++語言面向對象的特征,舉例對比描述轉換過程。
C++通過類定義一個對象,類用于封裝對象所能夠應用到的數(shù)據及方法,C語言中沒有類的定義,但有結構體,在C語言中應用結構體,用于定義一個對象。
如在數(shù)據結構中常用的棧類型,應用C++語言以及C語言分別對棧軟件模塊進行編寫及對比,能夠明顯看出C++語言與C語言在實現(xiàn)模塊功能編寫時存在一定的共同點,從而能夠解釋C語言完成模塊化編程的原理。C++語言進行模塊化編程時有多種書寫方法,此代碼雖然不是C++語言應用的最佳實現(xiàn)方法,但是與C語言更加接近,更為容易理解,應用C++語言能夠進行,其代碼編寫為:
#define MaxStackSize 50 //常數(shù)
typedef int DataType;//定義數(shù)據類型
class Stack
{
private:
DataType list[MaxStackSize]; //棧數(shù)組及棧頂指針
int top;
public:
void Init(void); //初始化
void Push(DataType item);//入棧
DataType Pop(void);//出棧
}
Stack::Init(void)
{}//這里僅例述一個方法實現(xiàn)
在上述敘述的代碼編寫樣本中,Stack定義了棧對象,它包含對象數(shù)據如list和top,同時也包括對象方法,初始化棧Init()、入棧Push()和出棧Pop()操作。
在嵌入式軟件中,其各個模塊的設計,必然會涉及到編寫語言、編寫對象、編寫方法,所以,明確以上幾點,借助相應的對象編寫方法參考模板,完成相關代碼的編寫,可以說是目前一項較為合理、有效的方法。C++語言對象實例化方法就能夠實現(xiàn)Stack的方便應用,因為可以定義Stack s,并方便對象的調用,如s.Init()、s.Push()、s.Pop()等。
應用C語言如下編寫:
typedef struct
{
DataType list[MaxStackSize]; //棧數(shù)組及棧頂指針
int top;
void (*Init)(void *pStack); //初始化
void (*Push)(void *pStack ,DataType item);//入棧
DataType (*Pop)(void *pStack);//出棧
} Stack;
void StackInit(void *pStack)
{}//這里僅例述一個方法實現(xiàn)
#define StackDefault {\\
{0,},\\
{1},\\
{StackInit},\\
{StackPush},\\
{StackPop},\\
} //初始化宏
C語言通過結構體定義一個新類型Stack,這種既帶有數(shù)據又有方法的抽象數(shù)據類型已具有面向對象的特征。C語言實現(xiàn)對象方式的編寫,也必須要遵循一定的要求,具體如下:
C語言定義Stack,雖然可以定義為Stack s,但不能像C++一樣調用,即使編譯器不會報錯,但也無法執(zhí)行,錯誤體現(xiàn)為C語言方法需要傳遞對象指針,而Stack的函數(shù)指針沒有被初始化,所以不能執(zhí)行,因此要在聲明對象時,將Stack函數(shù)指針初始化,設定為默認值。
C語言代碼編制期間,在對默認值的設定進行具體劃分時,也應當遵循相應的原則,在利用Stack函數(shù)指針的基礎上,確保相關數(shù)值能夠處于初始化的狀態(tài),以此來保證默認值設定的科學性和合理性。C語言應用Stack數(shù)據類型,就要聲明對象實例,并進行初始化操作,不同于C++,如Stack s=StackDefault,聲明對象實例,并且指針恢復初始。
四、總結
本文所述的模塊化代碼編寫的方法及要點,能夠滿足C語言的模塊化設計需求,極大的降低了模塊化程序編寫的難度,建議在軟件編程領域進行推廣。
參考文獻:
[1]文武,任鵬,王靈軍,等.模塊化嵌入式軟件開發(fā)平臺研究[J].家電科技,2016(6):8385.