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

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

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

如何將RTOS添加到ZYNQ SoC設(shè)計(jì)中

電子工程師 ? 來源:網(wǎng)絡(luò)整理 ? 2018-02-15 05:41 ? 次閱讀

在尋求獲得來自處理系統(tǒng)內(nèi)的賽靈思Zynq?-7000全可編程SoC的最大利益,操作系統(tǒng)將讓你更不是一個(gè)簡單的裸機(jī)解決方案。任何開發(fā)ZYNQ SoC設(shè)計(jì)有大量的操作系統(tǒng)可供選擇,并根據(jù)最終應(yīng)用程序,你可以選擇一個(gè)實(shí)時(shí)版本。一個(gè)RTOS是您最好的選擇,如果你是在工業(yè),軍事,航空航天或在響應(yīng)時(shí)間和可靠的性能要求,以防止生命或傷亡的,或者實(shí)現(xiàn)嚴(yán)格的績效目標(biāo)等具有挑戰(zhàn)性的環(huán)境中使用的SoC ZYNQ。

為了得到一個(gè)感覺如何最好地實(shí)時(shí)操作系統(tǒng)添加到我們的ZYNQ SoC系統(tǒng)中,我們將使用最流行的實(shí)時(shí)操作系統(tǒng)之一左右,在μC/ OS-III Micrium的。這RTOS或更早的版本中它已經(jīng)用在了一些非常令人興奮的系統(tǒng),包括火星的好奇心流動(dòng)站。目前最新的版本是在被認(rèn)證為MISRA-C,DO178B A級(jí),SIL3 / 4和IEC61508標(biāo)準(zhǔn),這意味著它應(yīng)該有一個(gè)廣泛的吸引力許多ZYNQ SoC的用戶的過程。但在此之前進(jìn)入的實(shí)施細(xì)則,這是有幫助的審查實(shí)時(shí)操作系統(tǒng)的基礎(chǔ)知識(shí)。

什么是實(shí)時(shí)操作系統(tǒng)?

是什么讓一個(gè)實(shí)時(shí)操作系統(tǒng)與標(biāo)準(zhǔn)操作系統(tǒng)有何不同?井,一個(gè)實(shí)時(shí)操作系統(tǒng)是確定性的,這意味著該系統(tǒng)限定的期限內(nèi)進(jìn)行響應(yīng)。這個(gè)決定可以是一個(gè)重要的原因,例如,如果最終應(yīng)用正在監(jiān)控工業(yè)過程,并具有以響應(yīng)事件在指定的時(shí)間周期內(nèi),如將是一種用于工業(yè)控制系統(tǒng)中的情況。

RTOS進(jìn)一步細(xì)分基于它們來滿足這些最后期限的能力。這種分類產(chǎn)生了三種不同類型的RTOS,其中每一個(gè)不同的地址的最后期限的概念。在硬的RTOS,缺少一個(gè)期限被看作是一個(gè)系統(tǒng)故障。這不是為公司RTOS,其中偶爾錯(cuò)過截止時(shí)間是可以接受的情況。在軟的RTOS,同時(shí),缺少一個(gè)期限減少的結(jié)果的有效性,但該系統(tǒng)作為一個(gè)整體能容忍此。

實(shí)時(shí)操作系統(tǒng)圍繞運(yùn)行的任務(wù)(有時(shí)稱為工藝),其每一個(gè)執(zhí)行所需功能的概念。例如,一個(gè)任務(wù)可能讀取數(shù)據(jù)通過接口或?qū)@些數(shù)據(jù)進(jìn)行操作。一個(gè)簡單的系統(tǒng)可以采用只有一個(gè)任務(wù),但它更可能為多個(gè)任務(wù),以在處理器上在任一時(shí)刻運(yùn)行。這些任務(wù)之間的切換被稱為“上下文切換”,它要求與每個(gè)任務(wù)相關(guān)聯(lián)的處理器的狀態(tài)被存儲(chǔ)和添加到任務(wù)堆棧中。

