嵌入式μC/OS-II系統中基於ECB基本存儲單元實現信號量管理的設計

2020-12-18 電子發燒友

嵌入式μC/OS-II系統中基於ECB基本存儲單元實現信號量管理的設計

李巖;谷萍萍 發表於 2020-03-10 10:25:12

隨著嵌入式技術的發展,實時作業系統RTOS(Real Time Operating System)被越來越多地應用在嵌入式系統中,但是對現有基於軟體實現的RTOS,單純依靠改進調度算法已經不能使系統的實時性有很大提高。為提高系統的響應能力,國內外一些研究機構提出RTOS硬化的方法,並開始做這方面的研究工作。目前,軟體硬化常用的有兩種方法:(1)微程序方式,特點是成本較低,方便靈活;(2)組合邏輯方式,特點是速度快、可靠性高,隨著大規模集成電路的發展,這種方式逐漸顯示出優越性。信號量管理是RTOS中頻繁運行的程序段之一,如果將這一部分用硬體實現,對提高機器的速度將有很明顯的效果。本文採用組合邏輯方式參照μC/OS-II將信號量管理及ECB管理硬化到一片晶片上,作為獨立的模塊與處理器並行工作。

1、信號量管理的工作原理

μC/OS-II中信號量主要數據結構由兩部分組成:(1)信號量的計數值Cnt。當數值為正時用於記錄可使用的資源數,當數值為負,其絕對值表示等待當前信號量的任務個數;(2)等待該信號量的任務列表。信號量的基本數據結構需要申請一個ECB來存儲。一個任務或ISR可以通過ECB向另外的任務發信號,一個任務可以等待另一個任務或中斷服務子程序給它發送信號,多個任務可同時等待同一個事件的發生。當事件發生後,等待該事件的優先級最高的任務進入就緒狀態,觸發一次任務調度。任務或者中斷服務子程序都可以給ECB發信號,對ECB進行操作。

信號量管理的工作原理框圖如圖1所示。信號量管理模塊以及事件控制塊管理都是獨立於CPU的邏輯結構,都可以直接從數據總線上獲得數據信息進行處理,在信號量管理模塊與ECB的存儲模塊間建立一條數據通路,在不增加總線負擔的情況下加快二者間的通信。這些硬體邏輯獨立於CPU工作,減少了CPU的工作,從而提高系統的響應能力。

2、 信號量管理的硬體設計與實現

2.1 ECB的設計與實現

ECB是實現信號量管理的基本數據結構,因此在設計實現信號量管理之前,要先完成ECB管理的設計與實現。本系統中ECB的結構參照μC/OS-II中ECB的結構設計。每個ECB存儲單元包含一個EventType(事件類型),用於標記當前ECB被分配給信號量、互斥型信號量、郵箱還是消息隊列;當一個ECB被分配給信號量時,Cnt做為信號量的計數器;ECB中的等待表lut用於存儲等待當前信號量任務的優先級(μC/OS-II中沒有兩個任務有相同的優先級)。

ECB中等待表硬體實現的結構示意圖如圖2所示。等待表的結構類似一個8行8列的矩陣,存儲單元編號從00~77。當一個任務在申請當前信號量而沒有獲得時,應將當前任務設置為等待狀態,令Wr有效,以申請該信號量任務的優先級為地址,進行解碼,選通相應單元後再進行寫1操作。例如,申請該信號量的任務優先級Sid為111111時,對其進行解碼,高三位行地址解碼為10000000,低三位列地址解碼為10000000,選中77單元向其寫入1,則優先級為111111的任務進入等待狀態。若要將一個處於等待表中的任務刪除,令De有效,同樣,根據地址線選通某一存儲單元,向單元內寫0,從而刪除某一處於等待狀態的任務。在控制電路中設置EventGrp 8位寄存器,用於記錄當前各行中是否有等待任務;如圖2所示,第i行中某一位置為1,EventGrp(i)=1,圖中狀態EventGrp(7)=1、EventGrp(6)=1、EventGrp(0)=0。Rd有效時,控制電路根據EventGrp採用一定算法生成優先級的高三位;根據EventGrp讀出某行後生成優先級低三位;下一時鐘送出最高優先級。以上為對等待表進行基本讀寫操作的過程。

