在嵌入式軟體中,邏輯處理是最基本的操作,如何能使程式簡潔清晰?如何能使程式高效執行?下面記錄一點自己的心得。
1.基本的邏輯
邏輯的定義就必須是嚴謹準確的,一段好的邏輯程式應該能夠消除歧義,不遺漏任何條件或者重複判斷。if/else這種最簡單的不用說了,如下程式考慮乙個if/else if/else的示例。
if(a)
else if(b)
else if(c)
...else
a、b、c的條件必須是無交叉的,確保判斷的排他性。
正常情況的處理放在if或者else if中,常用情況的處理放在靠前的位置,else留到最後,可作為錯誤的處理等。組成else if的完整語句,else是必不可少的,往往在很多實際中有很多else if,強烈建議在最後加上else,即使邏輯已經處理完畢,在else中什麼也不做,也應該留下一條空的語句。
對於複雜邏輯的簡化處理,有德摩根定律、卡諾圖等來輔助分析,就不細說了。
2.餘數與倍數的應用
對於週期性的邏輯控制,餘數和倍數就能很好的表示了。
考察乙個題目,五個燈一排,按下鍵則順次閃其中乙個燈,利用取餘則很好實現這個控制邏輯,邏輯控制如下:
int key=0;
void enter()
void control(key)
if(key==2)
if(key==3)
if(key==4)
else
}
當然上面的實現方式有很多種,但是餘數的使用體現了通過一次計算就可以對數進行分組的思想。在處理較大的數字分組時,餘數就很有用了。考察題目:今天是週日,一年(365天)後是週幾?
只需要365對7取餘即可得出。取餘結果0,1, 2,3,4,5,6 分別代表週日,周一,周二,週三,周四,周五,週六。365%7=1,因此結果是周一。
倍數的使用就比較簡單了,考察乙個二層的選單操作,如何表徵選單狀態呢?這裡給乙個簡單的思路。
一級選單使用0x100,0x200,0x400,0x800,0x100,···,二級選單在其相應的一級選單裡面自加即可。這裡可以有255個子項,需要增加的擴充位數就行,當然自加需要設定乙個限定值。如此使用簡單的&運算就可以確定選單狀態。
2.查表
當有大量的else if時,程式看起來不簡潔,維護也比較麻煩。這裡考慮一種表的實現方法。
考察題目一年中每個月份有多少天?
一種常見的解決可以是:
int mouth ;
int days;
if(mouth=1)
days=31;
else if(mouth=2)
days=28;//暫時不考慮閏月
else if(mouth=3)
days=31;
else if(mouth=4)
days=30;
else if(mouth=5)
days=31;
else if(mouth=6)
days=30;
else if(mouth=7)
days=31;
else if(mouth=8)
days=31;
else if(mouth=9)
days=30;
else if(mouth=10)
days=31;
else if(mouth=11)
days=30;
else if(mouth=12)
days=31;
else
;
實現這個功能,只需要建立一張表來解決。
int days;
int mouth;
int dayspermouth=
;days=dayspermouth[mouth-1];
用這種方法,考慮閏年也會比較簡單,只需要將這張表改為二維的即可。
當然在演算法中表還可以有很多高階用法,這裡暫時不討論了。
工業嵌入式移動軟體設計
工業嵌入式移動應用對比伺服器應用,執行的環境差異巨大,對軟體設計需要經常考慮的情況有 與動輒以g計的伺服器,嵌入式的儲存一般以mb計,如果是單版機,則以kb計。伺服器與桌面的cpu主頻為ghz級別,嵌入式的低至mhz級別。因此,大pool的申請是不可能的,小塊的記憶體也應當得到良好的管理並適時釋放。...
嵌入式軟體設計 Linux程式設計基礎
一 實驗內容 程式設計及調試題 1 根據要求編寫makefile檔案。有5個檔案分別是main.c visit.h study.h visit.c study.c。具體 如下 main.c檔案 include main int i printf please input the value of i...
嵌入式軟體設計第7次實驗報告
嵌入式軟體設計第7次實驗報告 學號 140201211 姓名 張潤澤 組別 第三組 實驗地點 d19 一 實驗目的 1.熟悉網線的製作 t568b標準直連線 2.學會使用html語言 超文字標記語言 進行網頁的設計 3.學會使用makefsdata.exe製作嵌入式二進位制網頁檔案。二 實驗內容 1...