確定的方法,其任務(wù)是下一個(gè)要運(yùn)行是由內(nèi)核(管理從軟件輸入/輸出請求,并將它們轉(zhuǎn)換成用于所述中央處理單元的數(shù)據(jù)處理的指令和在所述處理器的功能元件的RTOS的核心)來控制。任務(wù)調(diào)度可以是復(fù)雜的,特別是如果我們希望避免死鎖的狀態(tài),其中兩個(gè)或多個(gè)任務(wù)鎖定彼此出來。的兩個(gè)基本方法是時(shí)間共享和事件驅(qū)動(dòng)的。分時(shí),每個(gè)任務(wù)獲取處理器上的專用時(shí)隙。更高優(yōu)先級(jí)的任務(wù)可以被分配多個(gè)時(shí)隙。此時(shí)間片是通過常規(guī)的中斷或定時(shí)器控制,并且通常被稱為“round-robin調(diào)度”。隨著一個(gè)事件驅(qū)動(dòng)的溶液,任務(wù)只切換,當(dāng)一個(gè)具有較高優(yōu)先級(jí)的運(yùn)行必需的。這通常被稱為“搶占式調(diào)度”。

死鎖,資源共享和饑餓

當(dāng)兩個(gè)或多個(gè)進(jìn)程需要使用相同的資源,如UARTADCDAC-它有可能為他們的同時(shí)請求該資源。在這種情況下,訪問需要為了防止?fàn)幱帽豢刂啤_@是如何管理是很重要的。如果沒有正確的管理,問題,如“死鎖”或“饑餓”可能發(fā)生,從而導(dǎo)致系統(tǒng)故障。

死鎖當(dāng)一個(gè)進(jìn)程持有一個(gè)資源而無法釋放它發(fā)生,因?yàn)樗菬o法完成的任務(wù)。它要求當(dāng)前正由另一個(gè)過程中的另一個(gè)的資源。由于該系統(tǒng)將保持在該狀態(tài)下無限期地,該應(yīng)用程序被認(rèn)為是僵持。你可以想像,僵局是一個(gè)實(shí)時(shí)操作系統(tǒng)發(fā)現(xiàn)自己在一個(gè)糟糕的情況。

發(fā)生饑荒時(shí),一個(gè)進(jìn)程無法運(yùn)行,因?yàn)樗枰馁Y源總是分配給另一個(gè)進(jìn)程。

這可能不會(huì)令你感到驚訝地聽到,已經(jīng)出現(xiàn)了很多東西寫就這些問題,多年來,有很多提出的解決方案,如德克爾的算法,一個(gè)經(jīng)典的修復(fù)程序并發(fā)編程的互斥問題。最常用的方法來處理這些情況下是信號(hào)量,這通常是兩種類型的二進(jìn)制信號(hào)和計(jì)數(shù)信號(hào)量的。

一般地,每個(gè)資源有分配給它的一個(gè)二進(jìn)制信號(hào)。一個(gè)請求進(jìn)程將等待資源執(zhí)行之前變得可用。一旦任務(wù)完成,請求進(jìn)程將釋放資源。這些信號(hào)量通常被稱為WAIT和SIGNAL操作。一個(gè)進(jìn)程將等待一個(gè)信號(hào)量。如果資源是自由的,該過程將被考慮到資源的控制,它會(huì)運(yùn)行,直到完成,此時(shí)它會(huì)SIGNAL完成。然而,如果當(dāng)處理等待對信號(hào)執(zhí)行的資源已被占用,則該過程將被掛起,直到資源變得自由。這可以盡快當(dāng)前正在執(zhí)行的處理結(jié)束發(fā)生,但有可能是一個(gè)較長的等待,如果這個(gè)過程是由較高優(yōu)先級(jí)的一個(gè)進(jìn)程搶占。一類特殊的名為互斥體(從術(shù)語“互斥”派生)二進(jìn)制信號(hào)量經(jīng)常被用來防止優(yōu)先級(jí)反轉(zhuǎn)。

計(jì)數(shù)信號(hào)以同樣的方式作為二進(jìn)制信號(hào)量的工作,但它們被使用時(shí),一個(gè)特定類型的資源的一個(gè)以上的實(shí)例是可用的(例如,數(shù)據(jù)存儲(chǔ))。由于每個(gè)資源被分配給一個(gè)過程,計(jì)數(shù)被減小,以顯示剩余的可用資源的數(shù)量。當(dāng)計(jì)數(shù)到達(dá)零,有沒有更多的可用資源,并且請求進(jìn)程將被掛起,直到資源之一被釋放。