該硬體系統中ECB基本存儲單元通過調用系統的IP核來實現,根據存儲數據的不同,採用不同的IP核;多個基本單元通過一個上層文件生成一個ECB單元,每個單元再作為一個基本器件用於實現整個ECB的存儲體。通過地址的解碼選通ECB單元,根據控制信號對數據做讀寫操作。

2.2 創建/刪除一個信號量

ECB是公共數據結構,在傳統的作業系統中創建一個信號量時,首先需要申請一個ECB,初始化後才可以對這個信號量進行P/V等操作;在刪除一個信號量後,要對信號量佔用的ECB進行釋放。創建信號量時,信號量管理模塊首先要申請一個空ECB,查找ECB的整個存儲體判斷是否有空餘的ECB。如果沒有空餘ECB,則信號量管理模塊將獲得一個申請失敗信號;否則將獲得一個空ECB的地址,並將其返回給創建該信號量的任務;再根據地址初始化ECB。如果用硬體實現信號量管理後,按照以上過程進行操作會浪費很多時鐘,數據在模塊間來回傳送增加通信次數,必然降低系統的執行速度。針對這個問題,提出了在信號量管理模塊中設置一個用於記錄ECB使用情況的映射表,如圖3所示。為方便討論,假設系統中ECB有64個(可以根據系統中ECB的個數來改變表的大小),表的每個位置對應一個ECB,當某一位置為0時表示該位置對應的ECB空閒,為1時表示該位置對應的ECB被佔用。如圖3所示,第1行、第8列為1,表示偏移地址為000111的ECB被佔用;第2行、第2 列為1,偏移地址為010010的ECB被佔用。

在創建一個信號量時,查找ECB映射表,判斷是否有為0的位置。如果沒有則返回申請失敗;否則尋找一個為0的位置,生成ECB的地址,返回給創建該信號量的任務。在映射表中相應位置寫1表明該ECB已經被佔用,下一時鐘對申請到的ECB進行初始化,寫入信號量初始值。在刪除一個信號量時,首先根據信號量的ECB地址查詢映射表中對應位置是否為0,如果為0,則表示該信號量已經被其他任務刪除,返回刪除錯誤;否則清除該信號量在映射表中的記錄,通知ECB管理模塊將等待該信號的所有任務置為就緒態,觸發一次任務調度,清除ECB中的該信號量的所有信息。以上過程中不需要頻繁地去ECB管理模塊中進行整體查詢,因此節省了大量的通信時間。

2.3 申請/釋放一個信號量(P/V操作)

信號量管理中的主要操作就是P/V操作,P/V操作實現的RTL圖如圖4所示。

(1)P操作(申請某個信號量)。令pend_sem有效,首先應判斷申請信號量的任務是否為中斷服務程序(在μC/OS-II中,中斷服務程序不允許申請一個信號量),如果是則返回申請錯誤信息(pend_err為高),否則進行以下操作:令read_cnt有效去ECB管理模塊讀Cnt值;讀回後判斷Cnt的值。如果Cnt》0,當前申請任務獲得該信號量,任務繼續執行,返回申請成功信號pend_err為低;否則pend_err為高阻,根據申請類型Pend_type(申請類型在μC/OS-II中分為有等待申請和無等待申請)來決定是否修改Cnt值,是否將申請信號量的任務置為等待態。

(2)V操作。令post_sem有效,通過硬體電路使read_cnt有效,同時給出信號量的ECB地址,下一時鐘讀出Cnt值,並判斷;如果Cnt》0則表示沒有任務等待當前信號量,修改Cnt值;如果Cnt《0則表示當前有任務等待該信號量,修改Cnt值,令select_h有效,從ECB任務等待表中找出優先級最高的任務,通知任務管理器將該任務置為就緒態,觸發一次任務調度。 3 功能仿真

為驗證設計對系統性能的影響,採用ISE 8.2軟體對各個模塊進行時序仿真。P/V操作仿真結果如圖5所示。P/V操作需要在兩個模塊之間進行讀寫數據,操作過程中,P/V信號始終有效。

