在單片機(jī)的運(yùn)用中,編程是十分重要的技能環(huán)節(jié)。在不斷的探究和開展中,模塊化的編程辦法現(xiàn)已成為單片機(jī)編程的重要辦法。在模塊化編程中,應(yīng)考慮多個(gè)程序的結(jié)構(gòu)對(duì)程序履行的影響,因而下面將剖析單片機(jī)的程序結(jié)構(gòu)。
單片機(jī)的運(yùn)用十分廣泛,承當(dāng)了許多職業(yè)的體系操控使命,單片機(jī)功用的完成首要取決于運(yùn)用程序的操控。恰當(dāng)?shù)膶懽鹘Y(jié)構(gòu)和辦法已成為研討的要點(diǎn)。
一、單片機(jī)程序結(jié)構(gòu)規(guī)劃的特色
單片機(jī)的編程應(yīng)從程序開發(fā)的言語下手,為不同的功用挑選不同的程序結(jié)構(gòu),然后為程序規(guī)劃打下杰出的根底,因而如安在實(shí)際操作中挑選程序的結(jié)構(gòu)形式就成了編程很重要。跟著計(jì)算機(jī)技能的老練和單片機(jī)技能的開展,提出了結(jié)構(gòu)化的編程辦法。它首要是將程序編寫歸入模塊形式,運(yùn)用結(jié)構(gòu)標(biāo)準(zhǔn)化,模塊化等辦法來完成程序的編寫,并運(yùn)用模塊化結(jié)構(gòu)來簡(jiǎn)化程序的雜亂性。這種類型的規(guī)劃是可重用和可移植的。簡(jiǎn)化程序的編寫進(jìn)程,進(jìn)步模塊的利用率。然后下降了犯錯(cuò)的可能性,進(jìn)步了單片機(jī)的運(yùn)用作用。依據(jù)不同的超低功耗MCU功用能夠挑選不同的模塊,每個(gè)模塊的功用都能夠杰出地運(yùn)用到體系中,而且能夠在特定的作業(yè)環(huán)境中處理特別的問題。一直合理地裝備軟件結(jié)構(gòu),理順模塊之間的聯(lián)系,以便從微觀的視點(diǎn)完成對(duì)編程進(jìn)程和結(jié)構(gòu)的操控。因而,完成了雜亂問題的簡(jiǎn)化,進(jìn)步了單片機(jī)的編程功率,而且進(jìn)步了處理雜亂問題的才干。
二、SCM開發(fā)言語挑選
由于C言語在運(yùn)用方面的優(yōu)勢(shì),因而被廣泛用于單片機(jī)的編程中。快捷的運(yùn)用程序庫功用易于完成雜亂數(shù)據(jù)的結(jié)構(gòu)。可是C言語無法在時(shí)序操控中取得優(yōu)勢(shì),速度型算法不容易滿意單片機(jī)的要求??墒?,由于C言語已包含在編程范圍內(nèi),因而其匯編混合編程模型現(xiàn)已能夠協(xié)助補(bǔ)償其言語的缺陷。跟著單片機(jī)調(diào)試技能的開展,單片機(jī)現(xiàn)已習(xí)慣了C言語程序操控,然后為編程供給了高檔言語的可能性。
三、單片機(jī)編程的通用程序結(jié)構(gòu)
為了便利單片機(jī)的編程,一般能夠?qū)⑵浞譃槎喾N結(jié)構(gòu)以習(xí)慣不同的功用要求。詳細(xì)結(jié)構(gòu)如下。
3.1根本程序結(jié)構(gòu)
它的結(jié)構(gòu)包含兩部分:初始化程序和作業(yè)程序。上電后,初始化程序擔(dān)任復(fù)位。首要履行初始化程序。該程序只需求在作業(yè)前履行一次即可。初始化程序運(yùn)轉(zhuǎn)以全面檢測(cè)和初始化各種端口和變量,計(jì)時(shí)器,ADC等。如有必要,能夠樹立不同的初始化分支,能夠檢測(cè)和初始化不同的端子,并能夠依據(jù)不同的條件挑選不同的初始化辦法,例如冷發(fā)動(dòng)和熱發(fā)動(dòng)選項(xiàng)。主程序是一個(gè)循環(huán)程序,履行單片機(jī)的作業(yè)內(nèi)容,并完成特定功用,如檢測(cè),操控,通訊,人機(jī)交互等。每個(gè)功用都由子程序操控,主程序是調(diào)用這些程序以促進(jìn)模塊化編程和運(yùn)用的指揮官。
3.2模塊結(jié)構(gòu)
在單片機(jī)程序中,主程序擔(dān)任模塊的調(diào)度,而完成該功用的子例程則被合理地調(diào)度。這時(shí),預(yù)訂程序便是模塊。添加到此類模塊的是某些功用。模塊化程序結(jié)構(gòu)能夠促進(jìn)程序多個(gè)功用的集成,即在不添加主程序難度的前提下添加或削減模塊能夠完成體系功用的改動(dòng)。完成程序的優(yōu)化,便于保護(hù),下降錯(cuò)誤率。
3.3模塊操控機(jī)制
在方案主程序時(shí),并非一切模塊都適用,因而應(yīng)在一段時(shí)間內(nèi)對(duì)模塊進(jìn)行操控,而且并非一切模塊都需求參加一切周期。或許某些模塊的履行并不頻頻,只要在滿意某些條件后才履行。為了處理這個(gè)問題,能夠?yàn)槟K設(shè)置一個(gè)標(biāo)志。模塊應(yīng)在履行前判別自己的標(biāo)志位。僅當(dāng)標(biāo)志位可用時(shí),才干履行相關(guān)操作。假如標(biāo)志位不可用,則應(yīng)履行回來進(jìn)程,而且不履行相應(yīng)的模塊功用。
3.4優(yōu)先呼叫機(jī)制
調(diào)用模塊時(shí),主程序應(yīng)具有不同的次序,由于模塊操作的優(yōu)先級(jí)將約束其運(yùn)用。假如沒有優(yōu)先級(jí)約束,則某些重要模塊將無法呼應(yīng)或不及時(shí)。因而,主程序應(yīng)該能夠剖析和挑選調(diào)用中模塊的優(yōu)先級(jí),并依據(jù)不同的處理事情來區(qū)別模塊的優(yōu)先級(jí)。查看模塊的功用,優(yōu)先級(jí)更高的模塊,然后查詢后續(xù)的功用模塊和類比。假如呈現(xiàn)不可用狀況,則履行新一輪檢測(cè),并發(fā)動(dòng)優(yōu)先級(jí)更高的模塊。
3.5前后結(jié)構(gòu)
前臺(tái)和后臺(tái)的結(jié)構(gòu)是引入了中止機(jī)制,即依據(jù)實(shí)時(shí)事情和緊急狀況進(jìn)行區(qū)別對(duì)待,提出具有較高實(shí)時(shí)性的事情,讓它們對(duì)中止作出呼應(yīng),以及具有較低實(shí)時(shí)性的事情。 -time和使命被合并到主程序中,例如顯現(xiàn)改寫,掃描等。構(gòu)成被中止的前端和后端履行程序結(jié)構(gòu)。前臺(tái)和后臺(tái)的程序應(yīng)依據(jù)大多數(shù)使命的需求履行功用調(diào)度。留意正在運(yùn)用的前臺(tái)和后臺(tái)使命的結(jié)構(gòu),并盡可能削減中止服務(wù)程序的履行時(shí)間。您能夠在中止服務(wù)程序中設(shè)置一些標(biāo)志,然后后臺(tái)程序檢測(cè)這些標(biāo)志以進(jìn)行進(jìn)一步處理。這能夠在很大程度上避免前臺(tái)程序和后臺(tái)程序搶占互相的處理器資源,然后導(dǎo)致某些低優(yōu)先級(jí)的使命堵塞?,F(xiàn)在,跟著單片機(jī)的開展,一些單片機(jī)的中止資源現(xiàn)已大大豐厚,一切使命都能夠經(jīng)過中止來完成。這樣,咱們能夠讓中止接收一切作業(yè)并廢棄后臺(tái)程序,只保存必要的初始化程序即可。只需進(jìn)入低功耗形式并等候中止以處理其他使命即可。