91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個小型嵌入式操作系統(tǒng)設(shè)計:精髓都有了!

電子工程技術(shù) ? 來源:電子工程技術(shù) ? 2020-08-05 17:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這個是在網(wǎng)上看到的一篇文檔,作者的目的是設(shè)計一個簡單的嵌入式操作系統(tǒng),只實現(xiàn)一個基本任務(wù)調(diào)度器的功能。正如作者所說,雖然不能稱為操作系統(tǒng),但已體現(xiàn)了小型嵌入式操作系統(tǒng)的精髓。對于我們來說是很好的學(xué)習(xí)資料,可以從中一窺操作系統(tǒng)的面目,今天分享給大家。

1、多任務(wù)機制

其實在單一CPU 的情況下,是不存在真正的多任務(wù)機制的,存在的只有不同的任務(wù)輪流使用CPU,所以本質(zhì)上還是單任務(wù)的。但由于CPU執(zhí)行速度非???,加上任務(wù)切換十分頻繁并且切換的很快,所以我們感覺好像有很多任務(wù)同時在運行一樣。這就是所謂的多任務(wù)機制。

實時系統(tǒng)的特征是延時可預(yù)測,能夠在一個規(guī)定的時間內(nèi)(通常是 ms 級別的)對某些信號做出反應(yīng)。

2、任務(wù)的狀態(tài)

任務(wù)有下面的特性:任務(wù)并不是隨時都可以運行的,而一個已經(jīng)運行的任務(wù)并不能保證一直占有 CPU 直到運行完。一般有就緒態(tài),運行態(tài),掛起態(tài)等。

運行態(tài):一個運行態(tài)的任務(wù)是一個正在使用 CPU 的任務(wù)。任何時刻有且只有一個運行著的任務(wù)。

就緒態(tài):一個就緒態(tài)任務(wù)是可運行的,等待占有 CPU 的任務(wù)釋放 CPU。

掛起態(tài):某些條件不滿足而掛起不能運行的狀態(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)面完成。這就需要各種通信機制如信號量,消息郵箱,隊列等來實現(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ō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ù)的運行權(quán),把CPU分配給更高優(yōu)先級的任務(wù)。這樣CPU 總是執(zhí)行處于就緒條件下優(yōu)先級最高的任務(wù)。

5、多任務(wù)系統(tǒng)的時間管理

與人一樣,多任務(wù)系統(tǒng)也需要一個“心跳”來維持其正常運行,這個心跳叫做時鐘節(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ù)有機會運行。

6、如何實現(xiàn)多任務(wù)?

只有一個CPU,如何在同一時間實現(xiàn)多個獨立程序的運行?要實現(xiàn)多任務(wù),條件是每個任務(wù)互相獨立。人如何才能獨立,有自己的私有財產(chǎn)。任務(wù)也一樣,如果一個任務(wù)有自己的CPU,堆棧,程序代碼,數(shù)據(jù)存儲區(qū),那這個任務(wù)就是一個獨立的任務(wù)。(CPU是通過多任務(wù)機制獲得的,其他的需要你分配)

TIPS:

如果一個任務(wù)正在運行某個公共函數(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ù)的所有資源。

6.3 一個任務(wù)如何擁有自己的CPU

最后來看看任務(wù)是如何“擁有”自己的CPU 的。只有一個 CPU,各個任務(wù)共享,輪流使用。如何才能實現(xiàn)?我們先來看看中斷的過程,當(dāng)中斷來臨時,CPU 把當(dāng)前程序的運行地址,寄存器等現(xiàn)場數(shù)據(jù)保存起來(一般保存在棧里),然后跳到中斷服務(wù)程序執(zhí)行。待執(zhí)行完畢,再把先前保存的數(shù)據(jù)裝回CPU 又回到原來的程序執(zhí)行。這樣就實現(xiàn)了兩個不同程序的交叉運行。