(1)pend_sem有效(P操作)。申請信號量任務的優先級為01,申請信號量的地址為05。pend_sem有效,令read_cnt為高,根據地址pend_addr讀當前信號量的值Cnt,下一個時鐘返回數值Cnt_in為0002,大於0;任務獲得信號量繼續執行,wr_cnt為高,Cnt值進行減1操作後送Cnt_out寫回ECB。

(2)post_sem有效(V操作)。根據地址讀Cnt值,Cnt值為FFFE《0(Cnt值以補碼形式存儲)。下一個時鐘Cnt進行加1操作後寫回ECB,同時Select_h為高,從等待該信號量的任務列表中選擇出優先級最高的任務設置為就緒態,觸發一次任務調度。

(3)申請一個信號量。申請信號量任務的優先級為03,申請的信號量的地址為09。如果下一個時鐘讀回的Cnt值為FFFD《0,並且申請類型為高(有等待申請),則修改Cnt值寫回,令wr_sid為高,將當前申請任務的優先級送pend_prio_out寫入等待該信號的任務列表中。

(4)申請一個信號量,讀回的Cnt值為FFFA《0,但當前申請類型為低(無等待申請),不進行任何操作,返回申請失敗,通知任務管理器將當前任務阻塞。

用戶程序在創建、刪除一個信號量以及申請某類共享資源進行P/V操作時,用軟體實現信號量管理中,一般先從用戶態轉到系統態,然後進行基本數據的查詢、讀出、比較、判斷等,再轉相應的程序入口,最後還要從系統態轉回用戶態。而用硬體實現信號量管理後進行以上操作只需一條讀或寫指令,並且這條指令在用軟體實現的信號量管理中也是必須的,其他操作都由硬體邏輯來實現,簡化了操作過程。因此,硬化信號量管理後對整個機器速度的提高是非常明顯的,特別是對資源種類多、數量大的計算機系統,速度的提高就會更加明顯。另一方面,由於硬體的可靠性遠超過軟體的可靠性,所以硬化後可提高RTOS的可靠性。

單片機處理器能力的提高和應用程式功能的複雜化、精確化,迫使應用程式劃分為多個重要性不同的任務,在各任務間優化地分配CPU時間和系統資源,同時還要保證實時性。靠用戶自己編寫一個實現上述功能的內核一般是不現實的,而這種需求又是普遍的。在這種形勢之下,由專業人員編寫的、滿足大多數用戶需要的高性能RTOS內核就是一種必然結果了。對程序實時性和可靠性要求的提高也是RTOS發展的一個原因。此外,單片機系統軟體開發日趨工程化,產品進入市場時間不斷縮短,也迫使管理人員尋找一種有利於程序繼承性、標準化、多人並行開發的管理方式。從長遠的意義上來講,RTOS的推廣能夠帶來嵌入式軟體工業更有效、更專業化的分工,減少社會重複勞動、提高勞動生產率。

