C語言軟件程序架構(gòu)設(shè)計(jì).pdf

C語言軟件程序架構(gòu)設(shè)計(jì).pdf

ID:56030932

大?。?79.61 KB

頁數(shù):6頁

時(shí)間:2020-06-19

C語言軟件程序架構(gòu)設(shè)計(jì).pdf_第1頁
C語言軟件程序架構(gòu)設(shè)計(jì).pdf_第2頁
C語言軟件程序架構(gòu)設(shè)計(jì).pdf_第3頁
C語言軟件程序架構(gòu)設(shè)計(jì).pdf_第4頁
C語言軟件程序架構(gòu)設(shè)計(jì).pdf_第5頁
資源描述:

《C語言軟件程序架構(gòu)設(shè)計(jì).pdf》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、時(shí)間片輪詢法對(duì)于一個(gè)單片機(jī)程序員來說,接受一個(gè)項(xiàng)目,在軟件設(shè)計(jì)方面,你首先需要考慮的是如何安排你的功能函數(shù)使之達(dá)到你的項(xiàng)目要求。也就是說你得有個(gè)自己的軟件架構(gòu)。對(duì)于像我這種菜鳥級(jí)的程序員來說,就是采用簡單的順序執(zhí)行,需要什么功能就添加什么功能函數(shù)。這樣做應(yīng)付小項(xiàng)目非??欤坏╉?xiàng)目的功能復(fù)雜,隨著函數(shù)的不斷增加,程序?qū)?huì)變得混亂。面對(duì)大的項(xiàng)目,如果一定要使用這種順序執(zhí)行法,則程序員本人應(yīng)當(dāng)在接手項(xiàng)目時(shí),保持設(shè)計(jì)思路的清晰,設(shè)計(jì)好完整的流程圖。操作系統(tǒng)不是一句兩句就能說得清楚的。如果你能駕馭那最好不過,如果你對(duì)之不熟悉,就不說操作系統(tǒng)本身的復(fù)雜性,其移植這一塊就需要花費(fèi)相

2、當(dāng)多的時(shí)間和精力。時(shí)間片輪詢法,本人也是在電子工程論壇看到zhaojun_xf的《淺談單片機(jī)應(yīng)用程序架構(gòu)》一文才知道這種軟件架構(gòu)的。下面就通過一個(gè)具體的例子來熟悉下時(shí)間片輪詢法的架構(gòu)和具體應(yīng)有。任務(wù):我們現(xiàn)在有一個(gè)任務(wù)可以細(xì)分為三個(gè)功能模塊:時(shí)鐘顯示、按鍵掃描和工作狀態(tài)顯示。我們的程序應(yīng)當(dāng)這么進(jìn)行:1、設(shè)計(jì)一個(gè)結(jié)構(gòu)體并完成初始化//任務(wù)結(jié)構(gòu)typedefstruct_TASK_COMPONENTS{uint8Run;//程序運(yùn)行標(biāo)記:0-不運(yùn)行,1運(yùn)行uint8Timer;//計(jì)時(shí)器uint8ItvTime;//任務(wù)運(yùn)行間隔時(shí)間void(*TaskHook)(void)

3、;//要運(yùn)行的任務(wù)函數(shù)}TASK_COMPONENTS;//任務(wù)定義在結(jié)構(gòu)體變量定義后,進(jìn)行初始化(按照三個(gè)功能模塊設(shè)定好初始值):staticTASK_COMPONENTSTaskComps[]={{0,60,60,TaskDisplayClock},//顯示時(shí)鐘{0,20,20,TaskKeySan},//按鍵掃描{0,30,30,TaskDispStatus},//顯示工作狀態(tài)//這里添加你的任務(wù)。。。。};2、任務(wù)列表//任務(wù)清單typedefenum_TASK_LIST{TAST_DISP_CLOCK,//顯示時(shí)鐘TAST_KEY_SAN,//按鍵掃描TASK

4、_DISP_WS,//工作狀態(tài)顯示//這里添加你的任務(wù)。。。。TASKS_MAX//總的可供分配定時(shí)任務(wù)數(shù)目}TASK_LIST此任務(wù)清單只是為了很好的展示任務(wù)的關(guān)系,我們所要的只是總?cè)蝿?wù)數(shù)這一項(xiàng)。與#defineTASK_NUM(3)語句作用是一致的。3、中斷服務(wù)函數(shù)voidTaskRemarks(void){uint8i;for(i=0;i

5、完了{(lán)//恢復(fù)計(jì)時(shí)器值,從新下一次TaskComps[i].Timer=TaskComps[i].ItvTime;TaskComps[i].Run=1;//任務(wù)可以運(yùn)行}}}}此函數(shù)放入中斷服務(wù)函數(shù)。在中斷中逐個(gè)判斷,如果定時(shí)值為0了,表示沒有使用此定時(shí)器或此定時(shí)器已經(jīng)完成定時(shí),不作處理。否則定時(shí)器減一,直到為零時(shí),相應(yīng)標(biāo)志位值1,表示此任務(wù)的定時(shí)值到了。4、任務(wù)處理voidTaskProcess(void){uint8i;for(i=0;i

6、].TaskHook();//運(yùn)行任務(wù)TaskComps[i].Run=0;//標(biāo)志清0}}}此函數(shù)就是判斷什么時(shí)候該執(zhí)行哪一個(gè)任務(wù)了,實(shí)現(xiàn)任務(wù)的管理操作,應(yīng)用者只需要在main()函數(shù)中調(diào)用此函數(shù)就可以了,并不需要去分別調(diào)用和處理任務(wù)函數(shù)。/***************************************************************************************FunctionName:TaskDisplayClock()*Description:顯示任務(wù)*EntryParameter:None*ReturnValu

7、e:None**************************************************************************************/voidTaskDisplayClock(void){}/***************************************************************************************FunctionName:TaskKeySan()*Description:掃描任務(wù)*EntryParameter:None*

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。