色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

采用TS101系列DSP芯片實現嵌入式操作系統的應用方案

電子設計 ? 來源:電子元器件應用 ? 作者:應陳克,胡文江 ? 2020-09-17 16:36 ? 次閱讀

隨著半導體制造工藝的發展和計算機體系結構的改進,DSP處理芯片的處理能力越來越強大,控制的外圍設備越來越多,軟件算法也越來越復雜。對于DSP系統的軟件開發,不僅要面對復雜的軟件算法,同時還要把大部分精力放在各種外圍設備和相關的硬件控制上,整個過程復雜而艱辛。因此,為這一類系統開發小巧精致、便于移植的嵌入式實時操作系統,具有實際的意義。本文參考開放源代碼實時操作系統uC/OS-II,完成了基于ADI公司ADSP-TigerSHARC101S(以下簡稱TS101)系列DSP芯片的嵌入式實時操作系統的設計和開發工作。

1 TS101芯片簡介

TS101是美國ADI公司生產的一款高性能靜態超標量處理器。ADSP-TS101S的內核指令周期為3.3ns,每周期能夠執行4條指令、24個16-bit定點運算和6個浮點運算。內部有三條相互獨立的128bit寬度的內部數據總線,每條總線各連接一個2MB內部存儲器陣列,可提供4個字的數據、指令及I/O訪問,以及14.4Gbytes/s的內部存儲器帶寬。

在ADSP-TS101內部的雙運算模塊中,每個均包含一個ALU、乘法器、64-bit移位器和32個字的寄存器組及相關的數據對齊緩沖器(DAB)。芯片中的雙整數ALU(IALU)均有自己的31個字的寄存器組以用于數據尋址。此外,TS101中還帶有一個帶指令對齊緩沖器(IAB),以及分支目標緩沖器(BTB)和中斷控制器的程序控制器,同時有三條相互獨立的128bit寬度的內部數據總線以及片內6MB SRAM;TS101提供有與主機處理器、多處理器空間(DSP)、外部SRAM和SDRAM相連的外部端口和一個14通道DMA控制器、四個鏈路口、兩個64bit問隔定時器和定時器計滿引腳。芯片上一個與IEEE 1149.1兼容的JTAG接口可用于片上仿真。

2 基于TS101的嵌入式實時操作系統功能

本文介紹的基于TS101的嵌入式操作系統是參考源碼公開的實時操作系統uC/OS-II來設計的,實際上,它和uC/OS-II一樣,僅僅是一個實時內核,而不具有像GUI、TCP/IP協議棧等功能部件。它支持占先式多任務調度,并可提供有效的服務(如信號量、郵箱、隊列、延時、超時等)。同時,在uC/OS-II基礎上可引入高級操作系統中的進程和線程等概念。因此,本沒計采用了進程與線程結合的方式,即將實現不同功能的任務視為進程,然后在任務內部進行細分,以劃分為不同的線程。進程間的調度與切換在TS101內部存儲區和外部擴展存儲區(例如SDRAM)中進行,而線程間的調度與切換則在TS101內部存儲區中實現。從本設計的整個TS101嵌入式實時系統來看,它的基本功能主要包括任務管理、中斷管理、內存管理三方面內容。

在TS101嵌入式實時系統的三大塊功能中,任務管理功能模塊基本上是uC/OS-II的簡單移植,本文主要針對中斷處理和存儲器管理兩大部分進行設計說明。

3 TS101的中斷處理

TS101的中斷處理包括硬件中斷和軟件中斷兩大類,其中軟件中斷又包括軟件異常中斷和Debug中斷。

3.1 硬件中斷

TS101處理器不需要專門的堆棧指針來保存現場,器件中IALU的J、K寄存器都可以用作堆棧指針。在允許嵌套中斷的中斷服務程序中,可將中斷返回地址(即RETIB)值保存到堆棧中,這樣,在從RETIB讀出返回地址后,系統將自動開啟全局中斷使能。但在保存相關的寄存器和RETI時本應禁止全局中斷使能,所以這是在程序控制器將PC寫入RETI時自動完成。如果系統不支持嵌套的硬件中斷,則無需把處理器狀態保存在堆棧中。中斷一般根據寄存器RETI執行并在中斷后返回,而不需要再對硬件中斷的全局禁止位進行處理。