它往往是必要的過程來與彼此通信。有多種方法可以采用,這是最簡單的是,如上所述,以使用一個(gè)數(shù)據(jù)存儲(chǔ)和信號(hào)。更復(fù)雜的技術(shù)包括消息隊(duì)列。有了消息隊(duì)列,當(dāng)一個(gè)進(jìn)程希望將信息發(fā)送到另一個(gè)進(jìn)程,它發(fā)布消息隊(duì)列。當(dāng)一個(gè)進(jìn)程希望從一個(gè)隊(duì)列中接收消息時(shí),它會(huì)掛起隊(duì)列。因此,消息隊(duì)列工作就像一個(gè)FIFO(先入先出)存儲(chǔ)器。

在μC/ OS-III操作系統(tǒng)

Micrium的μC/ OS-III是一個(gè)搶占式RTOS,這意味著它會(huì)一直運(yùn)行具有最高優(yōu)先級(jí)的準(zhǔn)備執(zhí)行任務(wù)。在將其加入ZYNQ SoC系統(tǒng)設(shè)計(jì)的第一步是從Micrium的網(wǎng)站下載了μC/ OS-III的RTOS。一旦你這樣做,安裝非常簡單。你只需要你安裝的Xilinx提取下您的計(jì)算機(jī)上的幾個(gè)ZIP文件到正確的文件夾(目錄)。

請確保您提取名為Zynq-7000-ucosiii-bsp.zip ZIP文件到您的 ISE_DS EDK 軟件 lib目錄 BSP 文件夾中。你會(huì)看到一些其他的操作系統(tǒng)這個(gè)文件夾下,包括獨(dú)立和xilkernel的。接下來,提取名為Zynq-7000-ucosiii-demo.zip ZIP文件到您的 ISE_DS EDK 軟件 lib目錄 sw_apps 文件夾,如圖1。再次,你會(huì)看到一些其他的應(yīng)用演示中此文件夾。

圖1:顯示演示文件的位置的目錄結(jié)構(gòu)

無需安裝這兩套文件,我們準(zhǔn)備開始軟件開發(fā)工具包(SDK)中創(chuàng)建我們的項(xiàng)目。我們將使用之前創(chuàng)建相同的基本硬件,但我們需要一個(gè)新的應(yīng)用程序和板級(jí)支持包(BSP),因?yàn)槲覀兿Mú僮飨到y(tǒng)。

在SDK中,關(guān)閉所有打開的項(xiàng)目,除了基本硬件設(shè)計(jì)。接下來,選擇文件>新建>應(yīng)用程序項(xiàng)目的選擇,給新的項(xiàng)目名稱并選擇操作系統(tǒng)μC/ OS-III(見圖2)。然后選擇μC/ OS-III的演示應(yīng)用程序(見圖3)

圖2:選擇操作系統(tǒng)

圖3:選擇μCOS-III演示

當(dāng)你快樂時(shí),單擊Finish按鈕。應(yīng)用程序和板級(jí)支持包(如果你選擇該選項(xiàng))將在SDK中創(chuàng)建。如果您選擇了自動(dòng)生成選項(xiàng),你可能會(huì)發(fā)現(xiàn)一些錯(cuò)誤的報(bào)道。這是因?yàn)椴皇撬械捻?xiàng)目引用是正確的呢。要設(shè)置這些項(xiàng)目引用,您需要導(dǎo)入的演示設(shè)置,你會(huì)發(fā)現(xiàn)項(xiàng)目>來源>設(shè)置選項(xiàng)下。在這個(gè)XML文件右鍵單擊并查看屬性。這將允許您選擇和復(fù)制該文件的位置,如圖4所示。

圖4:獲取正確的設(shè)置

一旦你復(fù)制這個(gè)位置,在項(xiàng)目右鍵單擊并選擇屬性。在標(biāo)題C / C ++一般,選擇路徑和符號(hào)的選擇。然后選擇導(dǎo)入設(shè)置和設(shè)置文件的位置粘貼。

同樣重要的是,以確保存儲(chǔ)庫正確指向前面添加的庫。您可以通過設(shè)置賽靈思工具>存儲(chǔ)庫,它應(yīng)該顯示在您的μC/ OS-III BSP以前安裝的位置檢查這些。

