在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何設計一個小型嵌入式操作系統

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:鄧佳佳 ? 2018-03-08 10:25 ? 次閱讀

前言

本文的目的是設計一個簡單的嵌入式操作系統,只實現一個基本任務調度器的功能。雖然不能稱為操作系統,但已體現了小型嵌入式操作系統的精髓,可以從中一窺操作系統的面目。

一、多任務機制

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

實時系統的特征是延時可預測,能夠在一個規定的時間內(通常是ms級別的)對某些信號做出反應。

二、任務的狀態

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

運行態:一個運行態的任務是一個正在使用CPU的任務。任何時刻有且只有一個運行著的任務。

就緒態:一個就緒態任務是可運行的,等待占有CPU的任務釋放CPU。

掛起態:某些條件不滿足而掛起不能運行的狀態。

三、如何轉化為就緒態

INT32U OSRdyTbl; /*就緒任務表*/上面定義一個32位變量,每一位代表一個任務,0表示掛起狀態,1表示就緒狀態。它記錄了各任務的就緒與否狀態,稱它為就緒表。OSRdyTbl定義為32位變量,對應32個任務。當然,定義為64位的話,便最多能支持64個任務。這樣,可以定義兩個宏,實現把任務的狀態變為就緒或掛起態。

/*在就緒表中登記就緒任務*/#define OSSetPrioRdy(prio) { OSRdyTbl |= 0x01<

/*從就緒表中刪除任務*/#define OSDelPrioRdy(prio) { OSRdyTbl &= ~(0x01<

任務之間互相獨立,不存在互相調用的關系。所有任務在邏輯上都是平等的。由于任務之間互相看不見,所以他們之間的信息傳輸就無法當面完成。這就需要各種通信機制如信號量,消息郵箱,隊列等來實現。

四、什么是搶占式調度?

調度的概念,通俗的說就是系統在多個任務中選擇合適的任務執行。系統如何知道何時該執行哪個任務?可以為每個任務安排一個唯一的優先級別,當同時有多個任務就緒時,優先運行優先級較高的任務。同時,任務的優先級也作為任務的唯一標識號。代碼中都是對標識號來完成對任務的操作的。

所謂“搶占式調度”是指:一旦就緒狀態中出現優先權更高的任務,便立即剝奪當前任務的運行權,把CPU分配給更高優先級的任務。這樣CPU總是執行處于就緒條件下優先級最高的任務。

五、多任務系統的時間管理

與人一樣,多任務系統也需要一個“心跳”來維持其正常運行,這個心跳叫做時鐘節拍,通常由定時器產生一個固定周期的中斷來充當。

OSTimeDly函數就是以時鐘節拍為基準來延時的(在時鐘的中斷服務函數中,依次對各個延時任務的延時節拍數減1。若發現某個任務的延時節拍數變為0,則把它從掛起態置為就緒態。)。這個函數完成功能很簡單,就是先掛起當起當前任務,設定其延時節拍數,然后進行任務切換,在指定的時鐘節拍數到來之后,將當前任務恢復為就緒狀態。任務必須通過OSTimeDly或OSTaskSuspend讓出CPU的使用權(延時或等待事件),使更低優先級任務有機會運行。

六、如何實現多任務?

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

TIPS:

如果一個任務正在運行某個公共函數時(如Printf), 被另一個高優先級的任務搶占,那么當這個高優先級的任務也調用同一個公共函數時,極有可能破壞原任務的數據。因為兩個任務可能共用一套數據。為了防止這種情況發生,常采用兩種措施:可重入設計和互斥調用。

可重入函數中所有的變量均為局部變量,局部變量在調用時臨時分配空間,所以不同的任務在不同的時刻調用該函數時,它們的同一個局部變量所分配的存儲空間并不相同(任務私有棧中),互不干擾。另外,如果可重入函數調用了其他函數,則這些被調用的函數也必須是可重入函數。

實現互斥(獨占)訪問的方法有關中斷,關調度,互斥信號量,計數信號量等。

6.1 一個任務如何擁有自己的程序代碼

對于如何實現多任務,首先是程序代碼,每個任務的程序代碼與函數一樣,與51的裸奔程序一樣,每個任務都是一個大循環。然后是數據存儲區,由于全局變量是系統共用的,各個任務共享,不是任務私有,所以這里的數據存儲區是指任務的私有變量,如何變成私有?局部變量也。編譯器是把局部變量保存在棧里的,所以好辦,只要任務有個私有的棧就行。