責任編輯:gt

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • μClinux、μC/OS-II、eCos、FreeRTOS和djyos作業系統的特點及不足
    同標準的Linux相比,μClinux的內核非常小,但是它仍然繼承了Linux作業系統的主要特性,包括良好的穩定性和移植性、強大的網絡功能、出色的文件系統支持、標準豐富的API,以及TCP/IP網絡協議等。因為沒有MMU內存管理單元,所以其多任務的實現需要一定技巧。
  • 基於STM32的嵌入式測控系統設計與實現
    測控系統是水動力實驗中的重要測試設備。在實驗中有壓力、拉力、加速度等物理量通過傳感器轉換成電壓值,需要準確記錄。雖然實驗模型有很多種,但是共用傳感器及測控系統,因此對測控系統的通用性和用戶界面友好性提出了要求。本文採用嵌入式架構設計了測控系統。
  • 基於Nios II自助點菜系統的μC/GUI應用
    μC/GUI是一種用於嵌入式應用的Windows風格圖形支持軟體,它為任何使用圖形LCD的應用提供一個有效的不依賴於處理器和LCD控制器的圖形用戶接口,工作在單任務或多任務系統環境下,適用於使用任何LCD控制和任何CPU尺寸的物理或虛擬顯示。因此,掌握μC/GUI在嵌入式系統中的應用極為重要。移植μC/GUI到Nios II嵌入式軟核處理器[1]成了最佳選擇。
  • 基於NiosⅡ嵌入式平臺實現μC/GUI在可攜式醫療監護儀上的移植
    為了使可攜式心電監護儀實現友好的人機互動和更加方便的顯示,這裡提出一種GUI界面系統設計,就 是在基於NiosⅡ處理器的嵌入式平臺上實現μC/GUI的移植,使之實現系統功能。由於μC/GUI採用分層結構,即具有驅動接口層和應用層,因此可方便地移植到各種 CPU下使用。μC/GUI對各類圖像LCD顯示器具有良好的支持,並且有常見的2D圖形庫和窗口管理功能,而且消耗較少的系統資源,佔用RAM和ROM 的空間很小。在典型的應用中,μC/GUI需要的資源如表1所示。
  • 基於嵌入式處理器S3C44B0X的μC/GUI設計
    引言B0X 是三星公司針對嵌入式系統推出高性價比微處理器,它是基於ARM7TDMI內核的16/32位RISC處理器,工作主頻為66MHz。人機界面(GUI)是現代智能電子設備必不可少的重要組成部分,近年來隨著硬體的發展不斷進步,目前基於嵌入式的μC/GUI已經在智能儀器、工業領域等發揮了重要的作用[1-3]。
  • μC/GUI在嵌入式智能監控系統中的移植研究與應用
    實驗結果表明,μC/GUI成功移植到NiosⅡ嵌入式開發平臺中,可以實現μC/GUI文字顯示、繪圖以及窗口管理等功能,並可以外接任何具有VGA接口的LCD顯示器。關鍵詞:人機互動;μC/GUI;移植;NiosⅡ0 引言 人機互動是智能化嵌入式產品一項重要功能,在設計智能監控系統時人機互動需要界面設計軟體,常用的圖形界面軟體有MiniGUI,QT/Embedded,OpenGUI等。Altera公司NiosⅡ已經集成了μC/OS-Ⅱ系統。μC/OS-Ⅱ是一個實時多任務內核,不具有現代作業系統的線程,上述GUI不能方便的運行。
  • 基於通信晶片SI4432和μC/OS-II作業系統實現無線通信系統的設計
    基於通信晶片SI4432和μC/OS-II作業系統實現無線通信系統的設計 李鵬飛 發表於 2020-03-06 09:35:10 引言 隨著信息技術的飛速發展
  • 一種基於μC/OS-III及STM32的多功能控制器
    電動軌道車控制系統一般分為多個子系統,子系統受一個主控器控制。這樣的結構設計繁瑣,編程複雜。採用μC/OS-III作業系統、STM32F103RC微控制器、12864液晶屏、PVC按鍵、無線串口模塊、鋰電池等實現具有人機界面、無線串口功能的總線主控器。
  • 基於ARM7系列晶片嵌入式平臺上實現的設計方案
    在嵌入式系統設計過程中,系統的掉電保護越來越受到重視整個掉電保護實現的基本思路是:產生掉電信號,捕捉掉電信號和處理掉電信號。重點介紹這個過程的具體實現。系統防掉電設計的目的是:採用一種機制,使得系統在意外失去供電的情況下,可以保證系統運行狀態的確定性以及記錄數據的完整性;當系統供電恢復後,現場數據可以及時恢復,避免應用系統產生混亂。
  • 嵌入式作業系統中USB雙向通信的設計與實現
    3USB雙向通信的設計與實現  本文USB雙向通信在基本傳輸方式上採用USB塊傳輸[1]。他由USB初始化、USB中斷處理、控制傳輸和塊傳輸幾部分組成[2]。在實現雙向通信上,具體通信機制是:嵌入式應用程式通過讀寫循環隊列和信號量狀態與USB 硬體模塊中的OUT 和IN FIFO相互通信,而USB下位機與上位機(PC)的讀寫通信則通過上位機對控制包的讀寫來實現,最後通過循環隊列、信號量、控制包3者結合達到USB雙向通信的目的。
  • 基於μCLinux的USB驅動程序實現
    摘 要:μClinux是一種面向嵌入式微處理器的微型作業系統,已經在嵌入式作業系統中佔有重要地位。在此介紹FTDI公司的USB晶片FT245BL的主要性能、工作原理,並將其應用在Blackfin ADSP-BF533微處理器的嵌入式開發平臺上,說明在μClinux下編寫與加載USB接口晶片FT245BL的驅動程序方法,實現了DSP主板的 USB埠通信。
  • 基於RTOS的嵌入式系統在Nexar中的實現
    構建基於RTOS51作業系統的嵌入式軟體工程本文引用地址:http://www.eepw.com.cn/article/151186.htm  在Nexar中創建基於RTOS的嵌入式系統工程,
  • 基於32位高性能數位訊號處理器實現飛機測控終端系統的設計
    本實驗室對先進飛機配電系統進行了多年研究,設計了包括電源系統處理機、負載管理中心、匯流條控制器及負載仿真器四部分的飛機配電地面實驗系統。本文所要介紹的飛機測控終端是適用於匯流條控制器和負載管理中心的通用測控終端,其主要實現對負載狀態的監測並依據電源系統處理機發布的控制命令實現對負載的控制。下面將從硬體及軟體兩方面介紹測控終端的實現。
  • STM32平臺的μC/GUI移植與圖形界面設計
    摘要:μC/GUI是一種專為嵌入式應用設計的通用圖形接口軟體。本文詳細介紹了μC/GUI的結構框架和基於STM32平臺的μC/OS-II上的μC/GUI移植過程,並在此基礎上進行圖形界面設計;闡述了μC/GUI的窗口管理機制,提出了實現μC/GUI中文小型字庫的兩種方法並採用存儲設備解決了圖形顯示的閃爍問題。
  • 基於Davicn的嵌入式網絡智能視頻監控系統設計
    與非智能化得視頻監控相比,智能視覺監控能實現主動監控,採用智能算法對監控到的畫面進行智能分析,進而進行相應的動作。智能視頻監控有基於PC機的智能視頻監控系統和嵌入式的智能視頻監控系統。兩者相比,嵌入式的智能視頻監控系統具有便攜、低功耗、應用領域廣泛等優勢,隨著嵌入式智能視頻監控系統的大量應用、批量生產,其成本優勢也將得到體現。嵌入式智能監控產品已是監控市場發展趨勢。
  • 基於PGL22G的物聯網Sensor HUB設計
    隨後,基於OpenMIPS架構進行μC/OS系統的移植,在μC/OS系統下通過GPIO口進行數據採集,並將採集到的存儲至EEPROM中,可通過電腦查詢EEPROM存儲的數據。通過相應的通信模塊進行傳感器數據的發送。發送的數據可以在相應微信公眾號中實時查看。
  • 基於嵌入式技術的表面肌電信號採集儀設計
    這裡涉及到的可攜式肌電採集儀小巧方便,結構簡單,性能穩定,可以隨身攜帶,可由電池供電,一般用於運動員的訓練中。本文主要介紹表面肌電信號採集儀的軟硬體設計與實現。1 硬體系統總體設計 該系統的控制核心選擇Atmel公司的AT91SAM7SE512處理器。AT91SAM7SE512是一款32位嵌入式微處理器,可針對交互式終端類和工業控制類等多種嵌入式應用。
  • 基於EM8620的IPTV機頂盒設計
    1.3.9 uart 雖然iptv具有雙向業務通道,能夠採用認證的方式實現節目的版權保護,但是考慮到目前數位電視中的條件接收到多採用智慧卡方式,為保護系統的兼容性,此處仍然設計有基於uart的智慧卡通信模塊,用於支持使用智慧卡進行密鑰解密的工作方式。 2 軟體設計 軟體主要包括嵌入式的作業系統和各類驅動及應用軟體。
  • 基於VIM的嵌入式存儲控制器的研究與實現
    以PIM技術為基礎,用向量部件作為協處理器構成的Vector In Memory(VIM)體系結構,可充分發揮PIM高帶寬、低延遲、低功耗的特點,開發數據級並行,是解決存儲系統性能瓶頸的有效途徑。本文具體闡述VIM體系結構中影響存儲系統性能的關鍵部件嵌入式存儲控制器的設計與實現。
  • 基於MySQL資料庫應用開發實現嵌入式數控系統的設計
    基於MySQL資料庫應用開發實現嵌入式數控系統的設計 鄔依林 , 黃瑛 發表於 2020-12-02 10:07:37 1 引言 本文所論述是數控系統大課題中人機互動的外圍部分子課題中的資料庫開發應用