3.2 軟件中斷 (異常)

異常軟件中斷是在程序執行的過程中觸發的。使能異常中斷時,可將PMASK[62]置位,并將PC存儲于RETS;而對于仿真異常,則將PMASK[63]置位,PC存儲于DBUG中。當異常中斷出現時,程序控制器將從寄存器IVSW指向的地址取址,仿真異常則從EMUIR寄存器取址,同時將指令流水的指令清空。

3.3 中斷返回

中斷返回是通過在中斷服務程序中執行RTI指令來實現的。當然,這要求在響應中斷服務程序時就將返回的地址保存在該寄存器中。通常要求至少在執行該指令前的8個指令周期就將返回地址放入在寄存器RETIB中,這樣,分支緩沖BTB才能使用。

4 操作系統中斷處理的實現

在本操作系統中,對于用戶中斷服務程序的處理過程,其示意代碼和功能如表1所列。

事實上,用戶應首先將處理器的寄存器壓人當前堆棧[程序列表1中的(1)]。在進行中斷處理時,操作系統需要知道用戶在做中斷服務,因此,用戶應該調用OS_Int_Enter_C()將全局變量OSIntNesting[程序列表1中的(2)]直接加1。完成上述兩步以后,用戶就可以開始服務于引發中斷的設備了[程序列表1中的(3)]。由于該操作系統允許中斷嵌套,而且系統能跟蹤嵌套層數OS-IntNesting。然而,為允許中斷嵌套,在多數情況下,用戶應在開中斷之前先清中斷源。調用脫離中斷函數OS_Int_Exit_C()[程序列表1中的(4)]標志著中斷服務子程序的終結,同時OSIntExit ()會將中斷嵌套層數計數器減l。當嵌套計數器減到零時,所有中斷,包括嵌套的中斷便都完成了。此時操作系統要判定有沒有優先級較高的任務被中斷服務子程序(或任一嵌套的中斷)喚醒。如果有高優先級的任務進入了就緒態,系統則返回到那個高優先級的任務,OS_Int_Exit_C()返回到調用點[程序列表1中的(5)]。保存的寄存器的值將在這時被恢復,然后在去執行中斷返回指令[程序列表1中的(6)]。應當注意的是,如果調度被禁止(OSIntNesting》0),系統將返回到被中斷的任務。

以上描述的詳細解釋如圖1所示。圖中,有時中斷來到了[圖1(1)],但還不能被處理器識別,這也許是因為中斷被操作系統或用戶應用程序關了,或者是因為處理器還沒執行完當前的指令。一旦處理器響應了這個中斷[圖1(2)],處理器的中斷向量將跳轉到中斷服務子程序[圖1(3)]。中斷服務子程序在處理器寄存器(也叫做CPU context)[圖1(4)]中一旦保存完畢,用戶中斷服務子程序將通知操作系統進入中斷服務子程序,辦法是通過調用OS_Int_Enter_C()給OS-IntNesting加1[圖1(5)]。然后用戶中斷服務代碼開始執行[圖1(6)]。應當注意的是,用戶中斷服務中做的事要盡可能地少,而把大部分工作留給任務去做。用戶中斷服務完成以后,要調用OS_Int_Exit_C()[圖1(7)]。從時序圖上可以看出,對被中斷的任務來說,如果沒有高優先級的任務被中斷服務子程序激活而進入就緒態,OS_Int_Exit_C()只占用很短的運行時間。在這種情況下,CPU寄存器只是簡單地恢復[圖1(8)]并執行中斷返回指令[圖1(9)]。而如果中斷服務子程序使一個高優先級的任務進入了就緒態,則OS_Int_Exit_C()將占用較長的運行時間,因為這時要進行任務切換[圖1(10)]。新任務的寄存器內容要恢復并執行中斷返回指令[圖1(12)]。

5 存儲器管理