TIPS:臨界資源是一次僅允許一個任務使用的共享資源。每個任務中訪問臨界資源的那段程序稱為臨界區。

在多任務系統中,為保障數據的可靠性和完整性,共享資源要互斥(獨占)訪問,所以全局變量(只讀的除外)不能同時有多個任務訪問,即一個任務訪問的時候不能被其他任務打斷。共享資源是一種臨界資源。

6.2 一個任務如何擁有自己的堆棧、數據存儲區

私有棧的作用是存放局部變量,函數的參數,它是一個線性的空間,所以可以申請一個靜態數組,把棧頂指針SP指向棧的數組的首元素(遞增棧)或最后一個元素(遞減棧)。即可打造一個人工的棧出來。每個任務還要有記錄自己棧頂指針的變量,保存在任務控制塊(TCB)中。

什么是任務控制塊?

系統中的每個任務具有一個任務控制塊,任務控制塊記錄任務執行的環境,這里的任務控制塊比較簡單,只包含了任務的堆棧指針和任務延時節拍數。任務控制塊是任務的身份證。它把任務的程序與數據聯系起來,找到它就可以得到任務的所有資源。

6.3 一個任務如何擁有自己的CPU

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

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

創建一個任務。它接收三個參數,分別是任務的入口地址,任務堆棧的首地址和任務的優先級。調用本函數后,系統會根據用戶給出的參數初始化任務棧,并把棧頂指針保存到任務控制塊中,在任務就緒表標記該任務為就緒狀態。最后返回,這樣一個任務就創建成功了。

當一個任務將要運行時,便通過取得它的堆棧指針(保存在任務控制塊中)將這些寄存器出棧裝入CPU相應的位置即可。

6.4 如何實現搶占式調度?

基于任務優先級的搶占式調度,也就是最高優先級的任務一旦處于就緒狀態,則立即搶占正在運行的低優先級任務的處理器資源。為了保證CPU總是執行處于就緒條件下優先級最高的任務,每當任務狀態改變后,即判斷當前運行的任務是否是就緒任務中優先級最高的,否則進行任務切換。

任務狀態會在什么時候發生改變呢?有下面兩種情況:

1、高優先級的任務因為需要某種資源或延時,主動請求掛起,讓出處理器,此時將調度就緒狀態的低優先級任務獲得執行,這種調度稱為任務級的切換。如任務執行OSTimeDly()或OSTaskSuspend()把自身掛起就屬于這種。

2、高優先級的任務因為時鐘節拍到來,或在中斷處理結束后,內核發現更高優先級任務獲得了執行條件(如延時的時鐘到時)則在中斷后直接切換到更高優先級任務執行。這種調度也稱為中斷級的切換。

6.5 掛起/恢復任務

1 掛起任務

通過 OSTaskSuspend()可以主動掛起一個任務。OSTaskSuspend()會把任務從任務就緒表中移出,最后重新啟動系統調度。這個函數可以掛起任務本身也可以掛起其他任務。

2 恢復任務(OSTaskResume())

可以讓被 OSTaskSuspend 或 OSTimeDly 掛起的任務恢復就緒態,然后進行任務調度。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式設計
    +關注

    關注

    0

    文章

    392

    瀏覽量

    21353