因?yàn)槲覀兿M褂玫腢ART輸出的狀態(tài)演示,正在顯示出完成初始化和運(yùn)行任務(wù),則可能需要設(shè)置標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出到UART下的BSP設(shè)置。

經(jīng)執(zhí)行這些操作,你會(huì)看到,現(xiàn)在可以建項(xiàng)目。但是,仍然會(huì)有一些警告,如果你想在你的硬件上運(yùn)行這個(gè)項(xiàng)目,將無法達(dá)到演示指出它應(yīng)該。這是因?yàn)榫媪宋瓷陥?bào)的功能。包括bsp.c文件中下面的語句應(yīng)該糾正這個(gè)問題。

有一次,我添加了這個(gè)“有”頭文件,該項(xiàng)目建成并運(yùn)行按預(yù)期在我的ZedBoard(見我的YouTube視頻)。#include“xil_cache.h”

啟動(dòng)和運(yùn)行

在拿到例如啟動(dòng)和運(yùn)行,你現(xiàn)在有信心,RTOS已經(jīng)在系統(tǒng)上正確實(shí)施?,F(xiàn)在,您可以繼續(xù)正確地執(zhí)行對ZYNQ SoC的軟件設(shè)計(jì)。一旦你創(chuàng)建了軟件應(yīng)用和工程團(tuán)隊(duì)已經(jīng)準(zhǔn)備好嘗試一下硬件,可以在完全相同的方式創(chuàng)建一個(gè)編程文件,你會(huì)為裸機(jī)系統(tǒng)(參見Xcell雜志問題83,“如何配置您的SoC ZYNQ裸機(jī)解決方案“),能夠與RTOS的應(yīng)用程序啟動(dòng)和配置存儲(chǔ)器執(zhí)行。

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

    關(guān)注

    20

    文章

    804

    瀏覽量

    119113
  • 實(shí)時(shí)操作系統(tǒng)

    關(guān)注

    1

    文章

    194

    瀏覽量

    30682
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請問如何將cURL庫添加到ESP8266_RTOS_SDK項(xiàng)目中?

    我想使用 curl api,但我不知道如何將添加到我的項(xiàng)目中,這樣當(dāng)我將該庫的頭文件包含在我的項(xiàng)目中時(shí)它就不會(huì)抱怨。 有誰知道如何正確地第三方庫添加到ESP8266_
    發(fā)表于 07-09 07:52

    請問如何將.C的圖片文件添加到VScode(PlatfromIO)生成的lvgh項(xiàng)目中?

    當(dāng)使用LVGL官方網(wǎng)頁轉(zhuǎn)換器,png圖片轉(zhuǎn)換為.c矩陣文件之后,如何將.c的圖片文件加到VScode(PlatfromIO)的lvgh工程里面?<br> 不管是把.c放到assets、lib、include為什么每
    發(fā)表于 06-17 06:03

    在RZ/T2M和RZ/N2LPrintf添加方法(使用查詢模式實(shí)現(xiàn)UART)

    RZ/N2L是一種工業(yè)以太網(wǎng)通信用MPU,可輕松網(wǎng)絡(luò)功能添加到工業(yè)設(shè)備。
    的頭像 發(fā)表于 05-21 14:08 ?377次閱讀
    在RZ/T2M和RZ/N2L<b class='flag-5'>中</b>Printf<b class='flag-5'>添加</b>方法(使用查詢模式實(shí)現(xiàn)UART)

    STM32F746 QSPI的Flash擴(kuò)展后,添加到工程下載發(fā)現(xiàn)報(bào)錯(cuò),為什么?

    使用 W25Q128 模塊 ,使用的是微雪STM32F746IGT6的開發(fā)板,在QSPI進(jìn)行Flash擴(kuò)展了解發(fā)現(xiàn)需要做一個(gè).FLM的Flash編程算法,我找一個(gè)STM32H7的進(jìn)行修改,然后添加到工程下載發(fā)現(xiàn)報(bào)錯(cuò),無法加載算法,有大佬自己做過Flash編程算法嗎,求解
    發(fā)表于 04-17 06:31

    怎么把stlink server添加到keil里?

    stlink server的使用說明里面是支持keil5.25的。怎么把stlink server添加到keil里?
    發(fā)表于 03-27 07:28

    TC399 adc能添加到同一個(gè)隊(duì)列并得到結(jié)果嗎?加入隊(duì)列是否有任何限制?

    添加到隊(duì)列并得到結(jié)果。 我的疑問是,有了這些不同的頻道和組,我還能把它們添加到同一個(gè)隊(duì)列并得到結(jié)果嗎?加入隊(duì)列是否有任何限制?
    發(fā)表于 03-04 06:33

    如何將F-RAM?添加到現(xiàn)有的PSoC? Creator項(xiàng)目?

    ?Creator 添加 的示例。所有示例似乎都使用了 Modus 工具箱。是否有任何文檔顯示如何將F-RAM?添加到現(xiàn)有的PSoC? Creator 項(xiàng)目?
    發(fā)表于 03-01 12:14

    FCX3是否具有PTS或SCR添加到映像幀的功能?

    問題 1) FCX3是否具有PTS或SCR添加到映像幀的功能,如隨附的USB規(guī)范中所述? 如果可能,請?zhí)峁┯嘘P(guān)如何配置每個(gè) PTS 和 SCR 的詳細(xì)信息。 問題 2) CAN FCX3 支持1080x1280@120fps傳輸帶寬? 如果這很困難,請讓我知道實(shí)際使用
    發(fā)表于 02-26 08:23

    如何將TC1798器件添加到MDK KEIL?

    我正在嘗試使用 KEIL MDK(μVision)為英飛凌TC1798編程,但我不確定如何將TC1798器件添加到MDK KEIL。 誰能幫我拿到 .pack 或者.zip 對于 TC1798?
    發(fā)表于 02-01 08:18

    如何將CMSIS DSP庫添加到XMC4700 Relax Kit的Dave CE項(xiàng)目中?

    我剛開始研究 Dave,這對我來說還是個(gè)新事物。 我創(chuàng)建了一個(gè) Dave CE 項(xiàng)目,并能夠啟動(dòng)并運(yùn)行 blink 代碼。 我想將 CMSIS DSP 庫添加到我的項(xiàng)目中,并使用庫的 DSP 函數(shù)
    發(fā)表于 02-01 07:11

    求助,如何把RTOS系統(tǒng)添加到一個(gè)project?

    使用AURIX Development Studio 創(chuàng)建一個(gè)MCU工程,如何把RTOS加入到工程?RTOS系統(tǒng)是Infineon提供,還是第三方提供?
    發(fā)表于 02-01 07:11

    TC397 Infineon-AURIX_STM_Interrupt_1_KIT_TC397例程添加到RTOS不工作的原因?

    使用Infineon-AURIX_STM_Interrupt_1_KIT_TC397 例程添加到RTOS不工作,到達(dá)設(shè)定的時(shí)間不能觸發(fā)中斷,而單獨(dú)的例程是沒有問題的,請問出現(xiàn)此問題是什么原因?是否與
    發(fā)表于 01-24 07:42

    如何將adi的spice模型(.cir文件)添加到pspice里?

    ,是.cir文件,請問如何將其應(yīng)用到pspice? 2.同上問,能否解釋一下為何用.CIR文件,而不是lib文件呢?直接用多好呀。 謝謝!
    發(fā)表于 11-28 06:58

    安裝python怎么添加到環(huán)境變量

    Python是一種簡單易學(xué)的腳本語言,廣泛應(yīng)用于開發(fā)各種類型的應(yīng)用程序。為了在Windows操作系統(tǒng)上使用Python的命令行工具,需要將Python添加到系統(tǒng)的環(huán)境變量。本文向您詳細(xì)介紹如何在
    的頭像 發(fā)表于 11-23 16:40 ?2184次閱讀

    Mentor PADSPCB封裝直接添加到PCB的教程

    一般,批量添加封裝到PCB板上有以下方法: 第一步:點(diǎn)擊菜單欄“ECO模式--添加元器件”如圖,點(diǎn)擊以后彈出如圖界面。 1)元件類型 PCB封裝必須得添加完元件類型,才能通過ECO模式添加到
    的頭像 發(fā)表于 11-07 07:45 ?4293次閱讀
    Mentor PADS<b class='flag-5'>將</b>PCB封裝直接<b class='flag-5'>添加到</b>PCB的教程