在TS101的C環境下,可將內存劃分為代碼區(code)、數據區(data)、堆(heap)區和棧(stack)區。代碼區用來存放用戶代碼,數據區用來存放全局變量和靜態變量等數據,棧區用來存放臨時變量等數據,堆區用來為用戶提供動態內存分配。在編譯器的鏈接描述文件(Linker DescriptonFile.LDF)中,可以手動劃分各個內存分區的大小。在TS101所提供的庫函數中已經包含了比較完備的內存管理函數(如常用的calloc,free,malloc和realloc等函數),可用于對內存進行基本管理。

在對操作系統進行設計的過程中,應將重心放在內存的擴展上,以便有效地使

用外部存儲器(例如SDRAM等)。為了實現內存擴展,本設計將一個大型任務看作一個進程,再將一個進程劃分為不同的小線程。在系統的外部存儲器中可以存放多個進程,而每次只將一個讀人到內存中來運行。操作系統的主要管理對象是這個進程所劃分的多個線程。這樣,在一個系統中就可以運行多個進程,它們之間可以由程序進行由內存到外存或由外存到內存的切換控制,但在切換過程中需要花費一些時間代價。

5.1 外部存儲器堆區的使用

TS101為用戶提供了堆區,并提供有calloc、malloc、realloc和free等函數來對其進行管理和使用,同時用戶可以通過手動修改鏈接描述文件以獲得相對較大的堆區。然而,在默認情況下,用戶所能使用的只是鏈接描述文件中所提供的那一塊堆區,這對用戶來說是遠遠不夠的。如果用戶在外部存儲器上也能夠像在內存中一樣動態的開辟存儲空間來進行使用,那將會帶來極大的方便。幸運的是,TS101的編譯系統提供了這一功能,用戶只需要對系統提供的名為“ts_hdr.asm”的匯編文件和鏈接描述文件進行修改并編譯“ts_hdr.asm”文件,再用生成的“ts_hdr.doj”文件代替鏈接描述文件中的“ts_hdr_TS101”即可。

以下將對文件的修改過程做簡要的介紹。下面是TS101鏈接描述文件中對于默認堆區的描述,它定義了默認堆區的基址和堆區的大小:

在“ts_hdr.asm‘’匯編文件中可對默認堆區進行操作,它的主要功能是為默認堆區規定ID號0,以便有新的堆區存在時方便使用。

ts_hdr.asm對默認堆棧進行編號的代碼:

· var=1df_defheap_base;

· var=1df_defheap_size;

· var=0;

對鏈接描述文件和匯編文件進行修改時,只需要在鏈接描述文件中對新的堆區進行描述并在匯編文件中對其進行編號即可。代碼如下:

對新的堆棧區進行描述的代碼可開辟于外部存儲器之中(SDRAM)。并在新的堆棧中將其編號為1。按照以上步驟將文件修改完畢之后,用戶就可以在外部存儲區中動態地使用內存了。編譯器還為動態內存的開辟提供了一系列的庫函數。其具體程序還在內部存儲器中的默認堆區動態開辟了大小為50的內存[6(1)],并在外部存儲區中動態開辟了大小為256的內存[6(2)]。其程序如下:

int*x,*y;

x=heap_malloc (0,50); (1)

y=heap_malloc (1,256); (2)

5.2 內存覆蓋

通過TS101可將數量極大的程序代碼放入外部存儲器中。每次通過DMA傳輸方式讀入少量的程序代碼到內存來執行,這樣既擴展了內存空間。又比將全部代碼放入外部存儲器節省時間,這種方式稱為內存覆蓋(overlay)。內存覆蓋是一種多對一的內存映射技術,它可將多段代碼存儲在外部存儲器劃定的不同位置,但也可以在內存中的同一位置運行。代碼在外部存儲器的存儲區稱為“live”區,在內存中的運行區稱為“run”區。

圖2所示是overlay的使用結構圖。由圖可見,在外部存儲器中,overlay1和overlay2可在內存中的同一區域中運行,而overlay3和overlay4也可以在內存的同一區域中運行。當主函數調用FUNC_B時,overlay2將被換入內存中運行,而當主函數調用FUNC_A時,再用overlay1置換over-lay2,overlay3和overlay4的使用與overlay1和over-lay2相同。代碼在內存與外存之間的置換主要通過DMA傳輸來實現。