原文標題:如何設計嵌入式系統?帶你理解一個小型嵌入式操作系統的精髓

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    小型嵌入式操作系統中斷管理的實現

    小型嵌入式操作系統中斷管理的實現
    發表于 04-22 12:57

    如何設計嵌入式系統?帶你理解小型嵌入式操作系統的精髓

    這個是在網上看到的篇文檔,作者的目的是設計簡單的嵌入式操作系統,只實現
    發表于 03-13 11:29

    基于Linux的嵌入式操作系統

    嵌入式操作系統一嵌入式操作系統概述1.1 嵌入式操作系統的特點1.2
    發表于 11-08 09:05

    嵌入式實時操作系統教程

    嵌入式實時操作系統教程:以VRTX為對象詳細介紹了嵌入式實時操作系統的原理和應用,特別是第部分關于嵌入
    發表于 04-19 21:55 ?44次下載
    <b class='flag-5'>嵌入式</b>實時<b class='flag-5'>操作系統</b>教程

    嵌入式操作系統-李春杰

    主要內容: 嵌入式操作系統概述 典型嵌入式操作系統介紹 嵌入式操作系統選型
    發表于 01-04 18:30 ?0次下載

    嵌入式操作系統是什么_嵌入式操作系統有哪些

    嵌入式操作系統(Embedded OperatingSystem,簡稱:EOS)是指用于嵌入式系統操作系統
    發表于 04-08 14:36 ?2.1w次閱讀

    嵌入式操作系統應該怎樣來定義

    嵌入式操作系統種支持嵌入式系統應用的操作系統軟件,它是
    發表于 09-11 16:07 ?1703次閱讀

    小型嵌入式操作系統設計

    最后來看看任務是如何“擁有”自己的CPU 的。只有 CPU,各個任務共享,輪流使用。如何才能實現?我們先來看看中斷的過程,當中斷來臨時,CPU 把當前程序的運行地址,寄存器等現場數據保存起來
    的頭像 發表于 01-29 10:09 ?1238次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>小型</b><b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>設計

    小型嵌入式操作系統設計:精髓都有了!

    上面定義 32 位變量,每位代表任務,0 表示掛起狀態,1 表示就緒狀態。它記錄了各任務的就緒與否狀態,稱它為就緒表。OSRdyT
    的頭像 發表于 08-05 17:06 ?1804次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>小型</b><b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>設計:精髓都有了!

    設計簡單的嵌入式系統

    這個是在網上看到的篇文檔,作者的目的是設計簡單的嵌入式操作系統,只實現
    發表于 08-25 11:13 ?8081次閱讀
    設計<b class='flag-5'>一</b><b class='flag-5'>個</b>簡單的<b class='flag-5'>嵌入式</b><b class='flag-5'>系統</b>

    嵌入式操作系統如何應用_嵌入式操作系統的組成

    本文首先介紹了入操作系統的特點,其次闡述了嵌入式操作系統的應用,最后介紹了嵌入式操作系統的組成
    發表于 09-01 16:36 ?3641次閱讀

    什么是嵌入式操作系統 常見的嵌入式系統有哪些

    、INTEGRITY、OSE、C ExecuTIve  什么是嵌入式操作系統 嵌入式操作系統種支持
    發表于 10-21 09:36 ?27次下載
    什么是<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b> 常見的<b class='flag-5'>嵌入式</b><b class='flag-5'>系統</b>有哪些

    嵌入式操作系統

    是:構建易于編程的虛擬平臺; 系統資源的管理者。2、嵌入式操作系統的分類1. 按系統類型分商
    發表于 10-21 11:21 ?10次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>

    嵌入式操作系統

    嵌入式操作系統一嵌入式操作系統概述1.1 嵌入式操作系統的特點1.2
    發表于 11-03 18:36 ?46次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>

    什么是嵌入式操作系統

    嵌入式操作系統種專門的操作系統(OS),旨在為非計算機的設備執行特定任務。嵌入式操作系統的主
    的頭像 發表于 12-23 15:33 ?7900次閱讀
    什么是<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>?
    主站蜘蛛池模板: 美女被曹 | 天天干天天在线 | 国产女人伦码一区二区三区不卡 | 男男憋尿play按小腹 | 国产99久久九九精品免费 | 性xxxxfreexxxxx国产 | 韩国三级在线视频 | 免费看啪 | 亚洲五月激情综合图片区 | 国产精品天天爽夜夜欢张柏芝 | 中文字幕一区二区三区免费看 | 成年人电影黄色 | 91美女在线播放 | 亚洲一区二区三区免费在线观看 | 亚洲国产视频网 | 亚洲一本之道在线观看不卡 | 青草国产在线视频 | 色天使亚洲综合在线观看 | 中文字幕一精品亚洲无线一区 | 国产一级特黄全黄毛片 | 香蕉爱爱网 | 亚洲天堂视频在线观看免费 | 国产成人一区二区在线不卡 | 四虎成人欧美精品在永久在线 | 色视频在线观看在线播放 | 日韩综合图区 | 欧美成人免费网站 | 五月婷婷综合激情网 | 日韩三级小视频 | 中文一区二区在线观看 | 欧美一级日韩一级亚洲一级 | 国产黄视频在线观看 | 一级久久久 | 午夜毛片不卡高清免费 | 婷婷亚洲综合五月天在线 | 婷婷综合久久中文字幕 | 国产香蕉免费精品视频 | 天堂影 | 韩国三级久久精品 | 亚洲最大成人网色 | 98色花堂永久地址国产精品 |