欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      嵌入式實時操作系統(tǒng)(dynaLinux),及其開發(fā)平臺(精)

      時間:2019-05-14 21:58:05下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《嵌入式實時操作系統(tǒng)(dynaLinux),及其開發(fā)平臺(精)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《嵌入式實時操作系統(tǒng)(dynaLinux),及其開發(fā)平臺(精)》。

      第一篇:嵌入式實時操作系統(tǒng)(dynaLinux),及其開發(fā)平臺(精)

      嵌入式實時操作系統(tǒng)(dynaLinux),及其開發(fā)平臺

      公司簡介:

      注冊時間:2003年3月24日 經(jīng)濟性質(zhì):合資 從事領(lǐng)域:電子信息

      資產(chǎn)狀況:注冊資金100萬人民幣 人員狀況:12人 股本結(jié)構(gòu): 中方:方沛宇 60萬元 楊海英 10萬元

      外方:今村博宣 20萬元 日本力揚株式會社 10萬元 項目情況:

      我們采用獨自的技術(shù)徹底改造了其Linux內(nèi)核,使其成為一種完全意義上的實時操作系統(tǒng)。dynaLinux具有以下特點:(1)導(dǎo)入了基于OSPM/ACPI的動態(tài)電源管理機構(gòu),可以根據(jù)CPU的使用狀態(tài)動態(tài)控制耗電量。(2)高速的boot機制。(3)堅固的安定性。(4)支持無MMU的CPU。

      應(yīng)用領(lǐng)域主要是面向:信息家電、PDA、手機、車載終端、GPS 等 國內(nèi)外市場分析:

      Linux操作系統(tǒng)在嵌入式系統(tǒng)中的應(yīng)用近來成為一種趨勢。據(jù)有關(guān)部門預(yù)測到2005年嵌入式系統(tǒng)中Linux的份額將占50%以上。但基于分時系統(tǒng)而架構(gòu)的Linux存在許多先天的不足,故現(xiàn)有的嵌入式Linux還不能稱為完全意義上的實時。我們采用獨自的技術(shù)徹底改造了其Linux內(nèi)核,使其成為一種完全意義上的實時操作系統(tǒng)。鑒于dynaLinux的優(yōu)勢,本公司被被富士通指定為支持其FR-V CPU的Linux提供商和全球技術(shù)總支持。融資和技術(shù)轉(zhuǎn)讓方案:

      總項目投資:100萬人民幣 已完成投資狀況:50萬人民幣 項目進展階段:已完成Dyna-Linux(v 1.0)的開發(fā) 融資或轉(zhuǎn)讓方式:投資或融資 聯(lián)系方式:

      公司名稱:北京華科力揚科技有限公司

      通訊地址:北京市海淀區(qū)上地信息路2號國際創(chuàng)業(yè)園D棟612 郵編:100085 聯(lián)系人:趙強 電話:82893150 傳真:82781836 Email:zhaoq@dyna.cn

      第二篇:嵌入式實時操作系統(tǒng) 項目開發(fā)總結(jié)報告

      項目開發(fā)總結(jié)報告

      分 類:軟件項目計劃 使用者:E-fanciers

      Version: 1.0

      項 目 承 擔(dān) 隊伍:煙臺大學(xué)

      計算機學(xué)院 E-fanciers小組撰 寫 人(簽名): 許超 于歌

      完 成 日 期: 2009-7-16 本文檔使用小組: E-fanciers小組

      評審負責(zé)人(簽名): 孝瑞

      評 審 日 期: 2009-7-19

      目 錄

      一、引言.............................................3

      1.1編寫目的.......................................3 1.2項目背景.......................................3 1.3定義...........................................3 1.4參考資料:.....................................3

      二、開發(fā)結(jié)果........................錯誤!未定義書簽。

      2.1產(chǎn)品..........................錯誤!未定義書簽。2.2主要功能......................錯誤!未定義書簽。2.3所用工時.......................................4 2.3所用機時.......................................4 2.3進度...........................................4

      三、評價............................................4

      3.1生產(chǎn)率評價.....................................4 3.2技術(shù)方案評價...................................4 3.3產(chǎn)品質(zhì)量評價...................................4

      四、經(jīng)驗與教訓(xùn).......................................4

      一.引言

      1.編寫目的(闡明編寫總結(jié)報告的目的,指明讀者對象。)

      詳細陳述項目開發(fā)過程,對項目開發(fā)做最后的總結(jié)完善,說明項目開發(fā)過程中遇到的難題及解決方案。

      2.項目背景(說明項目的來源、委托單位、開發(fā)單位及主管部門。)

      隨著微電子技術(shù)、計算機技術(shù)和網(wǎng)絡(luò)通信技術(shù)的發(fā)展,嵌入式系統(tǒng)已廣泛應(yīng)用在各個領(lǐng)域,包括消費電子、汽車電子、網(wǎng)絡(luò)通信、工業(yè)設(shè)備、航空航天和國防軍事等。隨著嵌入式技術(shù)的發(fā)展,工業(yè)領(lǐng)域也一改過去傳統(tǒng)的單片機應(yīng)用模式,逐漸將一些新嵌入式技術(shù)引入到系統(tǒng)中。特別是作為軟件基礎(chǔ)的嵌入式操作系統(tǒng)已廣泛為業(yè)界所接受,借以提高系統(tǒng)的開發(fā)效率和運行效率。是否采用嵌入式操作系統(tǒng),已成為工業(yè)設(shè)備品質(zhì)優(yōu)劣的標(biāo)志之一。

      當(dāng)今的嵌入式操作系統(tǒng)領(lǐng)域呈現(xiàn)百家爭鳴的狀態(tài)。據(jù)最近的調(diào)查數(shù)據(jù)顯示,嵌入式操作系統(tǒng)有數(shù)十種之多的。這種多樣性存在是必然的,是由嵌入式系統(tǒng)的定制性所決定的,是針對各個領(lǐng)域和行業(yè)的不同需求的應(yīng)對。也就是說,各個嵌入式操作系統(tǒng)都有自己的應(yīng)用領(lǐng)域,針對不同的應(yīng)用沒有絕對的優(yōu)劣之分,不會出現(xiàn)一種操作系統(tǒng)壟斷的局面。自主開發(fā)嵌入式操作系統(tǒng)絕對不是多余的,也是是對這種多樣性的自然順應(yīng),應(yīng)該可擁有自己的用武之地。有些國內(nèi)嵌入式廠商將希望寄托在Linux之上,以為它可以幫助解決所面臨的版稅和安全等問題。但事實并非完全如此,至少在嵌入式系統(tǒng)領(lǐng)域。首先,Linux還是泊來貨,國人并未掌握其核心技術(shù)和進程,也并未解決對外依賴的問題。其次,Linux是為桌面系統(tǒng)而設(shè)計的,并不能很好地滿足嵌入式系統(tǒng)高效性和靈活性的要求;再次,Linux的一統(tǒng)也違背了嵌入式系統(tǒng)應(yīng)用靈活定制的本質(zhì)特性。

      3.定義(列出報告中用到的專門術(shù)語定義和縮寫詞的原意。)

      int taskInit(void);

      /*創(chuàng)建一個任務(wù), 返回: 返回任務(wù)編號tid, >0: 成功, 其他: 失敗.*/ /*name: 任務(wù)名稱, entryPtr : 任務(wù)函數(shù)入口, stack_size: 任務(wù)棧大小, priority: 任務(wù)優(yōu)先級*/ int taskCreate(char *name, void *entryPtr, int stack_size, int priority);/*啟動一個任務(wù), 讓taskCreat創(chuàng)建的任務(wù)參加調(diào)度*/ int taskStart(unsigned char tid);/*tid: 任務(wù)編號, 由taskCreate返回*/ int taskPriorityGet(unsigned char tid);int taskPrioritySet(unsigned char tid, int newPriority);/*獲取和設(shè)置任務(wù)優(yōu)先級, 用于動態(tài)調(diào)整*/ int taskSuspend(unsigned char tid);/*將任務(wù)掛起, 該任務(wù)退出調(diào)度*/ int taskDelete(unsigned char tid);/*將任務(wù)刪除 該任務(wù)退出調(diào)度且回收任務(wù)分配的資源*/ int semCreate(void);/*互斥信號量創(chuàng)建, 返回信號量標(biāo)識sid, <0: 失敗*/ int semTake(int sid);int semGive(int sid);/*互斥信號量獲取和釋放*/ int taskSleep(int ticks);/*任務(wù)睡眠(非忙等), 由任務(wù)自己調(diào)用, 主動阻塞一段時間.時間單位為tick, 即10ms*/ 4.參考資料(列出這些資料的作者、標(biāo)題、編號、發(fā)表日期、出版單位或資料來源,可包括:(1)項目開發(fā)計劃;(2)需求規(guī)格說明書;(3)概要設(shè)計說明書;(4)詳細設(shè)計說明書;(5)用戶操作手冊;(6)測試計劃;(7)測試分析報告(8)本報告引用的其他資料、采用的開發(fā)標(biāo)準(zhǔn)或開發(fā)規(guī)范。)(1)軟件項目計劃(2)需求規(guī)格說明(3)軟件編寫向?qū)?/p>

      (4)國家軟件開發(fā)文檔標(biāo)準(zhǔn)模板

      二.開發(fā)結(jié)果

      1.產(chǎn)品(可包括:(1)列出各部分的程序名稱、源程序行數(shù)(包括注釋行)或目標(biāo)程序字節(jié)數(shù)及程序總計數(shù)量、存儲形式;產(chǎn)品文檔名稱等。)

      2.主要功能及性能 基本功能

      1.基于參考硬件平臺,建立硬件抽象層,完成基本硬件初始化,建立時鐘中斷; 2.在硬件抽象層基礎(chǔ)上,建立多任務(wù)操作系統(tǒng)環(huán)境; 3.任務(wù)調(diào)度采用同級時間片輪詢機制;

      4.實現(xiàn)任務(wù)間基本通訊機制:互斥信號量(共享內(nèi)存); 5.實現(xiàn)基本的時鐘管理機制:任務(wù)睡眠阻塞;

      6.實現(xiàn)一個RS232串口驅(qū)動。基于串口驅(qū)動實現(xiàn)一個命令行Shell(用一個獨立的任務(wù)實現(xiàn)),可在超級終端顯示信息和執(zhí)行命令。

      擴展功能

      7.任務(wù)區(qū)分優(yōu)先級,在同級輪詢調(diào)度基礎(chǔ)上添加優(yōu)先級調(diào)度機制; 8.不同優(yōu)先級任務(wù)之間實現(xiàn)搶占調(diào)度;

      9.在搶占調(diào)度的基礎(chǔ)上實現(xiàn)優(yōu)先級逆轉(zhuǎn)保護,避免邏輯死鎖問題; 10.將代碼移植到另一個硬件平臺上運行,驗證代碼移植性。3.所用工時(按人員的不同層次分別計時。)

      編碼成員工時:60小時/周,共約400小時;

      編寫文檔成員:共約60小時。

      4.所用機時

      5小時/天,共約300小時的機時。

      5.進度(給出計劃進度與實際進度的對比。)

      根據(jù)敏捷開發(fā)方法的指導(dǎo),每天查漏補缺,實際進度基本和計劃進度一致。三.評價

      1.生產(chǎn)率評價(如平均每人每周源程序行數(shù)、文檔的字?jǐn)?shù)等。)

      源程序:200行/周

      文檔:1500字/周

      2.技術(shù)方案評價

      嚴(yán)格遵循開發(fā)流程,運用科學(xué)開發(fā)方法。

      3.產(chǎn)品質(zhì)量評價

      按照大賽要求完成了應(yīng)有功能的基礎(chǔ)上有所添加自己小組的特色,譬如,設(shè)置相應(yīng)的出錯處理機制,為加強該系統(tǒng)的安全性與穩(wěn)定性也做了相應(yīng)的措施,總體來說,我們小組開發(fā)的嵌入式實時操作系統(tǒng)功能良好,穩(wěn)定性強。

      四.經(jīng)驗與教訓(xùn)

      經(jīng)過近兩個月的對嵌入式實時操作系統(tǒng)的開發(fā),經(jīng)驗學(xué)到了不少,當(dāng)然也得到了很多教訓(xùn),因為小組的不注意,導(dǎo)致2138開發(fā)板沒法繼續(xù)工作,有的時候會很耽誤時間,有的時候進度報告拖后一點才寫,也因此導(dǎo)致過進度不明了,不過,大多數(shù)時候,我們小組成員都認真對待大賽,努力想把自己小組的作品做的更完美,最后終于成功交付任務(wù),完成大賽。

      第三篇:嵌入式Linux實時操作系統(tǒng)習(xí)題總結(jié)

      第1章

      1.嵌入式系統(tǒng)是指操作系統(tǒng)和功能軟件集成于計算機硬件系統(tǒng)之中。嵌入式系統(tǒng)一般有3個主要的組成部分:硬件、實時操作系統(tǒng)以及應(yīng)用軟件。

      2.嵌入式系統(tǒng)的三要素是嵌入、專用、計算機;即以應(yīng)用為中心、以計算機技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計算機系統(tǒng)。

      3.目前國際較為知名的有:VxWorks、NeutrinoRTOS、Nucleus Plus、OS/

      9、VRTX、LynuxOS,RTLinux、BlueCat RT等。

      4.嵌入式系統(tǒng)一般由硬件層、中間層、軟件層和功能層組成。其作用分別如下:

      (1)硬件層 :由嵌入式微處理器、外圍電路和外設(shè)組成。操作系統(tǒng)和應(yīng)用程序都可以固化在ROM或者Flash中。為方便使用,有的模塊在此基礎(chǔ)上增加了LCD、鍵盤、USB接口,以及其他一些功能的擴展電路。

      (2)中間層 :硬件層與軟件層之間為中間層,其作用將系統(tǒng)軟件與底層硬件部分隔離,使得系統(tǒng)的底層設(shè)備驅(qū)動程序與硬件無關(guān);

      (3)軟件層 :主要是操作系統(tǒng),有的還包括文件系統(tǒng)、圖形用戶接口和網(wǎng)絡(luò)系統(tǒng)等。操作系統(tǒng)是一個標(biāo)準(zhǔn)的內(nèi)核,將中斷、I/O、定時器等資源都封裝起來,以方便用戶使用。(4)功能層 :由基于操作系統(tǒng)開發(fā)的應(yīng)用程序組成,用來完成對被控對象的控制功能。5.非占先式調(diào)度法也稱作合作型多任務(wù)(cooperative multitasking),各個任務(wù)彼此合作共享一個CPU。中斷服務(wù)可以使一個高優(yōu)先級的任務(wù)由掛起狀態(tài)變?yōu)榫途w狀態(tài)。但中斷服務(wù)以后控制權(quán)還是回到原來被中斷了的那個任務(wù),直到該任務(wù)主動放棄CPU的使用權(quán)時,那個高優(yōu)先級的任務(wù)才能獲得CPU的使用權(quán)。當(dāng)系統(tǒng)響應(yīng)時間很重要時,要使用占先式(preemptive)內(nèi)核。最高優(yōu)先級的任務(wù)一旦就緒,總能得到CPU的控制權(quán)。當(dāng)一個運行著的任務(wù)使一個比它優(yōu)先級高的任務(wù)進入了就緒態(tài),當(dāng)前任務(wù)的CPU使用權(quán)就被剝奪了。6.在實時系統(tǒng)中,如果系統(tǒng)在指定的時間內(nèi)未能實現(xiàn)某個確定的任務(wù),會導(dǎo)致系統(tǒng)的全面失敗,這樣的系統(tǒng)被稱硬實時系統(tǒng)。在弱實時系統(tǒng)中,超時卻不會發(fā)生致命的錯誤。其實時性的要求比硬實時系統(tǒng)要差一些。

      7.嵌入式系統(tǒng)的設(shè)計步驟及各部分的主要工作如下。(1)需求分析階段,羅列出用戶的需求;

      (2)體系結(jié)構(gòu)設(shè)計階段,描述系統(tǒng)的功能如何實現(xiàn);

      (3)詳細設(shè)計階段,進行硬件系統(tǒng)與軟件系統(tǒng)的分類劃分,以決定哪些功能用硬件實現(xiàn),哪些用軟件實現(xiàn);

      (4)系統(tǒng)集成,把系統(tǒng)的軟件、硬件和執(zhí)行裝置集成在一起,進行調(diào)試,發(fā)現(xiàn)并改進在設(shè)計過程中的錯誤;

      (5)系統(tǒng)測試,對設(shè)計好的系統(tǒng)進行測試,看其是否滿足給定的要求。8.Linux作為嵌入式操作系統(tǒng)的優(yōu)勢主要有以下幾點:

      (1)可應(yīng)用于多種硬件平臺。

      (2)Linux的高度模塊化使添加部件非常容易。

      (3)Linux是一個和Unix相似、以內(nèi)核為基礎(chǔ)的、具有完全的內(nèi)存訪問控制,支持大量硬件的一種通用操作系統(tǒng)。

      (4)Linux可以隨意地配置,不需要任何的許可證或商家的合作關(guān)系。

      (5)Linux帶有Unix用戶熟悉的完善的開發(fā)工具。其強大的語言編譯器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。9. Linux執(zhí)行進程調(diào)度一般是在以下情況發(fā)生的:(1)正在執(zhí)行的進程運行完畢;

      (2)正在執(zhí)行的進程調(diào)用阻塞原語將自己阻塞起來進入等待狀態(tài);(3)正在執(zhí)行的進程調(diào)用了P原語操作,從而因資源不足而被阻塞;(4)執(zhí)行中的進程提出I/O請求后被阻塞;(5)系統(tǒng)分配的時間片已經(jīng)用完;

      (6)就緒隊列中的某個進程的優(yōu)先級變得高于當(dāng)前運行進程的優(yōu)先級。

      第4章

      1、Linux 內(nèi)核的編譯菜單有好幾個版本,運行:

      (1)make config:進入命令行,可以一行一行的配置,但使用不十分方便。

      (2)make menuconfig:大多數(shù)開發(fā)人員使用的Linux 內(nèi)核編譯菜單,使用方便。

      (3)make xconfig:在2.4.X 以及以前版本中xconfig 菜單是基于TCL/TK 的圖形庫的。

      2、在完成內(nèi)核的裁減之后,內(nèi)核的編譯就只要執(zhí)行以下幾條命令: make clean

      編譯內(nèi)核之前先把環(huán)境給清理干凈。make dep

      編譯相關(guān)依賴文件 make zImage

      創(chuàng)建內(nèi)核鏡像文件 make modules 創(chuàng)建內(nèi)核模塊。

      make install

      把相關(guān)文件拷貝到默認的目錄。

      3、此命令是裝載壓縮映像文件zImage到flash存儲器中,地址是kernel分區(qū),并采用xmodem傳輸協(xié)議。

      4、此命令是設(shè)置網(wǎng)卡1的地址192.168.1.1,掩碼為255.255.255.0,不寫netmask參數(shù)則默認為255.255.255.0。

      5、此命令將nfs服務(wù)的共享目錄sharedir加載到/mnt/nfs。

      6、此命令是裝載根文件系統(tǒng)root.cramfs到flash存儲器中,地址是根文件系統(tǒng)分區(qū),并采用xmodem傳輸協(xié)議。

      7、這個命令的操作同時進行了分區(qū)和格式化,0~128K存放vivi,128K~192K存放VIVI控制臺指令,192K~1216K存放kernel,1216K~4288K存放root,其余部分存放應(yīng)用程序。

      第6章

      1.使用虛擬地址尋址整個系統(tǒng)的主存和輔存的方式在現(xiàn)代操作系統(tǒng)中被稱為虛擬內(nèi)存。虛擬內(nèi)存的管理方法使系統(tǒng)既可以運行體積比物理內(nèi)存還要大的應(yīng)用程序,也可以實現(xiàn)“按需調(diào)頁”策略,既滿足了程序的運行速度,又節(jié)約了物理內(nèi)存空間。2.進程內(nèi)存區(qū)域涉及到5種數(shù)據(jù)段,即:

      ①代碼段:代碼段是用來存放可執(zhí)行文件的操作指令。

      ②數(shù)據(jù)段:數(shù)據(jù)段用來存放可執(zhí)行文件中已初始化全局變量。③BSS段:BSS段包含了程序中未初始化的全局變量。④堆(heap):用于存放進程運行中被動態(tài)分配的內(nèi)存段,它的大小并不固定,可動態(tài)擴張或縮減。

      ⑤棧:棧是用戶存放程序臨時創(chuàng)建的局部變量。3.在Linux系統(tǒng)中,內(nèi)核在最高級執(zhí)行,也稱為“系統(tǒng)態(tài)”,在這一級任何操作都可以執(zhí)行。而應(yīng)用程序則執(zhí)行在最低級,即所謂的“用戶態(tài)”。在這一級處理器禁止對硬件的直接訪問和對內(nèi)存的未授權(quán)訪問。模塊是在所謂的“內(nèi)核空間”中運行的,而應(yīng)用程序則是在“用戶空間”中運行的。它們分別引用不同的內(nèi)存映射,也就是程序代碼使用不同的“地址空間”。4.共享內(nèi)存區(qū)域是被多個進程共享的一部分物理內(nèi)存。如果多個進程都把該內(nèi)存區(qū)域映射到自己的虛擬地址空間,則這些進程就都可以直接訪問該共享內(nèi)存區(qū)域,從而可以通過該區(qū)域進行通信。共享內(nèi)存是進程間共享數(shù)據(jù)的一種最快的方法,一個進程向共享內(nèi)存區(qū)域?qū)懭肓藬?shù)據(jù),共享這個內(nèi)存區(qū)域的所有進程就可以立刻看到其中的內(nèi)容。5.內(nèi)存管理利用虛擬文件系統(tǒng)支持交換,交換進程(swapd)定期由調(diào)度程序調(diào)度,這也是內(nèi)存管理依賴于進程調(diào)度的唯一原因。當(dāng)一個進程存取的內(nèi)存映射被換出時,內(nèi)存管理向文件系統(tǒng)發(fā)出請求,同時,掛起當(dāng)前正在運行的進程。

      第9章

      1.參考答案:

      Mutex互斥量,用于操作某個臨界資源時對該資源上鎖,以實現(xiàn)互斥地對獨占資源的使用。Semophore信號燈,信號燈內(nèi)有一計數(shù)器,可以用于對多個同類資源的分配。

      Condition條件變量,條件變量用于等待信號。當(dāng)一個線程需要等待某個信號時,就可到條件變量上等待,當(dāng)信號具備時,系統(tǒng)會喚醒該線程繼續(xù)運行。2.參考答案:

      本地:共享內(nèi)存+信號量,適合于大量數(shù)據(jù)傳輸。Linux支持系統(tǒng)V和POSIX的共享內(nèi)存和信號量。(5分)

      遠程:Socket+應(yīng)用協(xié)議。適合于跨網(wǎng)絡(luò)的(大量)數(shù)據(jù)傳輸。Linux支持BSD的socket。應(yīng)用層協(xié)議需要自行設(shè)計。(5分)

      3.答案要點:程序是編譯后形成的可執(zhí)行代碼,是靜止的。進程是程序的一次執(zhí)行,是活動的。線程是進程的可執(zhí)行單元,同一進程的不同線程共享進程的資源和地址空間。4.兩種實現(xiàn)方法,一種是繼承Thread,另外一種是實現(xiàn)接口Runnable。

      同步的實現(xiàn)方法有兩種,分別是synchronized, wait與notify。用synchronized可以對一段代碼、一個對象及一個方法進行加鎖。用wait與notify可以使對象處于等待及喚醒方式導(dǎo)致同步,因為每個對象都直接或間接的繼承了Object類。

      5、什么是BootLoader?主要有幾種工作模式及主要功能是什么? 答:

      Bootloader就是操作系統(tǒng)內(nèi)核運行的一段小程序,完成進行初始化系統(tǒng)硬件設(shè)置的任務(wù),(2分)

      分為啟動加載模式和下載模式。(1啟動加載模式

      啟動加載(Boot laoding)模式是指 Bootloader 從目標(biāo)機上的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到 RAM 中運行,整個過程并沒有用戶的介入。(2分)(2)下載模式

      在下載模式下,目標(biāo)機上的 Bootloader 將先通過串口連接或網(wǎng)絡(luò)連接等通信手段從宿主機下載文件。(2分)

      6、簡述Bootloader有何作用?

      答案要點:(1)首先,bootloader是在特定硬件平臺運行的程序,嚴(yán)重依賴于硬件平臺,需要移植;(2)是系統(tǒng)上電之后,第一個運行的程序,系統(tǒng)在上電或復(fù)位時通常都從地址 0x0 處開始執(zhí)行,而在這個地址處安排的通常就是系統(tǒng)的 Boot Loader 程序;(3)bootloader程序的設(shè)計目標(biāo)是啟動嵌入式操作系統(tǒng),嵌入式操作系統(tǒng)的啟動需要一定的條件,這些條件由bootloader來滿足;(4)Bootloader一般具有對存儲器和網(wǎng)絡(luò)接口操作的功能;如擦除、讀寫Flash,通過USB、串口下載文件等

      第四篇:實時操作系統(tǒng)報告

      實時操作系統(tǒng)課程實驗報告

      專業(yè):通信1001 學(xué)號:3100601025 姓名:陳治州

      完成時間:2013年6月11日

      實驗 簡易電飯煲的模擬

      一.實驗?zāi)康模?/p>

      掌握在基于嵌入式實時操作系統(tǒng)μC/OS-II的應(yīng)用中,基于多任務(wù)的模式的編程方法。鍛煉綜合應(yīng)用多任務(wù)機制,任務(wù)間的通信機制,內(nèi)存管理等的能力。

      二.實驗要求:

      1.按“S”開機,系統(tǒng)進入待機狀態(tài),時間區(qū)域顯示當(dāng)前北京時間,默認模式“煮飯”;2.按“C”選擇模式,即在“煮飯”、“煮粥”和“煮面”模式中循環(huán)選擇;

      3.按“B”開始執(zhí)行模式命令,“開始”狀態(tài)選中,時間區(qū)域開始倒計時,倒計時完成后進入“保溫”狀態(tài),同時該狀態(tài)顯示選中,時間區(qū)域顯示保溫時間;

      4.按“Q”取消當(dāng)前工作狀態(tài),系統(tǒng)進入待機狀態(tài),時間區(qū)域顯示北京時間,模式為當(dāng)前模式;

      5.按“X”退出系統(tǒng),時間區(qū)域不顯示。

      6.煮飯時長為30,煮粥時長為50,煮面時長為40.三.實驗設(shè)計:

      1.設(shè)計思路:

      以老師所給的五個程序為基礎(chǔ),看懂每個實驗之后,對borlandc的操作有了大概的認識,重點以第五個實驗Task_EX為框架,利用其中界面顯示與按鍵掃描以及做出相應(yīng)的響應(yīng),對應(yīng)實現(xiàn)此次實驗所需要的功能。

      本次實驗分為界面顯示、按鍵查詢與響應(yīng)、切換功能、時鐘顯示與倒計時模塊,綜合在一起實驗所需功能。2.模塊劃分圖:(1)界面顯示:

      Main()Taskstart()Taskstartdispinit()在TaskStartDispInit()函數(shù)中,使用PC_DispStr()函數(shù)畫出界面。(2)按鍵查詢與響應(yīng):

      Main()Taskstart()在TaskStart()函數(shù)中,用if(PC_GetKey(&key)== TRUE)判斷是否有按鍵輸入。然后根據(jù)key的值,判斷輸入的按鍵是哪一個;在響應(yīng)中用switch語句來執(zhí)行對應(yīng)按鍵的響應(yīng)。(3)切換功能:

      l計數(shù)“C”按鍵的次數(shù)M=l%3Switch(m)M=0,1,2對應(yīng)于煮飯,煮粥,煮面,然后使用PC_DispStr()函數(shù)在選擇的選項前畫上“@”指示,同時,在其余兩項錢畫上“ ”以“擦出”之前畫下的“@”,注意l自增。

      四.主要代碼:

      #include “stdio.h” #include “includes.h” #include “time.h” #include “dos.h” #include “sys/types.h” #include “stdlib.h” #define TASK_STK_SIZE

      512

      #define N_TASKS

      OS_STK

      TaskStk[N_TASKS][TASK_STK_SIZE];

      OS_STK

      TaskStartStk[TASK_STK_SIZE];

      INT8U

      TaskData[N_TASKS];

      void Task0(void *pdata);

      void TaskStart(void *pdata);

      static void TaskStartDispInit(void);

      void main(void){

      PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);

      OSInit();

      PC_DOSSaveReturn();

      PC_VectSet(uCOS, OSCtxSw);

      OSTaskCreate(TaskStart,(void *)0, &TaskStartStk[TASK_STK_SIZE-1], 4);

      OSStart();

      } void TaskStart(void *pdata){ #if OS_CRITICAL_METHOD == 3

      OS_CPU_SR cpu_sr;#endif

      INT8U l,m;

      INT16S key;

      l=0;

      pdata = pdata;

      TaskStartDispInit();

      OS_ENTER_CRITICAL();

      PC_VectSet(0x08, OSTickISR);

      PC_SetTickRate(OS_TICKS_PER_SEC);

      OS_EXIT_CRITICAL();

      OSStatInit();

      for(;;){

      if(PC_GetKey(&key)== TRUE)

      {

      switch(key)

      {

      case 0x1B:

      PC_DOSReturn();

      break;

      case 0x43:

      { m=(l%3);

      switch(m)

      { case 0: {

      PC_DispStr(26,6, “@”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);

      PC_DispStr(40,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(55,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);} break;

      case 1: { PC_DispStr(26,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);

      PC_DispStr(40,6, “@”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);

      PC_DispStr(55,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);} break;case 2: { PC_DispStr(26,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);

      PC_DispStr(40,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(55,6, “@”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);}

      break;}

      l++;} break;

      } } OSCtxSwCtr = 0;

      OSTimeDlyHMSM(0, 0, 1, 0);

      } } static void TaskStartDispInit(void){ PC_DispStr(0, 0, “

      uC/OS-II, The Real-Time Kernel

      ”, DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);PC_DispStr(0, 1, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 2, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 3, “

      dianfanbao shiyan

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 4, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 5, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 6, “

      kai shi.zhu fan.zhu zhou.zhu mian.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 7, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 8, “

      bao wen.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 9, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 10, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 11, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 12, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 13, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 14, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 15, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 16, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 17, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 18, “

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 19, “ 'S':kai ji.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr(0, 20, “ 'C':mo shi qie huan.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr(0, 21, “ 'B':kai shi zhi xin.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr(0, 22, “ 'Q':qu xiao dang qian gong zuo zhuang tai.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr(0, 23, “ 'X':tui chu xi tong.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);

      PC_DispStr(0, 24, “

      <-PRESS 'ESC' TO QUIT->

      ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);}

      五.運行界面:

      (1)主界面:

      (2)顯示北京時間:

      (3)模式切換:

      (4)倒計時:

      (5)保溫執(zhí)行時間:

      六.總結(jié):

      本次實驗主要以老師所給的實驗事例為基礎(chǔ),并結(jié)合老師課堂講的內(nèi)容,理解編寫程序。做實驗本實驗前,先執(zhí)行了一下事例程序,以此了解borlandc的一些基本操作;然后就是看懂每個實驗的框架和主要部分;接著,將事例程序中的部分思想運用到本次實驗中,其中以顯示界面的思想運用的最多;除此以外,在模式切換上花了最大的精力,最終的解決方法是以變量l作為一個計數(shù)值,并運用switch語句在選擇的模式上畫上“@”,同時還得注意在未選擇的模式上畫上空格來“擦除”之前畫上的@;在查詢按鍵上,同樣運用switch語句......這次實驗收獲不少,不僅對之前學(xué)的C語言有了更進一步的鞏固,而且還強化了ucos里面的多任務(wù)的一些認識;同時,以前對DOS界面很陌生,但本次實驗使用的正是DOS界面,通過幾天的經(jīng)歷,對DOS中的編譯、“help”等各個方面有了更深入的認識,不再害怕使用DOS了。

      對本課程有很大的興趣,在以后的課余時間里我會不斷學(xué)習(xí)這些知識。

      第五篇:嵌入式操作系統(tǒng)實驗報告

      實驗一 嵌入式開發(fā)環(huán)境的建立

      一、實驗?zāi)康?/p>

      通過此實驗系統(tǒng),讀者可以了解嵌入式實時操作系統(tǒng) uC/OS-II 的內(nèi)核機制和運行原理。本實驗系統(tǒng)展示了 uC/OS-II 各方面的管理功能,包括信號量、隊列、內(nèi)存、時鐘等。在各個實驗中具體介紹了 uC/OS-II 的相關(guān)函數(shù)。讀者在做實驗的同時能夠結(jié)合理論知識加以分析,了解各個函數(shù)的作用和嵌入式應(yīng)用程序的設(shè)計方法,最終對整個 uC/OS-II 和嵌入式操作系統(tǒng)的應(yīng)用有較為清楚的認識。

      二、實驗步驟

      1.安裝集成開發(fā)環(huán)境LambdaEDU 集成開發(fā)環(huán)境LambdaEDU 的安裝文件夾為 LambdaEDU,其中有一個名為“Setup.exe” 的文件,直接雙擊該文件便可啟動安裝過程。具體的安裝指導(dǎo)請看“LambdaEDU 安裝手 冊.doc”文件。

      當(dāng) LambdaEDU 安裝完畢之后,我們看到的是一個空的界面,現(xiàn)在就開始一步一步地將 我們的實驗項目建立并運行起來。

      2.建立項目

      為了我們的實驗運行起來,需要建立1 個項目基于x86 虛擬機的標(biāo)準(zhǔn)應(yīng)用項目。通過點 擊“文件”、“新建”、“項目”開始根據(jù)向?qū)?chuàng)建一個項目。

      在隨后出現(xiàn)的對話框中選擇“Tool/標(biāo)準(zhǔn)應(yīng)用項目”,點擊下一步,開始創(chuàng)建一個標(biāo)準(zhǔn)的 可執(zhí)行的應(yīng)用程序項目。

      在隨后出現(xiàn)的對話框中填入項目名稱“ucos_x86_demo”。點擊“下一步”。

      選擇“pc386 uC/OS-II 應(yīng)用(x86)”作為該項目的應(yīng)用框架。點擊“下一步”

      選擇“pc386_elf_tra_debug”作為該項目的基本配置。點擊“完成”。

      新創(chuàng)建的項目“ucos_x86_demo”將會被添加到項目列表。src 文件夾下保存了該項目中 包含的源文件。ucos2 文件夾中包含了移植到x86 虛擬機的全部代碼。init.c 文件是基于ucos2 和本虛擬機的一個應(yīng)用程序。在進行ucos2 內(nèi)核實驗中,只需要替換init.c 文件,即可。文

      件名不限,但是文件名中最好不要使用英文符號和數(shù)字以外的其他字符,3.構(gòu)建項目

      到這里,項目配置全部完成。接下來就可以進行構(gòu)建項目了。

      第一次構(gòu)建本項目,在此項目上點擊右鍵,選擇“重建BSP 及項目”。即可開始構(gòu)建。

      之后彈出的對話框顯示了構(gòu)建的進度??梢渣c擊“在后臺運行”,以隱藏該對話框

      在構(gòu)建的同時,在右下角的“構(gòu)建信息”視圖輸出構(gòu)建過程中的詳細信息:

      注:“重新構(gòu)建”將本項目中的全部源代碼進行一次完全的編譯和連接,花費時間較多。“構(gòu)建項目”則僅僅將新修改過的源代碼進行編譯和連接,花費時間最少?!爸亟˙SP及項 目”,不但要完成“重新構(gòu)建”的全部工作,另外還要編譯與該項目有關(guān)的的LambdaEDU 中內(nèi)置的部分代碼,花費時間最多。但是在項目剛建立后,第一次構(gòu)建時需要選擇“重建 BSP 及項目”。以后的構(gòu)建中選擇“重新構(gòu)建”或“構(gòu)建項目”即可。另外,在替換了源代 碼中的文件后,需要選擇“重新構(gòu)建”來完成該項目的構(gòu)建。

      4.配置虛擬機和目標(biāo)機代理

      (1)制作X86啟動盤

      在 LambdaEDU 中依次點擊“工具”、“Bochs”、“制作虛擬機啟動映象”。對啟動盤進行一些參數(shù)設(shè)置后(如下圖所示),系統(tǒng)將自動為你生成一個PC 虛擬機的 啟動盤映像。

      (2)配置虛擬機 選擇使用的網(wǎng)絡(luò)適配器(網(wǎng)卡)后,點擊“確定”完成配置。

      注意:如果計算機上有多網(wǎng)卡,請將其他網(wǎng)卡停用(包括 VMware 虛擬機添加的虛擬 網(wǎng)卡)。

      (3)創(chuàng)建目標(biāo)機代理

      配置好虛擬機后,創(chuàng)建目標(biāo)機代理:點擊LambdaEDU 左下方窗口中綠色的十字符號,在彈出的窗口中選擇“基于TA 的連接方式”,并點擊“下一步”。

      在彈出的“新目標(biāo)機連接配置中”的這些參數(shù),應(yīng)該與之前制作啟動盤時設(shè)置的參數(shù)一致。

      注意:

      名字:輸入目標(biāo)機的名字(缺省是 default),注意如果和現(xiàn)有目標(biāo)機重名的話,改個名 字。

      連接類型:默認選擇 UDP IP地址:這里輸入目標(biāo)機(在本實驗系統(tǒng)中是虛擬機)的 IP地址;

      最后點擊“確定”,在目標(biāo)機管理窗口中,可以看到新增加了一個名為default 的目標(biāo)機 節(jié)點

      (4)調(diào)試應(yīng)用 啟動虛擬機。

      虛擬機啟動后的畫面如下(其中顯示的IP 地址創(chuàng)建虛擬機啟動盤時填入的IP 地址)中設(shè)置的IP 地址):

      在成功完成構(gòu)建的項目ucos_x86_demo 中的“pc386_elf_tra_debug”上點擊鼠標(biāo)右鍵,在彈出的菜單中選擇“調(diào)試”,啟動調(diào)試器調(diào)試生成的程序:

      第一次進行調(diào)試/運行,需要選擇目標(biāo)機,如下圖,選擇“Default”,點擊“確定”,開 始向目標(biāo)機(虛擬機)下載應(yīng)用程序。程序下載完成后,會彈出一個“確認透視圖切換”對話框,選擇“是”,切換到調(diào)試透 視圖。

      調(diào)試的界面如下:

      點擊綠色的按鈕,全速運行。

      注意:全速運行后,程序不能夠被暫停和停止。

      三、實驗過程中遇到的問題及體會

      在設(shè)置IP地址時,要求該IP地址與本計算機在同一個子網(wǎng)中,同時要求該 IP地址沒有被網(wǎng)絡(luò)上其他計算機使用。此外,通過構(gòu)建開發(fā)環(huán)境,處次體驗到了嵌入式開發(fā)工作的樂趣。

      實驗二 任務(wù)的基本管理

      一、實驗?zāi)康?/p>

      1.理解任務(wù)管理的基本原理,了解任務(wù)的各個基本狀態(tài)及其變遷過程; 2.掌握 uC/OS-II 中任務(wù)管理的基本方法(創(chuàng)建、啟動、掛起、解掛任務(wù)); 3.熟練使用 uC/OS-II 任務(wù)管理的基本系統(tǒng)調(diào)用。

      二、實驗原理及程序結(jié)構(gòu)

      1.實驗設(shè)計

      為了展現(xiàn)任務(wù)的各種基本狀態(tài)及其變遷過程,本實驗設(shè)計了 Task0、Task1 兩個任務(wù): 任務(wù) Task0 不斷地掛起自己,再被任務(wù) Task1 解掛,兩個任務(wù)不斷地切換執(zhí)行。通過本實驗,讀者可以清晰地了解到任務(wù)在各個時刻的狀態(tài)以及狀態(tài)變遷的原因。2.運行流程 描述如下:

      (1)系統(tǒng)經(jīng)歷一系列的初始化過程后進入 boot_card()函數(shù),在其中調(diào)用 ucBsp_init()進 行板級初始化后,調(diào)用 main()函數(shù);

      (2)main()函數(shù)調(diào)用 OSInit()函數(shù)對 uC/OS-II 內(nèi)核進行初始化,調(diào)用 OSTaskCreate 創(chuàng) 建起始任務(wù) TaskStart;

      (3)main()函數(shù)調(diào)用函數(shù) OSStart()啟動 uC/OS-II 內(nèi)核的運行,開始多任務(wù)的調(diào)度,執(zhí) 行當(dāng)前優(yōu)先級最高的就緒任務(wù) TaskStart;(4)TaskStart 完成如下工作:

      a、安裝時鐘中斷并初始化時鐘,創(chuàng)建 2 個應(yīng)用任務(wù);

      b、掛起自己(不再被其它任務(wù)喚醒),系統(tǒng)切換到當(dāng)前優(yōu)先級最高的就緒任務(wù)Task0。之后整個系統(tǒng)的運行流程如下:

      ? t1 時刻,Task0 開始執(zhí)行,它運行到 t2 時刻掛起自己;

      ? t2 時刻,系統(tǒng)調(diào)度處于就緒狀態(tài)的優(yōu)先級最高任務(wù) Task1 執(zhí)行,它在 t3 時刻喚醒Task0,后者由于優(yōu)先級較高而搶占 CPU;

      ? Task0 執(zhí)行到 t4 時刻又掛起自己,內(nèi)核調(diào)度 Task1 執(zhí)行; ? Task1 運行至 t5 時刻再度喚醒 Task0; ? ……

      3.μC/OS-Ⅱ中的任務(wù)描述

      一個任務(wù)通常是一個無限的循環(huán),由于任務(wù)的執(zhí)行是由操作系統(tǒng)內(nèi)核調(diào)度的,因此任務(wù)是絕不會返回的,其返回參數(shù)必須定義成 void。在μC/OS-Ⅱ中,當(dāng)一個運行著的任務(wù)使一個比它優(yōu)先級高的任務(wù)進入了就緒態(tài),當(dāng)前任務(wù)的 CPU 使用權(quán)就會被搶占,高優(yōu)先級任務(wù)會立刻得到 CPU 的控制權(quán)(在系統(tǒng)允許調(diào)度和任務(wù)切換的前提下)。μC/OS-Ⅱ可以管理多達 64 個任務(wù),但目前版本的μC/OS-Ⅱ有兩個任務(wù)已經(jīng)被系統(tǒng)占用了(即空閑任務(wù)和統(tǒng)計任務(wù))。必須給每個任務(wù)賦以不同的優(yōu)先級,任務(wù)的優(yōu)先級號就是任務(wù)編號(ID),優(yōu)先級可以從 0 到 OS_LOWEST_PR10-2。優(yōu)先級號越低,任務(wù)的優(yōu)先級越高。μC/OS-Ⅱ總是運行進入就緒態(tài)的優(yōu)先級最高的任務(wù)。4.源程序說明(1)TaskStart任務(wù)

      TaskStart 任務(wù)負責(zé)安裝操作系統(tǒng)的時鐘中斷服務(wù)例程、初始化操作系統(tǒng)時鐘,并創(chuàng)建所 有的應(yīng)用任務(wù):

      UCOS_CPU_INIT();/* Install uC/OS-II's clock tick ISR */ UCOS_TIMER_START();/*Timer 初始化*/ TaskStartCreateTasks();/* Create all the application tasks */ OSTaskSuspend(OS_PRIO_SELF);

      具體負責(zé)應(yīng)用任務(wù)創(chuàng)建的 TaskStartCreateTasks 函數(shù)代碼如下,它創(chuàng)建了兩個應(yīng)用任務(wù) Task0 和 Task1:

      void TaskStartCreateTasks(void){

      INT8U i;

      for(i = 0;i < N_TASKS;i++)// Create tasks {

      TaskData[i] = i;// Each task will display itsown information }

      OSTaskCreate(Task0,(void *)&TaskData[0], &TaskStk[0][TASK_STK_SIZE1], 6);}

      TaskStart 任務(wù)完成上述操作后將自己掛起,操作系統(tǒng)將調(diào)度當(dāng)前優(yōu)先級最高的應(yīng)用任務(wù)Task0 運行。(2)應(yīng)用任務(wù)

      應(yīng)用任務(wù) Task0 運行后將自己掛起,之后操作系統(tǒng)就會調(diào)度處于就緒狀態(tài)的優(yōu)先級最高的任務(wù),具體代碼如下: void Task0(void *pdata){

      INT8U i;INT8U err;i=*(int *)pdata;for(;;){

      printf(“Application tasks switched %d times!nr”,++count);

      printf(“TASK_0 IS RUNNING..............................................................nr”);printf(“task_1 is suspended!nr”);

      printf(“**************************************************nr”);err=OSTaskSuspend(5);// suspend itself } }

      應(yīng)用任務(wù) Task1 運行后將 Task0 喚醒,使其進入到就緒隊列中: void Task1(void *pdata){

      INT8U i;INT8U err;i=*(int *)pdata;for(;;){

      OSTimeDly(150);

      printf(“Application tasks switched %d times!nr”,++count);printf(“task_0 is suspended!nr”);printf(“TASK_1 IS RUNNING..............................................................nr”);printf(“**************************************************nr”);OSTimeDly(150);

      err=OSTaskResume(5);/* resume task0 */ } }

      三、運行及觀察應(yīng)用輸出信息

      按照本實驗手冊第一部分所描述的方法建立應(yīng)用項目并完成構(gòu)建,當(dāng)我們在 LambdaEDU 調(diào)試器的控制下運行構(gòu)建好的程序后,將看到在μC/OS-Ⅱ內(nèi)核的調(diào)度管理下,兩個應(yīng)用任務(wù)不斷切換執(zhí)行的情形:

      四、本實驗中用到的μC/OS-Ⅱ相關(guān)函數(shù)

      4.1 OSTaskCreate()

      OSTaskCreate()建立一個新任務(wù)。任務(wù)的建立可以在多任務(wù)環(huán)境啟動之前,也可以在 正在運行的任務(wù)中建立。中斷處理程序中不能建立任務(wù)。一個任務(wù)必須為無限循環(huán)結(jié)構(gòu),且 不能有返回點。

      OSTaskCreate()是為與先前的μC/OS 版本保持兼容,新增的特性在 OSTaskCreateExt()函數(shù)中。

      無論用戶程序中是否產(chǎn)生中斷,在初始化任務(wù)堆棧時,堆棧的結(jié)構(gòu)必須與 CPU 中斷后 寄存器入棧的順序結(jié)構(gòu)相同。詳細說明請參考所用處理器的手冊。函數(shù)原型:

      INT8U OSTaskCreate(void(*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);

      參數(shù)說明:

      task 是指向任務(wù)代碼首地址的指針。

      pdata 指向一個數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)用來在建立任務(wù)時向任務(wù)傳遞參數(shù)。

      ptos 為指向任務(wù)堆棧棧頂?shù)闹羔?。任?wù)堆棧用來保存局部變量,函數(shù)參數(shù),返回地址 以及任務(wù)被中斷時的 CPU 寄存器內(nèi)容。任務(wù)堆棧的大小決定于任務(wù)的需要及預(yù)計的中斷嵌 套層數(shù)。計算堆棧的大小,需要知道任務(wù)的局部變量所占的空間,可能產(chǎn)生嵌套調(diào)用的函數(shù),及中斷嵌套所需空間。如果初始化常量 OS_STK_GROWTH 設(shè)為 1,堆棧被設(shè)為從內(nèi)存高地址 向 低 地 址 增 長,此時 ptos 應(yīng) 該 指 向任 務(wù)堆 棧 空 間 的 最 高 地 址。反 之,如 果OS_STK_GROWTH 設(shè)為 0,堆棧將從內(nèi)存的低地址向高地址增長。prio 為任務(wù)的優(yōu)先級。每個任務(wù)必須有一個唯一的優(yōu)先級作為標(biāo)識。數(shù)字越小,優(yōu)先級越高。返回值:

      OSTaskCreate()的返回值為下述之一: ? OS_NO_ERR:函數(shù)調(diào)用成功。

      ? OS_PRIO_EXIST:具有該優(yōu)先級的任務(wù)已經(jīng)存在。

      ? OS_PRIO_INVALID:參數(shù)指定的優(yōu)先級大于 OS_LOWEST_PRIO。? OS_NO_MORE_TCB:系統(tǒng)中沒有 OS_TCB 可以分配給任務(wù)了。注意:

      任務(wù)堆棧必須聲明為 OS_STK 類型。

      在任務(wù)中必須調(diào)用μC/OS 提供的下述過程之一:延時等待、任務(wù)掛起、等待事件發(fā)生(等待信號量,消息郵箱、消息隊列),以使其他任務(wù)得到 CPU。用 戶 程 序 中 不 能 使 用 優(yōu) 先 級 0,1,2,3,以 及 OS_LOWEST_PRIO-3, OS_LOWEST_PRIO-2, OS_LOWEST_PRIO-1, OS_LOWEST_PRIO。這些優(yōu)先級μC/OS 系統(tǒng)

      保留,其余的 56 個優(yōu)先級提供給應(yīng)用程序。4.2 OSTaskSuspend()

      OSTaskSuspend()無條件掛起一個任務(wù)。調(diào)用此函數(shù)的任務(wù)也可以傳遞參數(shù)

      OS_PRIO_SELF,掛起調(diào)用任務(wù)本身。當(dāng)前任務(wù)掛起后,只有其他任務(wù)才能喚醒。任務(wù)掛起 后,系統(tǒng)會重新進行任務(wù)調(diào)度,運行下一個優(yōu)先級最高的就緒任務(wù)。喚醒掛起任務(wù)需要調(diào)用 函數(shù) OSTaskResume()。

      任務(wù)的掛起是可以疊加到其他操作上的。例如,任務(wù)被掛起時正在進行延時操作,那么 任務(wù)的喚醒就需要兩個條件:延時的結(jié)束以及其他任務(wù)的喚醒操作。又如,任務(wù)被掛起時正 在等待信號量,當(dāng)任務(wù)從信號量的等待對列中清除后也不能立即運行,而必須等到被喚醒后。函數(shù)原型:

      INT8U OSTaskSuspend(INT8U prio);參數(shù)說明:

      prio 為指定要獲取掛起的任務(wù)優(yōu)先級,也可以指定參數(shù) OS_PRIO_SELF,掛起任務(wù)本 身。此時,下一個優(yōu)先級最高的就緒任務(wù)將運行。返回值:

      OSTaskSuspend()的返回值為下述之一: ? OS_NO_ERR:函數(shù)調(diào)用成功。

      ? OS_TASK_ SUSPEND_IDLE:試圖掛起 μC/OS-II 中的空閑任務(wù)(Idle task)。此為非法操作。

      ? OS_PRIO_INVALID :參數(shù)指定的優(yōu)先級大于 OS_LOWEST_PRIO 或沒有設(shè)定 ? OS_PRIO_SELF 的值。

      ? OS_TASK_ SUSPEND _PRIO:要掛起的任務(wù)不存在。注意:

      在程序中 OSTaskSuspend()和 OSTaskResume()應(yīng)該成對使用。用 OSTaskSuspend()掛起的任務(wù)只能用 OSTaskResume()喚醒。4.3 OSTaskResume()

      OSTaskResume()喚醒一個用 OSTaskSuspend()函數(shù)掛起的任務(wù)。OSTaskResume()也是唯一能“解掛”掛起任務(wù)的函數(shù)。函數(shù)原型:

      INT8UOSTaskResume(INT8U prio);參數(shù)說明:

      prio 指定要喚醒任務(wù)的優(yōu)先級。返回值:

      OSTaskResume()的返回值為下述之一: ? OS_NO_ERR:函數(shù)調(diào)用成功。

      ? OS_TASK_RESUME_PRIO:要喚醒的任務(wù)不存在。

      ? OS_TASK_NOT_SUSPENDED:要喚醒的任務(wù)不在掛起狀態(tài)。

      ? OS_PRIO_INVALID:參數(shù)指定的優(yōu)先級大于或等于 OS_LOWEST_PRIO。

      五、實驗過程中遇到的問題及體會

      實驗過程中體會到了嵌入式開發(fā)的樂趣,對上課老師所講的內(nèi)容有了進一步的認識與理解。17 實驗三 信號量:哲學(xué)家就餐問題的實現(xiàn)

      一、實驗?zāi)康?/p>

      掌握在基于嵌入式實時操作系統(tǒng) uC/OS-II 的應(yīng)用中,任務(wù)使用信號量的一般原理。通 過經(jīng)典的哲學(xué)家就餐實驗,了解如何利用信號量來對共享資源進行互斥訪問。

      二、實驗原理及程序結(jié)構(gòu)

      1.實驗設(shè)計

      掌握在基于嵌入式實時操作系統(tǒng) uC/OS-II 的應(yīng)用中,任務(wù)使用信號量的一般原理。通 過經(jīng)典的哲學(xué)家就餐實驗,了解如何利用信號量來對共享資源進行互斥訪問。2.源程序說明

      五個哲學(xué)家任務(wù)(ph1、ph2、ph3、ph4、ph5)主要有兩種過程:思考(即睡眠一段時

      間)和就餐。每個哲學(xué)家任務(wù)在就餐前必須申請并獲得一左一右兩支筷子,就餐完畢后釋放 這兩支筷子。五個哲學(xué)家圍成一圈,每兩人之間有一支筷子。一共有五支筷子,在該實驗中 用了五個互斥信號量來代表。每個任務(wù)的代碼都一樣,如下所示: void Task(void *pdata){

      INT8U err;INT8U i;INT8U j;

      i=*(int *)pdata;j=(i+1)% 5;

      uC/OS-II 實驗指導(dǎo)書 for(;;){

      TaskThinking2Hungry(i);OSSemPend(fork[i], 0, &err);

      OSSemPend(fork[j], 0, &err);/* Acquire semaphores to eat */ TaskEat(i);

      OSSemPost(fork[j]);

      OSSemPost(fork[i]);/* Release semaphore */ OSTimeDly(200);/* Delay 10 clock tick */ } }

      操作系統(tǒng)配置

      修改 uC_OS-II/OS_CFG.h: :: :

      #define OS_MAX_EVENTS 10 /*最多可以有 10 個事件*/ #define OS_MAX_FLAGS 5 /*最多可以有 5 個事件標(biāo)志*/

      #define OS_MAX_MEM_PART 5 /*最多可以劃分 5 個內(nèi)存塊*/ #define OS_MAX_QS 2 /*最多可以使用 2 個隊列*/ #define OS_MAX_TASKS 8 /*最多可以創(chuàng)建 8 個任務(wù)*/

      #define OS_LOWEST_PRIO 14 /*任務(wù)優(yōu)先級不可以大于 14*/ #define OS_TASK_IDLE_STK_SIZE 1024 /*空閑任務(wù)堆棧大小*/ #define OS_TASK_STAT_EN 1 /*是否允許使用統(tǒng)計任務(wù)*/ #define OS_TASK_STAT_STK_SIZE 1024 /*統(tǒng)計任務(wù)堆棧大小*/ #define OS_FLAG_EN 1 /*是否允許使用事件標(biāo)志功能*/

      #define OS_FLAG_WAIT_CLR_EN 1 /*是否允許等待清除事件標(biāo)志*/ #define OS_FLAG_ACCEPT_EN 1 /*是否允許使用 OSFlagAccept()*/ #define OS_FLAG_DEL_EN 1 /*是否允許使用 OSFlagDel()*/

      #define OS_FLAG_QUERY_EN 1 /*是否允許使用 OSFlagQuery()*/ #define OS_MBOX_EN 0 /*是否允許使用郵箱功能*/

      #define OS_MEM_EN 0 /*是否允許使用內(nèi)存管理的功能*/

      #define OS_MUTEX_EN 0 /*是否允許使用互斥信號量的功能*/ #define OS_Q_EN 0 /*是否允許使用隊列功能*/ #define OS_SEM_EN 1 /*是否允許使用信號量功能*/

      #define OS_SEM_ACCEPT_EN 1 /*是否允許使用 OSSemAccept()*/ #define OS_SEM_DEL_EN 1 /*是否允許使用OSSemDel()*/

      #define OS_SEM_QUERY_EN 1 /*是否允許使用OSSemQuery()*/ #define OS_TASK_CHANGE_PRIO_EN 1 /* 是 否 允 許 使 用 OSTaskChangePrio()*/

      #define OS_TASK_CREATE_EN 1 /*是否允許使用 OSTaskCreate()*/

      #define OS_TASK_CREATE_EXT_EN 1 /*是否允許使用 OSTaskCreateExt()*/ #define OS_TASK_DEL_EN 1 /*是否允許使用 OSTaskDel()*/

      #define OS_TASK_SUSPEND_EN 1 /* 是 否 允 許 使 用 OSTaskSuspend()and OSTaskResume()*/

      #define OS_TASK_QUERY_EN 1 /*是否允許使用 OSTaskQuery()*/ #define OS_TIME_DLY_HMSM_EN 1 /* 是 否 允 許 使 用 OSTimeDlyHMSM()*/

      #define OS_TIME_DLY_RESUME_EN 1 /* 是 否 允 許 使 用 OSTimeDlyResume()*/

      #define OS_TIME_GET_SET_EN 1 /* 是否允許使用 OSTimeGet()和 OSTimeSet()*/

      #define OS_SCHED_LOCK_EN 1 /* 是 否 允 許 使 用 OSSchedLock()和 OSSchedUnlock()*/

      #define OS_TICKS_PER_SEC 200 /*設(shè)置每秒之內(nèi)的時鐘節(jié)拍數(shù)目*/

      三、運行及觀察應(yīng)用輸出信息

      開始,所有的哲學(xué)家先處于 thinking 狀態(tài),然后都進入 hungry 狀態(tài):

      后首先獲得兩個信號量的 1、3 號哲學(xué)家開始 eating,待他們釋放相關(guān)信號量之后,哲

      學(xué)家 2、5、4 獲得所需的信號量并 eating: 應(yīng)用如此這般地循環(huán)執(zhí)行程序下去??

      四、本實驗中用到的μC/OS-Ⅱ相關(guān)函數(shù)

      4.1 OSSemCreate()

      OSSemCreate()函數(shù)建立并初始化一個信號量。信號量的作用如下: ? 允許一個任務(wù)和其他任務(wù)或者中斷同步 ? 取得設(shè)備的使用權(quán) ? 標(biāo)志事件的發(fā)生

      函數(shù)原型:

      OS_EVENT *OSSemCreate((((WORD value))))參數(shù)說明:

      value 參數(shù)是所建立的信號量的初始值,可以取 0 到 65535 之間的任何值。返回值:

      OSSemCreate()函數(shù)返回指向分配給所建立的信號量的控制塊的指針。如果沒有可用的 控制塊,OSSemCreate()函數(shù)返回空指針。注意:

      必須先建立信號量,然后使用。4.2 OSSemPend()

      OSSemPend()函數(shù)用于任務(wù)試圖取得設(shè)備的使用權(quán),任務(wù)需要和其他任務(wù)或中斷同

      步,任務(wù)需要等待特定事件的發(fā)生的場合。如果任務(wù)調(diào)用 OSSemPend()函數(shù)時,信號量 的值大于零,OSSemPend()函數(shù)遞減該值并返回該值。如果調(diào)用時信號量等于零,OSSemPend()函數(shù)函數(shù)將任務(wù)加入該信號量的等待隊列。OSSemPend()函數(shù)掛起當(dāng)前 任務(wù)直到其他的任務(wù)或中斷置起信號量或超出等待的預(yù)期時間。如果在預(yù)期的時鐘節(jié)拍內(nèi)信 號量被置起,μC/OS-Ⅱ默認最高優(yōu)先級的任務(wù)取得信號量恢復(fù)執(zhí)行。一個被 OSTaskSuspend()函數(shù)掛起的任務(wù)也可以接受信號量,但這個任務(wù)將一直保持掛起狀態(tài)直到通過調(diào)用 OSTaskResume()函數(shù)恢復(fù)任務(wù)的運行。函數(shù)原型: :: :

      Void OSSemPend(OS_EVNNT *pevent, INT16U timeout, int8u *err);參數(shù)說明: :: :

      pevent

      是指向信號量的指針。該指針的值在建立該信號量時可以得到。(參考 OSSemCreate()函數(shù))。

      Timeout

      允許一個任務(wù)在經(jīng)過了指定數(shù)目的時鐘節(jié)拍后還沒有得到需要的信號量時 恢復(fù)就緒狀態(tài)。如果該值為零表示任務(wù)將持續(xù)地等待信號量,最大的等待時間為 65535 個時

      鐘節(jié)拍。這個時間長度并不是非常嚴(yán)格的,可能存在一個時鐘節(jié)拍的誤差。

      Err 是指向包含錯誤碼的變量的指針。OSSemPend()函數(shù)返回的錯誤碼可能為下述幾 種:

      ? OS_NO_ERR :信號量不為零。

      ? OS_TIMEOUT :信號量沒有在指定數(shù)目的時鐘周期內(nèi)被設(shè)置。

      ? OS_ERR_PEND_ISR :從中斷調(diào)用該函數(shù)。雖然規(guī)定了不允許從中斷調(diào)用該函數(shù),但 μC/OS-Ⅱ仍然包含了檢測這種情況的功能。

      ?

      OS_ERR_EVENT_TYPE :pevent 不是指向信號量的指針。返回值: 無 注意:

      必須先建立信號量,然后使用。不允許從中斷調(diào)用該函數(shù)。

      4.3 OSSemPost()

      OSSemPost()函數(shù)置起指定的信號量。如果指定的信號量是零或大于零,OSSemPost()函數(shù)遞增該信號量并返回。如果有任何任務(wù)在等待信號量,最高優(yōu)先級的任務(wù)將得到信

      號量并進入就緒狀態(tài)。任務(wù)調(diào)度函數(shù)將進行任務(wù)調(diào)度,決定當(dāng)前運行的任務(wù)是否仍然為最高 優(yōu)先級的就緒狀態(tài)的任務(wù)。函數(shù)原型:

      INT8U OSSemPost(OS_EVENT *pevent);參數(shù)說明:

      pevent

      是指向信號量的指針。該指針的值在建立該信號量時可以得到。(參考 OSSemCreate()函數(shù))。返回值:

      OSSemPost()函數(shù)的返回值為下述之一: ?

      OS_NO_ERR :信號量被成功地設(shè)置 ?

      OS_SEM_OVF :信號量的值溢出

      ?

      OS_ERR_EVENT_TYPE :pevent 不是指向信號量的指針 注意:

      必須先建立信號量,然后使用。4.4 OSTimeDly()

      OSTimeDly()將一個任務(wù)延時若干個時鐘節(jié)拍。如果延時時間大于 0,系統(tǒng)將立即進 行任務(wù)調(diào)度。延時時間的長度可從 0 到 65535 個時鐘節(jié)拍。延時時間 0 表示不進行延時,函

      數(shù)將立即返回調(diào)用者。延時的具體時間依賴于系統(tǒng)每秒鐘有多少時鐘節(jié)拍(由文件 SO_CFG.H 中的常量 OS_TICKS_PER_SEC 設(shè)定)。函數(shù)原型:

      void OSTimeDly(INT16U ticks);參數(shù)說明:

      ticks 為要延時的時鐘節(jié)拍數(shù)。返回值:

      注意:

      注意到延時時間 0 表示不進行延時操作,而立即返回調(diào)用者。為了確保設(shè)定的延時時間,建議用戶設(shè)定的時鐘節(jié)拍數(shù)加 1。例如,希望延時 10 個時鐘節(jié)拍,可設(shè)定參數(shù)為 11。

      五、實驗過程中遇到的問題及體會

      在實驗前要對該問題進行深入的理解,即五個哲學(xué)家任務(wù)(ph1、ph2、ph3、ph4、ph5)主要有兩種過程:思考(即睡眠一段時間)和就餐。每個哲學(xué)家任務(wù)在就餐前必須申請并獲得一左一右兩支筷子,就餐完畢后釋放這兩支筷子。五個哲學(xué)家圍成一圈,每兩人之間有一支筷子。只有理解了,才能更好的進行實驗。

      下載嵌入式實時操作系統(tǒng)(dynaLinux),及其開發(fā)平臺(精)word格式文檔
      下載嵌入式實時操作系統(tǒng)(dynaLinux),及其開發(fā)平臺(精).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        嵌入式操作系統(tǒng)課程報告

        華北水利水電大學(xué)North China University of Water Resources and Electric Power嵌入式操作系統(tǒng)課程報告題目 嵌入式系統(tǒng)課程綜和論述......

        基于UCOS嵌入式實時操作系統(tǒng)的單任務(wù)和多任務(wù)LED顯示總結(jié)----婁...

        基于uCOSII的單任務(wù)和多任務(wù)LED顯示 一、uCOSII簡介 uCOS II是一個微型的實時操作系統(tǒng),包括了一個操作系統(tǒng)最基本的一些特性,如任務(wù)調(diào)度、任務(wù)通信、內(nèi)存管理、中斷管理、定......

        嵌入式Linux操作系統(tǒng)學(xué)習(xí)規(guī)劃(★)

        嵌入式Linux操作系統(tǒng)學(xué)習(xí)規(guī)劃 嵌入式Linux操作系統(tǒng)學(xué)習(xí)規(guī)劃 ARM+LINUX路線,主攻嵌入式Linux操作系統(tǒng)及其上應(yīng)用軟件開發(fā)目標(biāo): (1) 掌握主流嵌入式微處理器的結(jié)構(gòu)與原理(初步定為a......

        七款嵌入式Linux操作系統(tǒng)簡介

        除了智能數(shù)字終端領(lǐng)域以外,Linux在移動計算平臺、智能工業(yè)控制、金融業(yè)終端系統(tǒng),甚至軍事領(lǐng)域都有著廣泛的應(yīng)用前景。這些Linux被統(tǒng)稱為“嵌入式Linux”。下面就來看看都有哪......

        嵌入式操作系統(tǒng)程課程設(shè)計報告

        目錄 一、 實習(xí)任務(wù)和目的????????????1 二、實習(xí)基本要求?????????????1 三、實習(xí)題目???????????????1 四、實習(xí)地點???......

        嵌入式開發(fā)工程師

        任職要求: 1、大學(xué)本科及以上學(xué)歷,2年以上工作經(jīng)驗,計算機電子通訊類專業(yè)畢業(yè); 2、能夠熟練使用POWER PCB或PROTEL或ORCAD等電路設(shè)計軟件進行PCB設(shè)計; 3、熟悉電子元器件,能獨立設(shè)......

        計算機實時操作系統(tǒng)的改善措施

        《計算機實時操作系統(tǒng)的改善措施》 摘要: 實時系統(tǒng)在工業(yè)、商業(yè)和軍事等領(lǐng)域都有非常廣泛的用途,并且已經(jīng)有很多實際的應(yīng)用。一般來說,實時系統(tǒng)通常是比較復(fù)雜的,因為它必須處......

        uc-OS實時操作系統(tǒng)的應(yīng)用和學(xué)習(xí)心得

        uc/OS實時操作系統(tǒng)的應(yīng)用和學(xué)習(xí)心得 這是小弟我最近的研究成果,跟大家交流一下。 目前正在研究嵌入式實時軟件系統(tǒng)設(shè)計方法,有興趣的高手交流一下。這里給大家簡單剖析一下uCO......