內存覆蓋管理器是用戶編寫的用來將函數或數據載入內存的子程序,它們與鏈接器提供的PLIT{}指令配合使用可完成內存覆蓋操作。內存覆蓋管理器除了負責由外部存儲器向內存的載入操作外,還應當負責建立堆棧保存寄存器的值,檢查需要調用的函數是否已經在內存之中,以及利用DMA操作在其它函數執行時運行內存覆蓋載入。

通過鏈接描述文件可對內存覆蓋進行輔助操作。此操作需定義OVLY_one和OVLY_two兩塊overlay代碼,其中OVLY_one包含函數FUNC_A.doj,而OVLY_two包含FUNC_B.doj和FUNC_C.doj,它們共同在MOCode的同一內存區域運行。在鏈接描述文件中對overlay進行操作的程序代碼如下:

}》MOCode

在鏈接描述文件中,還可以通過定義PLIT{}指令來協助內存覆蓋操作的完成。當主函數調用一個內存覆蓋區的函數時,鏈接器將重新引導函數調用并進行操作。例如當主函數調用了內存覆蓋函數FUNC_A時,鏈接器會將其自動轉化為調用.plt_FUNC_A操作。此操作在函數執行之前先進行PLIT操作,并跳轉到overlay管理器中執行,然后再執行函數A。下面是對PLIT進行操作的定義代碼:

5.3 內存擴展的實現

操作系統提供了OS_Process_Sched()函數來完成這一操作,該函數中的進程切換函數順序代碼如下:

(1) 將處于在內存中的進程的寄存器值壓入堆棧;

(2) 將處于內存中的進程的全部存儲區內容由DMA方式放入外存:

(3) 調用在外存中的進程的寄存器出棧函數;

(4) 跳轉到新的進程運行。

在進程調度中,一般首先將所有寄存器值壓入當前進程堆棧中進行保存[順序代碼(1)],然后將內存進程存儲區中的所有內容放入外部存儲器中保存,以便當該進程重新進入內存運行時能夠完全恢復原有運行環境[順序代碼(2)]。這里的所有內容是指與當前進程有關的數據,包括進程的堆棧、進程的全局變量、進程動態申請的內存塊等等。調用外部存儲器中的進程寄存器出棧函數[順序代碼(3)]主要是利用前面所述的內存覆蓋技術來進行的,該寄存器的出棧函數一般放在外部存儲器中,操作時可通過調用它使鏈接器跳轉到內存覆蓋管理器來完成外部存儲器進程向內存的加載。但在這里要對內存覆蓋管理器進行修改,并添加外部存儲器中進程的全部數據的載入函數,然后,程序才能跳轉到新的進程中開始運行[順序代碼(4)]。

6 結束語

本文在對嵌入式實時操作系統進行研究的基礎上,完成了基于TS101DSP芯片的嵌入式實時操作系統的設計。所設計的系統體系結構主要參考的是開放源代碼的實時操作系統uC/OS_II,并在此基礎上,根據芯片本身的特點和實際應用的需要進行了創新和重設計,這主要體現在以下三方面:

(1) 結合TS101芯片的特點,實現了中斷處理部分的設計;

(2) 放棄了一般操作系統對內存采取每一任務分配一塊內存的方法,而是采用對內存進行分塊管理,并采取所有任務公用同一塊內存。對同一內存統一管理的方式;

(3) 根據實際系統需要研究,并實現了內存覆蓋技術,擴展了系統的存儲空間。

當然,任何嵌入式操作系統的設計都有一個簡單到詳細的過程,需要逐步完善。本文只是完成了TS101嵌入式實時操作系統基本功能的實現。相信經過長期的實際模擬運行,定能建立起功能更加完善、結構更加穩固可靠的嵌入式實時操作系統。

責任編輯:gt

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

    關注

    456

    文章

    51157

    瀏覽量

    426572
  • 嵌入式
    +關注

    關注

    5091

    文章

    19176

    瀏覽量

    307130
  • 操作系統
    +關注

    關注

    37

    文章

    6889

    瀏覽量

    123642
  • dap
    dap
    +關注

    關注

    1

    文章

    24

    瀏覽量

    8522