借鑒這種思想不就能實現(xiàn)多任務(wù)了嗎!模仿中斷的過程就可以實現(xiàn)任務(wù)切換運行。任務(wù)切換時,把當(dāng)前任務(wù)的現(xiàn)場數(shù)據(jù)保存在自己的任務(wù)棧里面,再把待運行的任務(wù)的數(shù)據(jù)從自己的任務(wù)棧裝載到CPU中,改變 CPU 的 PC,SP,寄存器等??梢哉f,任務(wù)的切換是任務(wù)運行環(huán)境的切換。而任務(wù)的運行環(huán)境保存在任務(wù)棧中,也就是說,任務(wù)切換的關(guān)鍵是把任務(wù)的私有堆棧指針賦予處理器的堆棧指針SP。

創(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ù)將要運行時,便通過取得它的堆棧指針(保存在任務(wù)控制塊中)將這些寄存器出棧裝入CPU 相應(yīng)的位置即可。

6.4 如何實現(xiàn)搶占式調(diào)度?

基于任務(wù)優(yōu)先級的搶占式調(diào)度,也就是最高優(yōu)先級的任務(wù)一旦處于就緒狀態(tài),則立即搶占正在運行的低優(yōu)先級任務(wù)的處理器資源。為了保證CPU 總是執(zhí)行處于就緒條件下優(yōu)先級最高的任務(wù),每當(dāng)任務(wù)狀態(tài)改變后,即判斷當(dāng)前運行的任務(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)度。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5200

    文章

    20458

    瀏覽量

    334359
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11281

    瀏覽量

    225120
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7402

    瀏覽量

    129349

原文標(biāo)題:一個小型嵌入式操作系統(tǒng)設(shè)計:精髓都有了!

