版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
單片機程序基本構(gòu)架及實現(xiàn)Kerwin2019.11.202021/5/91目錄一、總述二、程序的基本結(jié)構(gòu)2.1 順序結(jié)構(gòu)2.2 分支結(jié)構(gòu)2.3 循環(huán)結(jié)構(gòu)三、單片機程序執(zhí)行構(gòu)架3.1 簡單順序執(zhí)行法3.2 時間片輪詢法3.3 操作系統(tǒng)(略)2021/5/92一、總述
單片機程序普遍采用結(jié)構(gòu)化程序設(shè)計方法,任何復(fù)雜的程序都是由順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)這三種基本結(jié)構(gòu)組成。結(jié)構(gòu)化程序設(shè)計可以使程序結(jié)構(gòu)清晰、易于讀寫和驗證,可靠性高。而軟件構(gòu)架,似乎只有純上位機才有,其實,單片機軟件也有構(gòu)架可言,只有好的構(gòu)架,才能結(jié)構(gòu)清晰,方便開發(fā)和讓系統(tǒng)穩(wěn)定的工作。單片機程序執(zhí)行構(gòu)架而言,分為:順序執(zhí)行程序、時間片輪詢法執(zhí)行程序和操作系統(tǒng)等。本文將以應(yīng)廣單片機為例(本文無意穿插廣告),詳細講述單片機程序的結(jié)構(gòu),以及運行構(gòu)架。2021/5/93二、程序的基本結(jié)構(gòu)程序基本結(jié)構(gòu)2021/5/94二、程序的基本結(jié)構(gòu)2.1 順序結(jié)構(gòu)、它是最簡單、最基本的程序結(jié)構(gòu),其特點是按指令的排列順序逐條執(zhí)行,直到全部執(zhí)行完為止,如右圖。無論多么簡單或復(fù)雜的程序,都離不開這種形式。EX:簡單的順序結(jié)構(gòu)流水燈LED = 0B1111_1110;.delay 1000000LED = 0B1111_1101;.delay 1000000……LED = 0B0111_1111;while(1) NOP;2021/5/95二、程序的基本結(jié)構(gòu)2.2 分支結(jié)構(gòu)順序結(jié)構(gòu)只解決一些簡單的運算、邏輯處理等。實際控制MCU往往要求CPU能根據(jù)給定的條件進行判斷,再選擇不同的處理路徑,從而表現(xiàn)出某種智能。這時候就要求改變程序的執(zhí)行順序,即程序的流向有兩個或兩個以上,這種程序結(jié)構(gòu)稱為分支程序結(jié)構(gòu)。分支程序結(jié)構(gòu)的特點是程序根據(jù)不同條件,進行判斷和跳轉(zhuǎn)。如右圖2021/5/96二、程序的基本結(jié)構(gòu)2.2 分支結(jié)構(gòu)分支結(jié)構(gòu)根據(jù)分支數(shù)出口的多寡分為單分支結(jié)構(gòu)和多分支結(jié)構(gòu)。單分支程序結(jié)構(gòu)如右圖:EX:if(Key==1) goto @F; //跳到下一處@@處$LED Toggle;.delay 1000000;@@:NOP;2021/5/97二、程序的基本結(jié)構(gòu)2.2 分支結(jié)構(gòu)多分支程序結(jié)構(gòu)如右圖:EX:switch(State){case1:分支程序1;break;case2:分支程序2;break;……default:break;}2021/5/98二、程序的基本結(jié)構(gòu)2.3 循環(huán)結(jié)構(gòu)在應(yīng)用程序中,有時需要多次反復(fù)執(zhí)行相同的操作,只是操作的操作數(shù)(數(shù)據(jù))不同,這是就可以采用循環(huán)程序結(jié)構(gòu)。循環(huán)程序可以顯著縮短程序,減少程序所占存儲空間(ROM),使程序結(jié)構(gòu)大大優(yōu)化。循環(huán)程序一般包括4個部分:(1)設(shè)置循環(huán)初值
進入循環(huán)前要對循環(huán)次數(shù)等賦初值(2)循環(huán)處理
即循環(huán)體部分,是循環(huán)結(jié)構(gòu)的主題部分(3)循環(huán)修改
每次循環(huán)后對參數(shù)進行修改,載入不同操作數(shù),
為進入下一次循環(huán)做準備(4)循環(huán)控制
對循環(huán)結(jié)束條件進行判斷,及時結(jié)束循環(huán)2021/5/99二、程序的基本結(jié)構(gòu)2.3 循環(huán)結(jié)構(gòu)如有圖是兩種常見的循環(huán)結(jié)構(gòu)。即先執(zhí)行后判斷和先判斷后執(zhí)行。EX:簡單的流水燈PBC=0xFF;PB=~0x01;Byte Icnt = 7;D0{PB<<=1;PB |= 0x01;.delay 100000;Icnt--;}while(Icnt)2021/5/910三、單片機程序執(zhí)行構(gòu)架3.1 前后臺順序執(zhí)行法大多數(shù)人使用的方法,不需要思考程序具體構(gòu)架,直接通過執(zhí)行循序編寫應(yīng)用程序即可。前后臺程序一般是指沒有“操作系統(tǒng)”的程序。所謂的前臺,就是主動去判斷處理某個事務(wù),這個是主循環(huán)里要做的事,也就是你代碼主要要寫的。所謂的后臺,指的是:中斷,也就是不需要你的CPU去判別,就會自動進入某一種狀態(tài),你在這個狀態(tài)下做你要做的事就可以了。這種方法大多數(shù)人都會采用,而且我們接受的教育也基本都是使用此法。對于我們這些基本沒有學(xué)習(xí)過數(shù)據(jù)結(jié)構(gòu),程序架構(gòu)的單片機工程師來說,無疑很難在應(yīng)用程序的設(shè)計上有一個很大的提高,也導(dǎo)致了不同工程師編寫的應(yīng)用程序很難相互利于和學(xué)習(xí)。對一些比較簡單的應(yīng)用程序,實時性,并行性要求不太高的情況下是不錯的方法,程序設(shè)計簡單,思路比較清晰。但是當應(yīng)用程序比較復(fù)雜的時候,如果沒有一個完整的流程圖,恐怕別人很難看懂程序的運行狀態(tài),而且隨著程序功能的增加,編寫應(yīng)用程序的工程師的大腦也開始混亂。即不利于升級維護,也不利于代碼優(yōu)化。2021/5/911三、單片機程序執(zhí)行構(gòu)架3.1 前后臺順序執(zhí)行法如果喜歡使用此法的同學(xué),如果編寫比較復(fù)雜的應(yīng)用程序,一定要先理清頭腦,設(shè)計好完整的流程圖再編寫程序,否則后果很嚴重。當然應(yīng)該程序本身很簡單,此法還是一個非常必須的選擇。2021/5/912三、單片機程序執(zhí)行構(gòu)架3.1 前后臺順序執(zhí)行法EX:void FPPA0(void){Init();while(1){Task1();Task2();if(state==x) TaskX();}}voidInterrupt(void){TaskN();}2021/5/913三、單片機程序執(zhí)行構(gòu)架3.2 時間片輪詢法此法是介于前后臺順序執(zhí)行法與操作系統(tǒng)之間的一種方法,很多人剛開始用此法會遇到很多問題,甚至覺得還是需要操作系統(tǒng)才能實現(xiàn)真正的任務(wù)及編程。對于有操作系統(tǒng)的程序(如PC程序),我們并不需要了解任務(wù)之間的切換。我們只需劃分好任務(wù),以及任務(wù)之間通訊就可以了。但是時間片輪詢法中所有的的任務(wù)之間的通訊,任務(wù)之間的切換等等都要程序員來實現(xiàn),所以注意的問題也比較多。下面著重討論,使用此法應(yīng)該注意哪些問題,才能實現(xiàn)真正的任務(wù)級編程。2021/5/914三、單片機程序執(zhí)行構(gòu)架3.2 時間片輪詢法注意事項:1.任務(wù)的劃分:任務(wù)一定要劃分的非常合理,盡量做到任務(wù)的相對獨立;2.任務(wù)的優(yōu)先:一定要注意任務(wù)優(yōu)先級的設(shè)計,把需要及時處理的任務(wù)排到任務(wù)的最前面;3.任務(wù)的執(zhí)行:任務(wù)的執(zhí)行一定要盡量的快,一定要保證在毫秒級,否則任務(wù)還沒執(zhí)行完,其他任務(wù)都再等,就到不到實時系統(tǒng)的要求,也談不上多任務(wù)了;4.時間的劃分:時間片的劃分是整個系統(tǒng)的關(guān)鍵,一定要保證任務(wù)在需要執(zhí)行的時候能夠進入該執(zhí)行的任務(wù)中,否則就不能實現(xiàn)真正的時間片輪詢了。以上描述比較抽象,下面分別討論2021/5/915三、單片機程序執(zhí)行構(gòu)架3.2 時間片輪詢法1.任務(wù)的劃分:任務(wù)的劃分并不難,你需要先全面的了解你的項目是要實現(xiàn)什么功能,把其劃分成多個功能模塊,每一個模塊就是一個任務(wù),每一個任務(wù)對應(yīng)一個函數(shù)。例如一個時鐘產(chǎn)品,一般由:按鍵、顯示、時間、鬧鈴、菜單(設(shè)置/查詢等)等組成。那么我們可以把其劃分成5個任務(wù)。2021/5/916三、單片機程序執(zhí)行構(gòu)架3.2 時間片輪詢法2.任務(wù)的優(yōu)先:同樣通過以上事例來說明任務(wù)優(yōu)先級,可能劃分的方法有很多種,而且看不出很大的區(qū)別,這里列出一種比較合理的方式:A.時間,這里的時間就是從時鐘芯片中獲取時間;B.鬧鈴,獲取時間后應(yīng)該首先判斷是否是設(shè)置的鬧鈴時間,如果是就進行鬧鈴提示,否則,退出執(zhí)行下一個任務(wù);C.顯示,顯示時間,如果有鬧鈴,則顯示鬧鈴標志;D.按鍵,判斷是否有按鍵,如果有就進入相應(yīng)的操作;E.菜單,通過按鍵進入相應(yīng)的菜單,如果沒有按鍵,就不執(zhí)行菜單任務(wù)直接退出。2021/5/917三、單片機程序執(zhí)行構(gòu)架3.2 時間片輪詢法2.任務(wù)的優(yōu)先:這就是整個時鐘產(chǎn)品需要實現(xiàn)的整個過程,任務(wù)之間的通訊已經(jīng)任務(wù)之間的相互制約都是通過全局變量實現(xiàn)的,例如進入時間設(shè)置等時,就沒有有必要實現(xiàn)時間的讀取,鬧鈴的判斷,以及時間的顯示。這時只需要執(zhí)行按鍵任務(wù)以及菜單任務(wù)即可,直至退出為止。這里需要說明的是不執(zhí)行的任務(wù)是在判斷任務(wù)執(zhí)行情況后不具體執(zhí)行任務(wù)代碼,并不是一直在菜單程序中死等等,直至菜單退出。因為那樣的話就不是真正的多任務(wù)級了,也談不上時間片了。2021/5/918三、單片機程序執(zhí)行構(gòu)架3.2 時間片輪詢法3.任務(wù)的執(zhí)行:任務(wù)的執(zhí)行一定要盡量的快,一定不能因為某個任務(wù)需要等等特殊的東西,而影響的其他任務(wù),也不能在任務(wù)中調(diào)用大的延時函數(shù),一定要保證任務(wù)的運行速度,要知道每一個任務(wù)的具體執(zhí)行時間。例如上例中,絕對不能因為等等按鍵的釋放而導(dǎo)致其他任務(wù)的不運行。那么怎么消抖呢?這個方法有很多,你可要通過利用兩次按鍵任務(wù)是時間實現(xiàn)消抖,例如第一按鍵后,你做個標志,表示有鍵,但是不執(zhí)行菜單,可要通過第二次進入按鍵任務(wù)判斷,是否是按鍵的按鍵,還是誤按,這種情況下就必須要保證按鍵任務(wù)的運行時間在消抖也許的時間內(nèi)容,例如20ms。再例如:在應(yīng)用GPRS時,由于GPRS發(fā)送指令到接收到應(yīng)答的時間都是秒級的,所以一定不能發(fā)完指令后,一定要等到應(yīng)答才執(zhí)行下一個任務(wù),而是通過雙線程的思想,把GPRS的發(fā)送和接收分為兩條線,一條發(fā),一條接,而這兩條線之間都是同樣全局變量來連線。每次進入GPRS任務(wù)時都判斷是否由發(fā)送和接收,如果有發(fā)送就發(fā)送,有接收就判斷是否為上次發(fā)送的應(yīng)答,如果是就可以繼續(xù)發(fā)送了,否則繼續(xù)等待應(yīng)答的接收,以最快的速度實現(xiàn)任務(wù)的執(zhí)行。2021/5/919三、單片機程序執(zhí)行構(gòu)架3.2 時間片輪詢法4.時間的劃分:時間片的劃分尤為重要,需要保證每一任務(wù)都能在該執(zhí)行的時間內(nèi)運行。就以時鐘事例來說,顯示和獲取時鐘一般一秒一次就可以了(如果是數(shù)碼管動態(tài)掃描可能會更快)。當然在系統(tǒng)允許的情況下可以盡量多允許幾次,但一定最低的允許次數(shù)。像按鍵可以使用20ms作為任務(wù)的時間片,因為一般按鍵的消抖時間為20ms,那么時間片劃分為20ms完全可以保證即不漏掉按鍵,也不會誤讀按鍵。2021/5/920三、單片機程序執(zhí)行構(gòu)架3.2 時間片輪詢法的實現(xiàn)(以應(yīng)廣單片機為例)⑴對任務(wù)總數(shù)(圖中以8個為例)、時間片最小單位、運行間隔、相關(guān)任務(wù)定時計數(shù)器、運行標志,及任務(wù)函數(shù)進行定義2021/5/921三、
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年防洪工程承包商建設(shè)借款合同3篇
- 事業(yè)單位人力資源聘用合同(2024版)版B版
- 2024離婚協(xié)議房產(chǎn)
- 2025年度高級軟件開發(fā)與技術(shù)服務(wù)合同2篇
- 二零二五版辣椒種子生產(chǎn)與辣椒苗代銷合作協(xié)議2篇
- 2024版工程協(xié)議監(jiān)管及進度記錄臺賬一
- 二零二五版航空航天設(shè)備研發(fā)與采購合同范本3篇
- 2024年版磚結(jié)構(gòu)建筑勞務(wù)合作模板協(xié)議版B版
- 二零二五年度燒烤餐飲業(yè)商鋪租賃合同書3篇
- 二零二五版寵物傷害賠償及責(zé)任承擔(dān)協(xié)議3篇
- 生物醫(yī)藥大數(shù)據(jù)分析平臺建設(shè)
- EPC總承包項目中的質(zhì)量管理體系
- 滬教版小學(xué)語文古詩(1-4)年級教材
- 外科醫(yī)生年終述職總結(jié)報告
- CT設(shè)備維保服務(wù)售后服務(wù)方案
- 重癥血液凈化血管通路的建立與應(yīng)用中國專家共識(2023版)
- 兒科課件:急性細菌性腦膜炎
- 柜類家具結(jié)構(gòu)設(shè)計課件
- 陶瓷瓷磚企業(yè)(陶瓷廠)全套安全生產(chǎn)操作規(guī)程
- 煤炭運輸安全保障措施提升運輸安全保障措施
- JTGT-3833-2018-公路工程機械臺班費用定額
評論
0/150
提交評論