收藏 人收藏

    評論

    相關推薦

    [連載]嵌入式實時操作系統TINIUX設計與實現

    嵌入式實時操作系統TiniOS V2.1.0為基礎,逐步展開對系統的講解,揭開嵌入式實時操作系統的神秘面紗。在講解的過程中,我們盡量做到避免
    發表于 02-25 07:56

    一種基于TS101的SAR回波信號模擬器設計

    處理所要求的大數據吞吐能量、強數據計算能力,需要尋求一種基于高速數字電路的解決途徑。 TS101是美國AD公司最新推出的TigerSHARC系列DSP芯片
    發表于 07-22 06:29

    如何利用TS101DSP芯片實現嵌入式實時操作系統的設計?

    本文在對嵌入式實時操作系統進行研究的基礎上,完成了基于TS101DSP芯片嵌入式實時操作系統
    發表于 04-27 06:41

    基于DSP/BIOS和NDK的嵌入式網絡操作系統設計方案分享

    隨著嵌入式應用的普及,嵌入式操作系統的問題日益引人關注。由于DSP代表了一類重要的嵌入式應用,以DSP
    發表于 12-23 07:16

    基于Linux操作系統嵌入式網關的實現

    基于Linux操作系統嵌入式網關的實現
    發表于 03-28 09:48 ?29次下載

    嵌入式實時操作系統教程

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

    嵌入式操作系統的網絡加載實現

      在復雜的應用系統中通常都需要嵌入式操作系統的支持,這樣嵌入式操作系統鏡像文件的尺寸往往就會變得比較大。可以選擇通過網絡將
    發表于 08-25 14:02 ?1282次閱讀
    <b class='flag-5'>嵌入式</b><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-01 16:36 ?3633次閱讀

    嵌入式操作系統FreeRTOS的原理實現

    嵌入式操作系統FreeRTOS的原理實現(嵌入式開發工具使用實驗報告)-嵌入式操作系統FreeR
    發表于 07-30 12:03 ?31次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>FreeRTOS的原理<b class='flag-5'>實現</b>

    嵌入式操作系統FreeRTOS的原理與移植實現

    嵌入式操作系統FreeRTOS的原理與移植實現(嵌入式開發真的很難嗎)-隨著嵌入式技術的不斷發展,嵌入式
    發表于 08-04 13:50 ?16次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>FreeRTOS的原理與移植<b class='flag-5'>實現</b>

    嵌入式操作系統

    參考:[1] 《嵌入式系統軟件及操作系統》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 ?7863次閱讀
    什么是<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>?
    主站蜘蛛池模板: 精品一产品大全 | 99在线精品国自产拍 | 污污内射久久一区二区欧美日韩 | 久久www99re在线播放 | 亚洲日韩中文字幕区 | 亚洲中文字幕乱倫在线 | 忘忧草高清 | 亚洲AV日韩AV欧美在线观看网 | 吃春药后的女教师 | 日韩熟女精品一区二区三区 | 中文字幕爆乳JULIA女教师 | 久久精品麻豆国产天美传媒果冻 | 无限资源在线完整高清观看1 | 99爱在线精品视频免费观看9 | 精品亚洲午夜久久久久 | 久9视频这里只有精品123 | 亚洲an天堂an在线观看 | 无套内谢大学生A片 | 亚洲精品一二三区-久久 | 一个人的HD高清在线观看 | 日韩a在线看免费观看视频 日韩a视频在线观看 | 免费a毛片| 亚洲国产综合久久久无码色伦 | 亚洲精品久久午夜麻豆 | 小SB几天没做SAO死了H | 精品一区二区免费视频蜜桃网 | 999久久久无码国产精蜜柚 | 亚洲成在人线视频 | 无人区尖叫之夜美女姐姐视频 | 欧美黑大炮18p | 成人伊人青草久久综合网 | 丰满少妇69激情啪啪无码 | 久草在线一免费新视频 | 艳鉧动漫1~6全集观看在线 | 美女网站免费久久久久久久 | 性美国人xxxxx18 | WWW国产精品内射老师 | 亚洲欧美日韩另类精品一区二区三区 | 亚洲精品日韩在线观看视频 | 国产一区私人高清影院 | 洗濯屋H纯肉动漫在线观看 羲义嫁密着中出交尾gvg794 |