文章出處:【微信號:EngicoolArabic,微信公眾號:電子工程技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    什么是嵌入式應(yīng)用開發(fā)?

    概述 所謂的嵌入式應(yīng)用開發(fā)就是在嵌入式操作系統(tǒng)下進(jìn)行開發(fā)、軟硬件綜合開發(fā) ?嵌入式應(yīng)用開發(fā)?是指在嵌入式
    發(fā)表于 01-12 16:13

    什么是嵌入式操作系統(tǒng)

    要理解嵌入式操作系統(tǒng)(Embedded Operating System,簡稱 RTOS/EOS),我們可以從本質(zhì)定義→核心區(qū)別→實際作用→典型特征→嵌入式開發(fā)場景適配,五維度來拆解
    發(fā)表于 12-09 10:33

    嵌入式應(yīng)掌握的幾種能力

    、能力。 我覺得牢牢地掌握這些99.99999%的概率都會用得上的嵌入式軟件基礎(chǔ)對找工作才比較有利。其它些技術(shù)可以再用的時候再去了解、學(xué)習(xí)。 特別是些行業(yè)相關(guān)知識,可以入行之后再進(jìn)行學(xué)習(xí)。如果你
    發(fā)表于 12-08 06:05

    ARM嵌入式這樣學(xué)

    的內(nèi)核就是ARM內(nèi)核,它的主頻高很多,普通的都有幾百M。CPU緩存大,分有很多級的流水處理線,這樣大大提高了CPU利用率。這種IC的資源足以讓嵌入式
    發(fā)表于 12-04 07:48

    嵌入式系統(tǒng)的定義和應(yīng)用領(lǐng)域

    。盡管有些嵌入式系統(tǒng)可能包含操作系統(tǒng),但大多數(shù)情況下,它們僅由程序來控制整個邏輯。 從更專業(yè)的角度來看,
    發(fā)表于 11-17 06:49

    嵌入式實時操作系統(tǒng)的特點

    實時嵌入式操作系統(tǒng)(Real-Time Embedded Operating System)是專門設(shè)計用于嵌入式系統(tǒng)的實時操作系統(tǒng)。
    發(fā)表于 11-13 06:30

    如何采用SAFERTOS和ESM保護(hù)嵌入式系統(tǒng)安全

    信任根的重要組成部分是實時操作系統(tǒng)(RTOS),它為應(yīng)用程序的運行提供安全的平臺。嵌入式系統(tǒng)
    的頭像 發(fā)表于 10-24 15:51 ?1488次閱讀

    入行嵌入式應(yīng)該怎么準(zhǔn)備?

    架構(gòu)、總線協(xié)議和存儲器管理等概念的理解也是必不可少的。 三、操作系統(tǒng)嵌入式系統(tǒng)通常需要運行實時操作
    發(fā)表于 08-06 10:34

    嵌入式和單片機,是同一個東西嗎?

    的程序控制各種外部設(shè)備,完成特定的操作。 總結(jié)來說,單片機是嵌入式系統(tǒng)中的種重要硬件組件,而嵌入式系統(tǒng)
    發(fā)表于 07-09 10:20

    【北京】RT-Thread 嵌入式操作系統(tǒng)專業(yè)培訓(xùn)班,八月初火熱報名中! | 知行工坊

    深入內(nèi)核,精通驅(qū)動,掌握調(diào)試!RT-Thread官方在8月1日-8月3日傾力打造為期三天的嵌入式操作系統(tǒng)專業(yè)培訓(xùn)班,即將登陸北京!本次培訓(xùn)聚焦RT-Thread核心原理與實戰(zhàn)開發(fā),助您系統(tǒng)
    的頭像 發(fā)表于 07-03 18:03 ?1389次閱讀
    【北京】RT-Thread <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統(tǒng)</b>專業(yè)培訓(xùn)班,八月初火熱報名中! | 知行工坊

    Linux嵌入式和單片機嵌入式的區(qū)別?

    :使用Linux操作系統(tǒng),可以運行各種復(fù)雜的應(yīng)用程序和驅(qū)動程序。 4. 資源需求 : 單片機嵌入式 :對硬件資源的需求較低,通常只需要單片機芯片,內(nèi)存和存儲空間較小。 Lin
    發(fā)表于 06-20 09:46

    嵌入式開發(fā),如何選擇適合的系統(tǒng)?

    嵌入式ARM開發(fā)中,面對多種操作系統(tǒng)的選擇,如何做出最適合項目的決策?本文將為您梳理常見系統(tǒng)的特性,幫助您快速了解它們的優(yōu)缺點,以便更好地選擇適合的系統(tǒng)。引言在
    的頭像 發(fā)表于 05-20 11:32 ?1153次閱讀
    <b class='flag-5'>嵌入式</b>開發(fā),如何選擇適合的<b class='flag-5'>系統(tǒng)</b>?

    RT-Thread嵌入式操作系統(tǒng)專業(yè)培訓(xùn)班-深圳站重磅開啟!

    RT-Thread官方將在深圳舉辦為期三天的嵌入式操作系統(tǒng)專業(yè)培訓(xùn)班!本次培訓(xùn)將深入講解RT-Thread嵌入式實時操作系統(tǒng)的核心技術(shù)與實戰(zhàn)應(yīng)用,助力開發(fā)者快速掌握RTOS開發(fā)
    的頭像 發(fā)表于 04-11 18:18 ?848次閱讀
    RT-Thread<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統(tǒng)</b>專業(yè)培訓(xùn)班-深圳站重磅開啟!

    操作系統(tǒng)適配,飛凌嵌入式T527核心板打造高效開發(fā)新體驗

    飛凌嵌入式為基于全志T536處理器開發(fā)設(shè)計的FET527N-C核心板適配了全新升級的ForlinxDesktop22.04操作系統(tǒng),這舉措不僅能夠為用戶帶來了更加流暢、穩(wěn)定的操作體驗
    的頭像 發(fā)表于 03-20 14:33 ?1400次閱讀
    新<b class='flag-5'>操作系統(tǒng)</b>適配,飛凌<b class='flag-5'>嵌入式</b>T527核心板打造高效開發(fā)新體驗

    嵌入式系統(tǒng)開發(fā)圣經(jīng)【干貨】

    主管、系統(tǒng)設(shè)計分析人員及欲進(jìn)入該領(lǐng)域的工程師。是本開發(fā)嵌入式系統(tǒng)產(chǎn)品必備的入門圣經(jīng),進(jìn)入嵌入式系統(tǒng)
    發(fā)表于 03-12 13:58