多媒體任務管理和Fatfs文件系統移植

第 3 章 多媒體任務管理和 Fatfs 文件系統移植 本系統中要完成多種多媒體任務,單憑 Nios II 軟核不能完成多線程的工作方式,為了解決多任務調度和管理的問題,本文利用嵌入到 Nios II IDE 中的 C/OS II 系統來實現多媒體系統的任務管理和并行協同工作,這樣即簡化了軟
閱讀技巧Ctrl+D 收藏本篇文章
  第 3 章 多媒體任務管理和 Fatfs 文件系統移植
  
  本系統中要完成多種多媒體任務,單憑 Nios II 軟核不能完成多線程的工作方式,為了解決多任務調度和管理的問題,本文利用嵌入到 Nios II IDE 中的μ C/OS II 系統來實現多媒體系統的任務管理和并行協同工作,這樣即簡化了軟件控制的難度,又提高了整個系統的可重用性和工作性能。另外,在系統的主要存儲設備 SD 卡的控制方面,利用傳統的軟件控制較為復雜而且讀寫速度較慢,本系統在 Nios II 中結合了 Fatfs 文件系統,進行軟件上的優化來提高效率。
  
  下面將對這兩項在軟件控制上的優化設計進行講解。
  
  3.1 μ C/OS II 系統
  
  3.1.1 μ C/OS II 簡介
  
  μ C/OS II 是由 Micrium 公司在 1992 年首次發布的一款非常流行的實時內核系統,它具有很好的靈活性和實時性,可固化可裁剪并且有搶占性和多任務內核。已經應用于數以百計的商業應用,成功的在超過 40 不同架構的處理器上執行過任務。本系統就是將μ C/OS II 應用在 Nios II 處理器上,由于我們用到的Nios II IDE 軟件對 μ C/OS II 系統提供了完全的支持,所以可以很方便的將操作系統移植到用戶定制的系統中去[35,36].
  
  μ C/OS II 為用戶提供了六項基本服務。一、時間管理(Time management):
  
  主要是一些用來對任務進行延時、讓延時結束、得到系統時間的函數。二、內存管理(Memory management):在操作系統中將一整塊內存空間分成多個大小相等的內存分區進行管理。三、任務管理(Task management):用來進行任務的創建和修改,還有設置任務的優先級以及對任務的掛起和恢復操作。四、信號量(Semmaphores):可以產生事件發生標志、控制使用共享資源,還可以用來傳遞信息。五、消息傳遞(Message passing):主要用做實現兩個不同任務之間的通信,傳遞的方式有郵箱消息和消息隊列兩種。六、事件標志(Event flag):用做同步不同的事件。
  
  這里主要介紹一下系統主要用到的任務管理服務。μ C/OS II 能夠管理的任務上限為 64 個,其中有四個最高優先級和四個最低優先級的任務是系統自身保留的,仍然剩下 56 個供用戶使用的任務,每個任務都會被分配一個數字作為任務的編號,數字越小對應的任務優先級就越高。μ C/OS II 的任務調度策略是,在等待列表中選擇優先級最高的任務優先運行。這就意味著如果優先級高的任務一直在運行,那么低級別優先級的任務就只能一直等待,沒有執行的機會。
  
  這就要求開發者對任務的優先級有一個合理分配,才能保證各個任務的正常運行,本系統中任務的分配會在下面進行詳細介紹[37].
  
  3.1.2 μ C/OS II 在多媒體平臺中的應用
  
  μ C/OS II 內核是運行在基于硬件抽象層板級支持包上的,在 Nios II IDE 軟件中直接把μ C/OS II 像 C 標準庫一樣作為硬件抽象層擴充到 Nios II 處理器上,如圖 3-1 所示為它的編程結構,從中我們可以清晰的看出它與 Nios II 處理器、HAL API 在結構上的關系。正是因為這種結構在 Nios II 處理器上利用 μ C/OS II進行開發有很多的優勢:它的程序能夠靈活的運用到其他的 Nios II 硬件系統上;對于潛在的硬件更改問題有抵御能力;可以訪問所有的 HAL 服務,就像 UNIX風格的應用程序接口一樣;它的 ISR 函數很容易實現。
  
  在 Nios II IDE 軟件中使用μ C/OS II 時,通過 Nios II 工程設置就可以為實時操作系統模塊進行控制。我們不需要直接修改源文件的內容來更改內核屬性。
  
  在對系統移植時已經把源代碼放入 Nios II IDE 的安裝路徑中,特定處理器代碼的路徑是<Nios II EDS install path>/componets/altera_nios2/UCOSII,獨立處理器代碼的路徑是<Nios II EDS install path>/componets/micrium_uc_osii. μ C/OS II的軟件包的工作機理類似于為硬件組件提供的驅動,當在 Nios II 工程中使用μ C/OS II 系統時,componets/micrium_uc_osii 路徑中的 header 文件和 source 文件就被包含在工程路徑當中,相應的設置參數就會反映在板級支持包的 system.h文件中,對于系統設備驅動在工程建立好后,包含 inc 和 src 子目錄的 UCOSII目錄就會被添加到 source 和 include 文件的搜索目錄中區,Nios II 的軟件建立工具(SBT)會把這些文件復制到工程中 BSP(板級支持包)的 obj 目錄,這樣μ C/OSII 內核就可以自動編譯并鏈接成為整個工程的一部分。
  
  下面介紹一下基于μ C/OS II 編寫應用程序的步驟。
  
  首先,利用#include“includes.h”函數,在工程中包含函數聲明、基本的宏定義等等。
  
  第二,利用#define TASK_STACKSIZE 4096,來對任務棧的大小進行設置,這一步驟是保證線程安全的關鍵。
  
  第三,為了提高系統的實時性和系統的正常運轉,要合理分配任務的優先級。
  
  第四,完成單個具體任務的程序編寫。
  
  第五,利用 OSInit()函數初始化所有的數據結構。
  
  第六,創建至少一個用戶。方式有兩種,可以先創建父任務,接著利用父任務創建子任務;也可以依次的創建任務。
  
  第七,利用 OSStart()啟動操作系統,讓各個任務開始運行。
  
  μ C/OS II 在多媒體系統中主要起到的作用就是可以實現多線程的工作模式,并且完成多媒體任務的創建和多任務的調度。在軟件設計中,多任務的程序設計方式也是一個難點。在進行任務管理調度時,因為每一個任務需要的資源和重要程度不同,所以對任務的優先級進行合理的配置在很大程度上會影響到整個系統的性能指標。
  
  在上面的介紹中我們已經知道,系統總會運行等待列表中優先級最高的那個任務。所以,本系統將主任務的優先級設為最高,主任務的作用就是來創建子任務,任務結束就自我刪除。本文的多媒體平臺一共有三個子任務需要調度,有圖像顯示與采集任務、GPS 信息接收顯示任務和音樂播放任務。GPS 信息接收顯示任務由于解析的數據量相對較小,顯示文本相對簡單,任務執行最快,耗時也最短,所以把它的等待時間設為最長,優先級設為最高。在圖像顯示與采集任務當中,采集圖像數據,讀取圖像數據,解碼數據,顯示圖像的過程為三個任務中最為復雜,處理的數據量最大,耗時最長,執行最慢,所以把它的優先級設為最低,等待時間設置為最短。音樂播放功能中,音頻解碼部分運用硬件解碼所以處理速度會稍快,在耗時和執行速度上都處在中間,所以把它的優先級和等待時間都設為中。按照以上的優先級設計方式,系統就能夠在執行高優先級任務的同時也能夠執行低優先級的任務,能夠充分發揮多任務設計給本多媒體平臺帶來的強大的性能提升。
  
  對μ C/OS II 系統具體的操作步驟和配置將在第五章的軟件整合部分給出。在第四章中會對各個任務子模塊的執行程序設計進行講解。
  
  3.2 FATfs 文件系統移植
  
  3.2.1 FATfs 文件系統移植在多媒體平臺中的必要性
  
  本文中的多媒體平臺需要對音頻和圖像文件進行存儲并對這些文件進行讀寫操作。我們選擇了 SD 卡作為存儲設備,因此文件系統在數據存儲設計這一塊就起到了至關重要的作用。傳統的直接對存儲介質進行數據讀寫的方式太過復雜且通用性差,每次操作前都要對其存儲空間結構充分的了解,極大的增加了程序設計的難度。而通過移植文件系統就能夠系統地靈活地對數據進行操作。
  
  因為文件系統為開發者提供了明確的 API 函數,這些函數與地層的存儲介質不相干,也就避免了每次都從頭開始對地址空間進行讀寫。這樣一來,我們在訪問底層存儲器時就有了標準的接口函數使程序更有層次感,可移植性更強更符合未來的發展趨勢[38].
  
  當前市面上經常被用到的文件系統有 ZLG/FS 系統、uC/FS 系統和 FATfs 系統。第一種是針對嵌入式的小型系統,雖然是免費的,但系統不夠完善和穩定;第二種由 Micrium 公司開發,功能非常強大,一般用在硬盤、FLASH、CF 卡等上面,但它是一種商業系統,需要付費。所以這里我們選擇了 FATfs 文件系統,它是一款專門為小型嵌入式系統設計的 FAT 系統模塊,不僅免費開源而且高效。
  
  另外,源代碼都是用標準 C 編寫具有很好的硬件平臺獨立性[39,40].
  
  3.2.2 FATfs 文件系統的結構和原理
  
  FATfs 文件系統的結構如圖 3-2 所示有三個層次,文件系統應用層負責與用戶進行溝通的,提供文件系統操作的 API 函數給用戶;FATfs 文件系統層是實現有關文件系統的;disk I/O 硬件層是與具體用到的存儲設備直接關聯,開發者會提供與存儲設備對應的接口函數。
  
  FAT 作為一種分區格式,按照 FAT 表中簇號的位數不同可分為 FAT12、FAT16 和 FAT32 三種,FAT 后面的數字代表的就是其簇號的最高位數,因為本文用到的 SD 卡容量為 1G,所以選擇了 FAT16 這種格式[41].
  
  上面提到了簇這個名詞,它是文件系統中文件存儲的基本單位,每個簇的大小是由開發者設定的,以本系統為例,SD 卡的容量為 1G,那么就應該將簇的容量設置為 16KB,這樣才不會浪費磁盤空間。計算一下,因為選擇的是 FAT16格式,簇號用 16 位表示,最多的簇數為 216=65536 個,設置的簇容量為 16KB,則磁盤的總空間為 16KB*65536=1024MB 剛好為 1G.
  
  FAT16 主要由六部分組成,如圖 3-3 所示。下面就分別說一下這基本分的作用。
  
  首先是 DBR(DOS Boot Record)操作系統引導區,它是可以被直接訪問的第一扇區位于0磁道。這一區主要包含引導程序和BPB(Bios Parameter Block),BPB是一個很重要的數據結構,叫做基本參數塊,它包含了文件分區的基本描述信息,這些信息都非常重要,主要有,扇區數、每扇區的字節數、FAT 表數、每個 FAT 表占用的扇區數、根目錄的個數等信息[42].
  
  根據上面的 BPB 中保留扇區和首扇區的信息我們就可以到達 FAT 區,這一區的主要任務就是為文件之間搭上一根鏈條,用來索引和定位,這種結構被稱為“鏈式結構”.它有自己的一套查找文件的流程,每個鏈上的元素代表的是簇號,利用文件的目錄項就可以得到文件數據簇號的起始位,接著就能夠在數據區得到這個簇的數據。接下來,按照簇號查找到數據相應的 FAT 表,如果其文件內容的結尾是“FF”則文件查找成功,如果不是說明查到的是鏈條,則將此單元的內容作為下一單元的簇號繼續查找,其流程如圖 3-4 所示。
  
  這種存儲鏈表對于文件的讀取非常重要,所以為了數據的安全,我們從圖3-4 看出有 FAT1 和 FAT2 兩個區,FAT2 就是作為 FAT1 的備份區存在,兩個的數據內容是一致且同步的。根目錄區在上面索引文件的流程中提到,它也是十分重要的,存儲了文件屬性和起始簇號等關鍵信息,與它結合 FAT 才能準確的定位文件位置。根目錄后面就是數據區了,它占了磁盤的主要空間,存儲了用戶的文件和文件夾。
  
  3.2.3 FATfs 文件系統的移植
  
  文件系統的移植就是要消除其應用在不同平臺上的差異性,本系統就是要實現在 Nios II IDE 軟件環境中實現 FATfs 對 SD 卡的控制,在移植過程中編譯器是一項很重要的工具,文件系統的源代碼要經歷 C 到匯編再在二進制可執行代碼的過程,這個過程中容易出現意想不到的錯誤,讓人欣慰的是,Nios II IDE集成開發環境提供了非常優質的編譯器,可以有效的避免這些錯誤發生,同時FATfs 與各平臺極好的兼容性也為移植提供了很好的保證。
  
  移植的準備工作首先將 FATfs 源代碼的文件夾放入工程的 software 文件夾中,源代碼共有六個文件,integer.h 文件中是對所有用到的數據類型的描述,ffconf.h 文件是對系統有關的配置,用來描述 disk I/O 硬件層的是 diskio.c 和diskio.h 文件,最后是描述文件系統應用層的 FATFS_008.c 和 FATFS_008.h 文件。
  
  接下來就是利用這些源文件進行移植,主要分為以下幾個步驟。
  
  首先要解決的是數據類型問題,系統中需要統一的數據類型,這一點的配置在 interger.h 文件中進行設置,之后在執行代碼頭部 include 它就可以解決數據類型的問題。
  
  第二步,也是非常重要的步驟就是將文件系統層和應用層與 SD 卡聯通起來。這里還要用到 SD 卡的驅動文件 sd_driver.c 和 sd_driver.h 文件,同樣要放入工程的 software 文件夾下。我們要完成的任務是利用文件系統實現對 SD 卡的讀寫操作,所以要聯通的最基本的就是初始化函數和讀寫扇區函數。控制硬件層的 diskio.c 和 diskio.h 文件中這三種函數分別是 disk_initialize()、disk_read()、disk_write()。要實現聯通,首先在 sd_driver.h 文件中 include 文件 diskio.h,并編寫交互接口函數。另外在 diskio.c 文件中要 include 文件 sd_driver.h.這樣就能夠實現文件系統中對 SD 卡底層驅動的控制。
  
  最后的步驟就是利用 ffconf.h 中的配置文件根據實際情況對文件系統綜合配置,這里需要給宏定義分配數值。
  
  到這里文件系統就成功的移植到了 Nios II 上,在對 SD 卡中數據在軟件設計中直接引用簡單的 API 讀寫函數就能夠實現對 SD 卡中數據的操作無需考慮存儲介質。在對 SD 卡操作時要注意的事項是,每次打開 SD 卡即利用 f_mount()函數掛載,完成文件操作之后必須要在用這個函數關閉 SD 卡,這樣才能保證其正常運行。
  
  3.3 本章小結
  
  本章主要承接第二章中系統的總體結構和任務劃分部分,對多媒體平臺中的任務調度方法進行了詳細的描述,并且給出了重要的存儲模塊中為了控制 SD卡的 FATfs 文件系統的移植。在任務調度上,本文利用了μ C/OS II 系統對軟件控制進行了優化,上文中講解了μ C/OS II 如何應用在 Nios II 軟核上并給出了任務分配和管理的方案。在文件系統移植方面,文中講解了 FATfs 系統的原理和移植過程。有了這兩方面的設計和軟件上的優化,也為下面的第四章中多媒體平臺的各個功能模塊的設計打下了堅實的基礎。返回本篇論文導航
    論文來源參考: 本篇論文快速導航:
    題目:現場可編程門陣列在多媒體平臺中的應用
    第一章:FPGA技術下多媒體平臺開發研究緒論
    第二章:多媒體平臺的總體方案
    第三章:多媒體任務管理和Fatfs文件系統移植
    4.1 4.2:圖像顯示和采集模塊
    4.3 - 4.5:音樂播放模塊與GPS信息接收顯示模塊
    第五章:多媒體系統的整合調試和功能驗證分析
    結論/參考文獻:基于FPGA的多媒體平臺構建分析結論與參考文獻
    轉載請注明來源。原文地址:http://www.xfcdqn.live/html/zhlw/20191202/8221124.html   

    多媒體任務管理和Fatfs文件系統移植相關推薦


    聯系方式
    微信號 byLw8com
    熱點論文
    14705193098 工作日:8:00-24:00
    周 日:9:00-24:00
    七乐彩走势图预测 全民欢乐捕鱼破解版无限钻石版 足球直播360 淘宝店终于开始赚钱了 极速时时彩 闲来安徽麻将官网 网上打麻将在哪个平台 3d李逵劈鱼 澳克竞彩比分直播 街机电玩捕鱼一分一元 即时竞彩比分最快 财神捕鱼安卓版 网上电影电视怎么赚钱 让分胜负 调查问卷软件赚钱 568彩票游戏 完美yj怎么赚钱