最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

設(shè)計一個簡單的嵌入式系統(tǒng)

出處:設(shè)計一個簡單的嵌入式系統(tǒng) 發(fā)布于:2020-08-25 13:35:00

  設(shè)計一個簡單的嵌入式系統(tǒng)
  這個是在網(wǎng)上看到的一篇文檔,作者的目的是設(shè)計一個簡單的嵌入式操作系統(tǒng),只實現(xiàn)一個基本任務(wù)調(diào)度器的功能。正如作者所說,雖然不能稱為操作系統(tǒng),但已體現(xiàn)了小型嵌入式操作系統(tǒng)的精髓。對于我們來說是很好的學(xué)習(xí)資料,可以從中一窺操作系統(tǒng)的面目,今天分享給大家。
  1、多任務(wù)機(jī)制
  其實在單一CPU 的情況下,是不存在真正的多任務(wù)機(jī)制的,存在的只有不同的任務(wù)輪流使用CPU,所以本質(zhì)上還是單任務(wù)的。但由于CPU執(zhí)行速度非???,加上任務(wù)切換十分頻繁并且切換的很快,所以我們感覺好像有很多任務(wù)同時在運(yùn)行一樣。這就是所謂的多任務(wù)機(jī)制。
  實時系統(tǒng)的特征是延時可預(yù)測,能夠在一個規(guī)定的時間內(nèi)(通常是 ms 級別的)對某些信號做出反應(yīng)。
  2、任務(wù)的狀態(tài)
  任務(wù)有下面的特性:任務(wù)并不是隨時都可以運(yùn)行的,而一個已經(jīng)運(yùn)行的任務(wù)并不能保證一直占有 CPU 直到運(yùn)行完。一般有就緒態(tài),運(yùn)行態(tài),掛起態(tài)等。
  運(yùn)行態(tài):一個運(yùn)行態(tài)的任務(wù)是一個正在使用 CPU 的任務(wù)。任何時刻有且只有一個運(yùn)行著的任務(wù)。
  就緒態(tài):一個就緒態(tài)任務(wù)是可運(yùn)行的,等待占有 CPU 的任務(wù)釋放 CPU。
  掛起態(tài):某些條件不滿足而掛起不能運(yùn)行的狀態(tài)。
  3、如何轉(zhuǎn)化為就緒態(tài)
  INT32U OSRdyTbl; /* 就緒任務(wù)表 */
  上面定義一個 32 位變量,每一位代表一個任務(wù),0 表示掛起狀態(tài),1 表示就緒狀態(tài)。它記錄了各任務(wù)的就緒與否狀態(tài),稱它為就緒表。OSRdyTbl 定義為 32 位變量,對應(yīng)32 個任務(wù)。當(dāng)然,定義為 64 位的話,便  多能支持 64 個任務(wù)。這樣,可以定義兩個宏,實現(xiàn)把任務(wù)的狀態(tài)變?yōu)榫途w或掛起態(tài)。
  /* 在就緒表中登記就緒任務(wù) */
  #define OSSetPrioRdy(prio) { OSRdyTbl |= 0x01《《prio;} //把相應(yīng)位置1
  /* 從就緒表中刪除任務(wù) */
  #define OSDelPrioRdy(prio) { OSRdyTbl &= ~(0x01《《prio); }//把相應(yīng)位清零
  任務(wù)之間互相獨立,不存在互相調(diào)用的關(guān)系。所有任務(wù)在邏輯上都是平等的。由于任務(wù)之間互相看不見,所以他們之間的信息傳輸就無法當(dāng)面完成。這就需要各種通信機(jī)制如信號量,消息郵箱,隊列等來實現(xiàn)。
  4、什么是搶占式調(diào)度?
  調(diào)度的概念,通俗的說就是系統(tǒng)在多個任務(wù)中選擇合適的任務(wù)執(zhí)行。系統(tǒng)如何知道何時該執(zhí)行哪個任務(wù)?可以為每個任務(wù)安排一個  的優(yōu)先級別,當(dāng)同時有多個任務(wù)就緒時,優(yōu)先運(yùn)行優(yōu)先級較高的任務(wù)。同時,任務(wù)的優(yōu)先級也作為任務(wù)的  標(biāo)識號。代碼中都是對標(biāo)識號來完成對任務(wù)的操作的。
  所謂“搶占式調(diào)度”是指:一旦就緒狀態(tài)中出現(xiàn)優(yōu)先權(quán)更高的任務(wù),便立即剝奪當(dāng)前任務(wù)的運(yùn)行權(quán),把CPU分配給更高優(yōu)先級的任務(wù)。這樣CPU 總是執(zhí)行處于就緒條件下優(yōu)先級  的任務(wù)。
  5、多任務(wù)系統(tǒng)的時間管理
  與人一樣,多任務(wù)系統(tǒng)也需要一個“心跳”來維持其正常運(yùn)行,這個心跳叫做時鐘節(jié)拍,通常由定時器產(chǎn)生一個固定周期的中斷來充當(dāng)。
  OSTimeDly 函數(shù)就是以時鐘節(jié)拍為基準(zhǔn)來延時的(在時鐘的中斷服務(wù)函數(shù)中,依次對各個延時任務(wù)的延時節(jié)拍數(shù)減1。若發(fā)現(xiàn)某個任務(wù)的延時節(jié)拍數(shù)變?yōu)?,則把它從掛起態(tài)置為就緒態(tài)。)。這個函數(shù)完成功能很簡單,就是先掛起當(dāng)起當(dāng)前任務(wù),設(shè)定其延時節(jié)拍數(shù),然后進(jìn)行任務(wù)切換,在指定的時鐘節(jié)拍數(shù)到來之后,將當(dāng)前任務(wù)恢復(fù)為就緒狀態(tài)。任務(wù)必須通過OSTImeDly或 OSTaskSuspend 讓出CPU的使用權(quán)(延時或等待事件),使更低優(yōu)先級任務(wù)有機(jī)會運(yùn)行。
  6、如何實現(xiàn)多任務(wù)?
  只有一個CPU,如何在同一時間實現(xiàn)多個獨立程序的運(yùn)行?要實現(xiàn)多任務(wù),條件是每個任務(wù)互相獨立。人如何才能獨立,有自己的私有財產(chǎn)。任務(wù)也一樣,如果一個任務(wù)有自己的CPU,堆棧,程序代碼,數(shù)據(jù)存儲區(qū),那這個任務(wù)就是一個獨立的任務(wù)。(CPU是通過多任務(wù)機(jī)制獲得的,其他的需要你分配)
  TIPS:
  如果一個任務(wù)正在運(yùn)行某個公共函數(shù)時(如Printf), 被另一個高優(yōu)先級的任務(wù)搶占,那么當(dāng)這個高優(yōu)先級的任務(wù)也調(diào)用同一個公共函數(shù)時,極有可能破壞原任務(wù)的數(shù)據(jù)。因為兩個任務(wù)可能共用一套數(shù)據(jù)。為了防止這種情況發(fā)生,常采用兩種措施:可重入設(shè)計和互斥調(diào)用。
  可重入函數(shù)中所有的變量均為局部變量,局部變量在調(diào)用時臨時分配空間,所以不同的任務(wù)在不同的時刻調(diào)用該函數(shù)時,它們的同一個局部變量所分配的存儲空間并不相同(任務(wù)私有棧中),互不干擾。另外,如果可重入函數(shù)調(diào)用了其他函數(shù),則這些被調(diào)用的函數(shù)也必須是可重入函數(shù)。
  實現(xiàn)互斥(獨占)訪問的方法有關(guān)中斷,關(guān)調(diào)度,互斥信號量,計數(shù)信號量等。
  6.1 一個任務(wù)如何擁有自己的程序代碼
  對于如何實現(xiàn)多任務(wù),首先是程序代碼,每個任務(wù)的程序代碼與函數(shù)一樣,與51 的裸奔程序一樣,每個任務(wù)都是一個大循環(huán)。然后是數(shù)據(jù)存儲區(qū),由于全局變量是系統(tǒng)共用的,各個任務(wù)共享,不是任務(wù)私有,所以這里的數(shù)據(jù)存儲區(qū)是指任務(wù)的私有變量,如何變成私有?局部變量也。編譯器是把局部變量保存在棧里的,所以好辦,只要任務(wù)有個私有的棧就行。
  TIPS:
  臨界資源是  僅允許一個任務(wù)使用的共享資源。每個任務(wù)中訪問臨界資源的那段程序稱為臨界區(qū)。
  在多任務(wù)系統(tǒng)中,為保障數(shù)據(jù)的可靠性和完整性,共享資源要互斥(獨占)訪問,所以全局變量(只讀的除外)不能同時有多個任務(wù)訪問,即一個任務(wù)訪問的時候不能被其他任務(wù)打斷。共享資源是一種臨界資源。
  6.2 一個任務(wù)如何擁有自己的堆棧、數(shù)據(jù)存儲區(qū)
  私有棧的作用是存放局部變量,函數(shù)的參數(shù),它是一個線性的空間,所以可以申請一個靜態(tài)數(shù)組,把棧頂指針SP指向棧的數(shù)組的首元素(遞增棧)或  一個元素(遞減棧)。即可打造一個人工的棧出來。每個任務(wù)還要有記錄自己棧頂指針的變量,保存在任務(wù)控制塊(TCB)中。
  什么是任務(wù)控制塊?
  系統(tǒng)中的每個任務(wù)具有一個任務(wù)控制塊,任務(wù)控制塊記錄任務(wù)執(zhí)行的環(huán)境,這里的任務(wù)控制塊比較簡單,只包含了任務(wù)的堆棧指針和任務(wù)延時節(jié)拍數(shù)。任務(wù)控制塊是任務(wù)的身份證。它把任務(wù)的程序與數(shù)據(jù)聯(lián)系起來,找到它就可以得到任務(wù)的所有資源。
  設(shè)計一個簡單的嵌入式系統(tǒng)
  6.3 一個任務(wù)如何擁有自己的CPU
    來看看任務(wù)是如何“擁有”自己的CPU 的。只有一個 CPU,各個任務(wù)共享,輪流使用。如何才能實現(xiàn)?我們先來看看中斷的過程,當(dāng)中斷來臨時,CPU 把當(dāng)前程序的運(yùn)行地址,寄存器等現(xiàn)場數(shù)據(jù)保存起來(一般保存在棧里),然后跳到中斷服務(wù)程序執(zhí)行。待執(zhí)行完畢,再把先前保存的數(shù)據(jù)裝回CPU 又回到原來的程序執(zhí)行。這樣就實現(xiàn)了兩個不同程序的交叉運(yùn)行。
  借鑒這種思想不就能實現(xiàn)多任務(wù)了嗎!模仿中斷的過程就可以實現(xiàn)任務(wù)切換運(yùn)行。任務(wù)切換時,把當(dāng)前任務(wù)的現(xiàn)場數(shù)據(jù)保存在自己的任務(wù)棧里面,再把待運(yùn)行的任務(wù)的數(shù)據(jù)從自己的任務(wù)棧裝載到CPU中,改變 CPU 的 PC,SP,寄存器等??梢哉f,任務(wù)的切換是任務(wù)運(yùn)行環(huán)境的切換。而任務(wù)的運(yùn)行環(huán)境保存在任務(wù)棧中,也就是說,任務(wù)切換的關(guān)鍵是把任務(wù)的私有堆棧指針賦予處理器的堆棧指針SP。
  設(shè)計一個簡單的嵌入式系統(tǒng)
  創(chuàng)建一個任務(wù)。它接收三個參數(shù),分別是任務(wù)的入口地址,任務(wù)堆棧的首地址和任務(wù)的優(yōu)先級。調(diào)用本函數(shù)后,系統(tǒng)會根據(jù)用戶給出的參數(shù)初始化任務(wù)棧,并把棧頂指針保存到任務(wù)控制塊中,在任務(wù)就緒表標(biāo)記該任務(wù)為就緒狀態(tài)。  返回,這樣一個任務(wù)就創(chuàng)建成功了。
  當(dāng)一個任務(wù)將要運(yùn)行時,便通過取得它的堆棧指針(保存在任務(wù)控制塊中)將這些寄存器出棧裝入CPU 相應(yīng)的位置即可。
  6.4 如何實現(xiàn)搶占式調(diào)度?
  基于任務(wù)優(yōu)先級的搶占式調(diào)度,也就是  優(yōu)先級的任務(wù)一旦處于就緒狀態(tài),則立即搶占正在運(yùn)行的低優(yōu)先級任務(wù)的處理器資源。為了保證CPU 總是執(zhí)行處于就緒條件下優(yōu)先級  的任務(wù),每當(dāng)任務(wù)狀態(tài)改變后,即判斷當(dāng)前運(yùn)行的任務(wù)是否是就緒任務(wù)中優(yōu)先級  的,否則進(jìn)行任務(wù)切換。
  任務(wù)狀態(tài)會在什么時候發(fā)生改變呢?有下面兩種情況:
  1、高優(yōu)先級的任務(wù)因為需要某種資源或延時,主動請求掛起,讓出處理器,此時將調(diào)度就緒狀態(tài)的低優(yōu)先級任務(wù)獲得執(zhí)行,這種調(diào)度稱為任務(wù)級的切換。如任務(wù)執(zhí)行OSTImeDly或OSTaskSuspend把自身掛起就屬于這種。
  2、高優(yōu)先級的任務(wù)因為時鐘節(jié)拍到來,或在中斷處理結(jié)束后,內(nèi)核發(fā)現(xiàn)更高優(yōu)先級任務(wù)獲得了執(zhí)行條件(如延時的時鐘到時)則在中斷后直接切換到更高優(yōu)先級任務(wù)執(zhí)行。這種調(diào)度也稱為中斷級的切換。
  6.5 掛起/恢復(fù)任務(wù)
  1掛起任務(wù)
  通過 OSTaskSuspend可以主動掛起一個任務(wù)。OSTaskSuspend會把任務(wù)從任務(wù)就緒表中移出,  重新啟動系統(tǒng)調(diào)度。這個函數(shù)可以掛起任務(wù)本身也可以掛起其他任務(wù)。
  2恢復(fù)任務(wù)(OSTaskResume)
  可以讓被 OSTaskSuspend 或 OSTimeDly 掛起的任務(wù)恢復(fù)就緒態(tài),然后進(jìn)行任務(wù)調(diào)度。
  嵌入式系統(tǒng)產(chǎn)品有哪些特點
  有人說嵌入式系統(tǒng)就是微電腦,小的計算機(jī)。也有人稱嵌入式系統(tǒng)為后PC時代和后網(wǎng)絡(luò)時代的新秀。那么嵌入式系統(tǒng)與傳統(tǒng)的通用計算機(jī),數(shù)字產(chǎn)品相比,利用嵌入式技術(shù)的產(chǎn)品有其自己的特點,下面小編詳細(xì)為大家介紹嵌入式系統(tǒng)開發(fā)技術(shù)以及其應(yīng)用產(chǎn)品的特點。
  1.由于嵌入式系統(tǒng)采用的是微處理器,實現(xiàn)相對單一的功能,采用獨立的操作系統(tǒng),所以往往不需要大量的外圍器件。因而在體積上,功耗上有其自身的優(yōu)勢。相比之下,一個使用WindowsCE的PDA,僅靠機(jī)內(nèi)電源就可以使用幾天,而任何一臺筆記本僅僅能夠支持3小時左右。
  2.嵌入式系統(tǒng)開發(fā)技術(shù)是將計算機(jī)技術(shù)、半導(dǎo)體技術(shù)和電子技術(shù)與各個行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物,是一門綜合技術(shù)學(xué)科。由于空間和各種資源相對不足,嵌入式系統(tǒng)的硬件和軟件都必須高效率地設(shè)計,量體裁衣、去除冗余,力爭在同樣的硅片面積上實現(xiàn)更高的性能,這樣才能在具體應(yīng)用中對處理器的選擇更具有競爭力。
  3.嵌入式系統(tǒng)是一個軟硬件高度結(jié)合的產(chǎn)物。為了提高執(zhí)行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲器芯片或單片機(jī)本身中,而不是存貯于磁盤等載體中。片上系統(tǒng),板上系統(tǒng)的實現(xiàn),使得以pda等為代表的這類產(chǎn)品擁有更加熟悉的操作界面和操作方式,比著傳統(tǒng)的商務(wù)通等功能更加完善,實用。
  4.為適應(yīng)嵌入式分布處理結(jié)構(gòu)和應(yīng)用上網(wǎng)需求,面向21世紀(jì)的嵌入式系統(tǒng)開發(fā)要求配備標(biāo)準(zhǔn)的一種或多種網(wǎng)絡(luò)通信接口。針對外部聯(lián)網(wǎng)要求,嵌入設(shè)備必需配有通信接口,相應(yīng)需要TCP/IP協(xié)議簇軟件支持;由于家用電器相互關(guān)聯(lián)(如防盜報警、燈光能源控制、影視設(shè)備和信息終端交換信息)及實驗現(xiàn)場儀器的協(xié)調(diào)工作等要求,新一代嵌入式設(shè)備還需具備IEEE1394、USB、CAN、Bluetooth或IrDA通信接口,同時也需要提供相應(yīng)的通信組網(wǎng)協(xié)議軟件和物理層驅(qū)動軟件。為了支持應(yīng)用軟件的特定編程模式,如Web或無線Web編程模式,還需要相應(yīng)的瀏覽器,如HTML、WML等。
  5.因為嵌入式系統(tǒng)往往和具體應(yīng)用有機(jī)地結(jié)合在一起,它的升級換代也是和具體產(chǎn)品同步進(jìn)行,因此嵌入式系統(tǒng)產(chǎn)品一旦進(jìn)入市場,具有較長的生命周期。
  嵌入式系統(tǒng)開發(fā)以其集成化,功能化廣泛應(yīng)用于電子產(chǎn)品中。小編認(rèn)為其主要的特點是功能化明確,用途相對具有針對性。嵌入系統(tǒng)技術(shù)的開發(fā)也相對大眾化,不像計算機(jī)系統(tǒng)需要龐大的團(tuán)隊共同開發(fā)。嵌入系統(tǒng)可實現(xiàn)單人開發(fā),當(dāng)然協(xié)同開發(fā)更佳,其開發(fā)的門檻也相對較低。就因為這些特點,嵌入式系統(tǒng)發(fā)展迅速,是當(dāng)下熱門的職業(yè)選擇。

關(guān)鍵詞:設(shè)計一個簡單的嵌入式系統(tǒng)嵌入式系統(tǒng)

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://udpf.com.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!