欧美色欧美亚洲高清在线观看,国产特黄特色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)實(shí)習(xí)報(bào)告

      時(shí)間:2019-05-12 06:46:14下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫小編為你整理了多篇相關(guān)的《嵌入式系統(tǒng)實(shí)習(xí)報(bào)告》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《嵌入式系統(tǒng)實(shí)習(xí)報(bào)告》。

      第一篇:嵌入式系統(tǒng)實(shí)習(xí)報(bào)告

      一、嵌入式系統(tǒng)開發(fā)與應(yīng)用概述

      在今日,嵌入式ARM 技術(shù)已經(jīng)成為了一門比較熱門的學(xué)科,無論是在電子類的什么領(lǐng)域,你都可以看到嵌入式ARM 的影子。如果你還停留在單片機(jī)級(jí)別的學(xué)習(xí),那么實(shí)際上你已經(jīng)落下時(shí)代腳步了,ARM 嵌入式技術(shù)正以幾何的倍數(shù)高速發(fā)展,它幾乎滲透到了幾乎你所想到的領(lǐng)域。本章節(jié)就是將你領(lǐng)入ARM 的學(xué)習(xí)大門,開始嵌入式開發(fā)之旅。以嵌入式計(jì)算機(jī)為技術(shù)核心的嵌入式系統(tǒng)是繼網(wǎng)絡(luò)技術(shù)之后,又一個(gè)IT領(lǐng)域新的技術(shù)發(fā)展方向。由于嵌入式系統(tǒng)具有體積小、性能強(qiáng)、功耗低、可靠性高以及面向行業(yè)具體應(yīng)用等突出特征,目前已經(jīng)廣泛地應(yīng)用于軍事國(guó)防、消費(fèi)電子、信息家電、網(wǎng)絡(luò)通信、工業(yè)控制等各個(gè)領(lǐng)域。嵌入式的廣泛應(yīng)用可以說是無所不在。

      嵌入式微處理器技術(shù)的基礎(chǔ)是通用計(jì)算機(jī)技術(shù)。現(xiàn)在許多嵌入式處理器也是從早期的pC 機(jī)的應(yīng)用發(fā)展演化過來的,如早期pC 諸如TRS-80、Apple II 和所用的Z80 和6502 處理器,至今仍為低 端的嵌入式應(yīng)用。在應(yīng)用中,嵌入式微處理器具有體積小、重量輕、成本低、可靠性高的優(yōu)點(diǎn)。嵌入式處理器目前主要有Am186/88、386EX、SC-400、power pC、68000、MIpS、ARM 等系列。

      在早期實(shí)際的嵌入式應(yīng)用中,芯片選擇時(shí)往往以某一種微處理器內(nèi)核為核心,在芯片內(nèi)部集成必要的ROM/EpROM/Flash/EEpROM、SRAM、接口總線及總線控制邏輯、定時(shí)/計(jì)數(shù)器、WatchDog、I/O、串行口、脈寬調(diào)制輸出、A/D、D/A 等各種必要的功能和外設(shè)。

      二、實(shí)習(xí)設(shè)備

      硬件:Embest EduKit-IV實(shí)驗(yàn)平臺(tái)、ULINK2仿真器套件、pC機(jī)

      軟件:μVision IDE for ARM集成開發(fā)環(huán)境、Windows 98/2000/NT/Xp

      三、實(shí)習(xí)目的1.初步掌握液晶屏的使用及其電路設(shè)計(jì)方法;掌握S3C2410X處理器的LCD控制器的使用;掌握通過任務(wù)調(diào)用的方法把液晶顯示函數(shù)添加到uC/OS-II中;通過實(shí)驗(yàn)掌握液晶顯示文本及圖形的方法與程序設(shè)計(jì)。

      2.了解S3C2410X處理器UART相關(guān)控制寄存器的使用; 熟悉ARM處理器系統(tǒng)硬件電路中UART接口的設(shè)計(jì)方法:掌握ARM處理器串行通信的軟件編程方法。

      3.掌握有關(guān)音頻處理的基礎(chǔ)知識(shí);通過實(shí)驗(yàn)了解IIS音頻接口的工作原理;通過實(shí)驗(yàn)掌握對(duì)處理器S3C2410X中IIS模塊電路的控制方法;通過實(shí)驗(yàn)掌握對(duì)常用IIS接口音頻芯片的控制方法。

      4.了解μC/OS-II移植條件和內(nèi)核基本結(jié)構(gòu);掌握將μC/OS-II內(nèi)核移植到ARM9處理器上的方法和步驟。

      四、實(shí)習(xí)要求

      通過對(duì)μC/OS-II移植實(shí)驗(yàn)、μC/OS-II LCD顯示實(shí)驗(yàn)、串口通信實(shí)驗(yàn)、IIS音頻實(shí)驗(yàn)、液晶顯示實(shí)驗(yàn)的學(xué)習(xí),并將各部分內(nèi)容合并,最終得出實(shí)習(xí)結(jié)果,實(shí)習(xí)要求在鍵盤上輸入學(xué)號(hào),在液晶顯示屏上顯示相應(yīng)的學(xué)生信息。學(xué)生信息包括顯示每個(gè)人的照片和姓名系別等,并用鍵控設(shè)置學(xué)生輸出的順序,輸入學(xué)號(hào)就顯示那個(gè)學(xué)生的信息,然后過一段時(shí)間就順序循環(huán)播放。

      移植μC/OS-II內(nèi)核到ARM處理器S3C2410,在IDE中觀察其運(yùn)行狀況編寫S3C2410X處理器的串口通信程序;監(jiān)視串行口UART1動(dòng)作;將從UART1接收到的字符串回送顯示。將從UART1接收到的字符串回送顯示。

      通過使用Embest EduKit-IV實(shí)驗(yàn)板的彩色液晶屏(800*480)進(jìn)行電路設(shè)計(jì),掌握液晶屏作為人機(jī)接口界面的設(shè)計(jì)方法,并編寫任務(wù)函數(shù)在uC/OS-II系統(tǒng)中實(shí)現(xiàn)位圖顯示。在uC/OS-II中建立五個(gè)任務(wù)Tast1和Tast2,其中Tast1順序熄滅四個(gè)LED,延遲一會(huì)在順序點(diǎn)亮四個(gè)LED。Tast2在LCD屏幕上循環(huán)顯示三幅圖片,并打印一些文字信息和背景音樂。過使用Embest EduKit-III實(shí)驗(yàn)板的256 色彩色液晶屏(320x240)進(jìn)行電路設(shè)計(jì),掌握液晶屏作為人機(jī)接口界面的設(shè)計(jì)方法,并編寫程序?qū)崿F(xiàn):畫出多個(gè)矩形框;顯示ASCII字符;顯示漢字字符;顯示彩色位圖。

      五、實(shí)習(xí)步驟

      1.準(zhǔn)備實(shí)驗(yàn)環(huán)境

      使用ULINK2仿真器連接Embest EduKit-IV實(shí)驗(yàn)平臺(tái)的主板JTAG接口;使用Embest EduKit-IV實(shí)驗(yàn)平臺(tái)附帶的交叉串口線,連接實(shí)驗(yàn)平臺(tái)主板上的COM2和pC機(jī)的串口(一般pC只有一個(gè)串口,如果有多個(gè)請(qǐng)自行選擇,筆記本沒有串口設(shè)備的可購(gòu)買USB轉(zhuǎn)串口適配器擴(kuò)充);使用Embest EduKit-IV實(shí)驗(yàn)平臺(tái)附帶的電源適配器,連接實(shí)驗(yàn)平臺(tái)主板上的電源接口。

      2.串口接收設(shè)置

      在pC機(jī)上運(yùn)行windows自帶的超級(jí)終端串口通信程序,或者使用實(shí)驗(yàn)平臺(tái)附帶光盤內(nèi)設(shè)置好了的超級(jí)終端,設(shè)置超級(jí)終端:波特率115200、1位停止位、無校驗(yàn)位、無硬件流控制,或者使用其它串口通信程序。(注:超級(jí)終端串口的選擇根據(jù)用戶的pC串口硬件不同,請(qǐng)自行選擇,如果pC機(jī)只有一個(gè)串口,一般是COM1)

      3.打開實(shí)驗(yàn)例程

      1)打開實(shí)驗(yàn)程序

      2)運(yùn)行μVision IDE for ARM軟件

      3)默認(rèn)打開的工程在源碼編輯窗口會(huì)顯示實(shí)驗(yàn)例程的說明文件readme.txt,詳細(xì)閱讀并理解實(shí)驗(yàn)內(nèi)容。

      4)工程提供了兩種運(yùn)行方式:一是下載到SDRAM中調(diào)試運(yùn)行,二是固化到Nor Flash中運(yùn)行。用戶可以在工具欄Select Target下拉框中選擇在RAM中調(diào)試運(yùn)行還是固化Flash中運(yùn)行。下面實(shí)驗(yàn)將介紹下載到SDRAM中調(diào)試運(yùn)行,所以我們?cè)赟elect Target下拉框中選擇UART_Test IN RAM。

      5)接下來開始編譯鏈接工程,在菜單欄“projiet”選擇“Build target”或者“Rebuild all target files”編譯整個(gè)工程。

      6編譯完成后,在輸出窗口可以看到編譯提示信息,比如““.SDRAMUART_Test.axf”-0 Error(s), 1 Warning(s).”,如果顯示“0 Error(s)”即表示編譯成功。

      7)撥動(dòng)實(shí)驗(yàn)平臺(tái)電源開關(guān),給實(shí)驗(yàn)平臺(tái)上電,單擊菜單欄Debug->Start/Stop Debug Session項(xiàng)將編譯出來的映像文件下載到SDRAM中,或者單擊工具欄“”按鈕來下載。

      8)下載完成后,單擊菜單欄Debug->Run項(xiàng)運(yùn)行程序,或者單擊工具欄“”按鈕來全速運(yùn)行程序。用戶也可以使用進(jìn)行單步調(diào)試程序。

      9)全速運(yùn)行后,用戶可以在超級(jí)終端看到程序運(yùn)行的信息。

      10)用戶可以Stop程序運(yùn)行,使用μVision IDE for ARM的一些調(diào)試窗口跟蹤查看程序運(yùn)行的信息。注:如果在第4)步用戶選擇在Flash中運(yùn)行,則編譯鏈接成功后,單擊菜單欄Flash->Download項(xiàng)將程序固化到NorFlash中,從實(shí)驗(yàn)平臺(tái)的主板拔出JTAG線,給實(shí)驗(yàn)平臺(tái)重新上電,程序?qū)⒆詣?dòng)運(yùn)行。

      部分程序圖:

      串口通信實(shí)驗(yàn):

      IIS音頻實(shí)驗(yàn):

      六、實(shí)習(xí)體會(huì)

      在嵌入式系統(tǒng)中,除了課本上的基礎(chǔ)知識(shí)外,還學(xué)會(huì)了軟件編程的基本思路,掌握了液晶屏的使用及其電路設(shè)計(jì)方法;掌握有關(guān)音頻處理的基礎(chǔ)知識(shí);掌握液晶顯示文本及圖形的方法與程序設(shè)計(jì)。

      通過這次設(shè)計(jì),掌握了液晶顯示實(shí)驗(yàn)、μC/OS-II移植、μC/OS-IILCD顯示的工作原理及串口通信實(shí)驗(yàn)的工作過程,學(xué)會(huì)了使用仿真軟件Embest EduKit-IV實(shí)驗(yàn)平臺(tái)及ULINK2仿真器套件,并學(xué)會(huì)通過應(yīng)用軟件仿真來實(shí)現(xiàn)各種通信系統(tǒng)的設(shè)計(jì),對(duì)以后的學(xué)習(xí)和工作都起到了一定的作用,加強(qiáng)了動(dòng)手能力和學(xué)業(yè)技能。雖然花了很長(zhǎng)時(shí)間編寫軟件程序設(shè)計(jì),但這一切還是理論上的。希望學(xué)校能提供機(jī)會(huì)和條件,讓我們能夠去真正地將理論和實(shí)踐相結(jié)合。通過這次程序,感覺自己所掌握的知識(shí)是那么的有限,還有許多需要改進(jìn)和不足的地方,同時(shí)也幫助了我怎樣學(xué)好這門課程,增加了我對(duì)這門學(xué)科的興趣。總體來說,這次實(shí)習(xí)我受益匪淺。在摸索該如何設(shè)計(jì)電路使之實(shí)現(xiàn)所需功能的過程中特別有趣,培養(yǎng)了我的設(shè)計(jì)思維,增加了實(shí)際操作能力。在讓我體會(huì)到了設(shè)計(jì)電路的艱辛的同時(shí),更讓我體會(huì)到成功的喜悅和快樂。通過這次實(shí)習(xí)通信系統(tǒng)的設(shè)計(jì),使我更加清楚以后的發(fā)展及學(xué)習(xí)的方向。

      最后感謝老師這個(gè)學(xué)期的指導(dǎo)和幫助!

      七、參考文獻(xiàn)

      《ARM9嵌入式系統(tǒng)設(shè)計(jì)與開發(fā)應(yīng)用》熊茂華、楊震倫編著 清華大學(xué)出版社

      《ARM9嵌入式系統(tǒng)設(shè)計(jì)與開發(fā)教程》于明編著 電子工業(yè)出版社

      《Linux嵌入式系統(tǒng)教程》馬忠梅 北京航空航天大學(xué)出版社

      第二篇:黃靖嵌入式系統(tǒng)實(shí)習(xí)報(bào)告

      嵌入式系統(tǒng)實(shí)習(xí)報(bào)告

      課題: LCD顯示秒表 班級(jí): 計(jì)本12-3班 學(xué)號(hào): 3110717215 姓名: 黃靖 指導(dǎo)老師: 金紅老師

      一、緒論

      嵌入式計(jì)算機(jī)的真正發(fā)展是在微處理器問世之后。1971年11月,Intel公司成功地把算術(shù)運(yùn)算器和控制器電路集成在一起,推出了第一款微處理器Intel 4004,其后各廠家陸續(xù)推出了許多8位、16位的微處理器,包括Intel 8080/8085、8086,Motorola 的6800、68000,以及Zilog的Z80、Z8000等。以這些微處理器作為核心所構(gòu)成的系統(tǒng),廣泛地應(yīng)用于儀器儀表、醫(yī)療設(shè)備、機(jī)器人、家用電器等領(lǐng)域。微處理器的廣泛應(yīng)用形成了一個(gè)廣闊的嵌入式應(yīng)用市場(chǎng),計(jì)算機(jī)廠家開始大量地以插件方式向用戶提供OEM產(chǎn)品,再由用戶根據(jù)自己的需要選擇一套適合的CPU板、存儲(chǔ)器板以及各式I/O插件板,從而構(gòu)成專用的嵌入式計(jì)算機(jī)系統(tǒng),并將其嵌入到自己的系統(tǒng)設(shè)備中。本次試驗(yàn)課題是基于UC/OS-II嵌入式操作系統(tǒng)進(jìn)行的1602顯示秒表設(shè)計(jì)。

      二、嵌入式概述

      1、何為嵌入式:

      何謂嵌入式系統(tǒng), 嵌入式系統(tǒng)是用來控制或者監(jiān)視機(jī)器、裝置、工廠等大規(guī)模設(shè)備的系統(tǒng)。國(guó)內(nèi)普遍認(rèn)同的嵌入式系統(tǒng)定義為:以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng).通常,嵌入式系統(tǒng)是一個(gè)控制程序存儲(chǔ)在ROM中的嵌入式處理器控制板。事實(shí)上,所有帶有數(shù)字接口的設(shè)備,如手表、微波爐、錄像機(jī)、汽車等,都使用嵌入式系統(tǒng),有些嵌入式系統(tǒng)還包含操作系統(tǒng),但大多數(shù)嵌入式系統(tǒng)都是由單個(gè)程序?qū)崿F(xiàn)整個(gè)控制邏輯。

      而uC/OS-II由Micrium公司提供,是一個(gè)源代碼開放、可移植、可固化、可裁剪、搶先式的多任務(wù)實(shí)時(shí)操作系統(tǒng)。它主要用于中小型嵌入式系統(tǒng)中,執(zhí)行效率高,占用空間小,可移植性強(qiáng),具有良好的實(shí)時(shí)性和可擴(kuò)展性。

      2、嵌入式歷史:

      從20世紀(jì)七十年代單片機(jī)的出現(xiàn)到各式各樣的嵌入式微處理器,微控制器的大規(guī)模應(yīng)用,嵌入式系統(tǒng)已經(jīng)有了近30年的發(fā)展歷史。

      嵌入式系統(tǒng)的出現(xiàn)最初是基于單片機(jī)的。70年代單片機(jī)的出現(xiàn),使得汽車、家電、工業(yè)機(jī)器、通信裝置以及成千上萬種產(chǎn)品可以通過內(nèi)嵌電子裝置來獲得更佳的使用性能:更容易使用、更快、更便宜。這些裝置已經(jīng)初步具備了嵌入式的應(yīng)用特點(diǎn),但是這時(shí)的應(yīng)用只是使用8位的芯片,執(zhí)行一些單線程的程序,還談不上“系統(tǒng)”的概念。

      最早的單片機(jī)是Intel公司的 8048,它出現(xiàn)在1976年。Motorola同時(shí)推出了68HC05,Zilog公司推出了Z80系列,這些早期的單片機(jī)均含有256字節(jié)的RAM、4K的ROM、4 個(gè)8位并口、1個(gè)全雙工串行口、兩個(gè)16位定 時(shí) 器。之后在80年代初,Intel又進(jìn)一步完善了8048,在它的基礎(chǔ)上研制成功了8051,這在單片機(jī)的歷史上是值得紀(jì)念的一頁,迄今為止,51系列的單片機(jī)仍然是最為成功的單片機(jī)芯片,在各種產(chǎn)品中有著非常廣泛的應(yīng)用。

      從80年代早期開始,嵌入式系統(tǒng)的程序員開始用商業(yè)級(jí)的“操作系統(tǒng)”編寫嵌入式應(yīng)用軟件,這使得可以獲取更短的開發(fā)周期,更低的開發(fā)資金和更高的開發(fā)效率,“嵌入式系統(tǒng)”真正出現(xiàn)了。確切點(diǎn)說,這個(gè)時(shí)候的操作系統(tǒng)是一個(gè)實(shí)時(shí)核,這個(gè)實(shí)時(shí)核包含了許多傳統(tǒng)操作系統(tǒng)的特征,包括任務(wù)管理、任務(wù)間通訊、同步與相互排斥、中斷支持、內(nèi)存管理等功能。其中比較著名的有Ready System 公司的VRTX、Integrated System Incorporation(ISI)的PSOS和IMG的VxWorks、QNX公司的QNX 等。這些嵌入式操作系統(tǒng)都具有嵌入式的典型特點(diǎn):它們均采用占先式的調(diào)度,響應(yīng)的時(shí)間很短,任務(wù)執(zhí)行的時(shí)間可以確定;系統(tǒng)內(nèi)核很小,具有可裁剪,可擴(kuò)充和可移植性,可以移植到各種處理器上;較強(qiáng)的實(shí)時(shí)和可靠性,適合嵌入式應(yīng)用。這些嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng)的出現(xiàn),使得應(yīng)用開發(fā)人員得以從小范圍的開發(fā)解放出來,同時(shí)也促使嵌入式有了更為廣闊的應(yīng)用空間。

      90年代以后,隨著對(duì)實(shí)時(shí)性要求的提高,軟件規(guī)模不斷上升,實(shí)時(shí)核逐漸發(fā)展為實(shí)時(shí)多任務(wù)操作系統(tǒng)(RTOS),并作為一種軟件平臺(tái)逐步成為目前國(guó)際嵌入式系統(tǒng)的主流。這時(shí)候更多的公司看到了嵌入式系統(tǒng)的廣闊發(fā)展前景,開始大力發(fā)展自己的嵌入式操作系統(tǒng)。除了上面的幾家老牌公司以外,還出現(xiàn)了Palm OS,WinCE,嵌入式Linux,Lynx,Nucleux,以及國(guó)內(nèi)的Hopen,Delta Os等嵌入式操作系統(tǒng)。隨著嵌入式技術(shù)的發(fā)展前景日益廣闊,相信會(huì)有更多的嵌入式操作系統(tǒng)軟件出現(xiàn)。

      3、現(xiàn)狀:

      今天嵌入式系統(tǒng)帶來的工業(yè)年產(chǎn)值已超過了1萬億美元,1997年來自美國(guó)嵌入式系統(tǒng)大會(huì)(Embedded System Conference)的報(bào)告指出,未來5年僅基于嵌入式計(jì)算機(jī)系統(tǒng)的全數(shù)字電視產(chǎn)品,就將在美國(guó)產(chǎn)生一個(gè)每年1500億美元的新市場(chǎng)。美國(guó)汽車大王福特公司的高級(jí)經(jīng)理也曾宣稱,“福特出售的‘計(jì)算能力’已超過了IBM”,由此可以想見嵌入式計(jì)算機(jī)工業(yè)的規(guī)模和廣度。1998年11月在美國(guó)加州舉行的嵌入式系統(tǒng)大會(huì)上,基于RTOS的Embedded Internet成為一個(gè)技術(shù)新熱點(diǎn)。在國(guó)內(nèi),“維納斯計(jì)劃”和“女鍋計(jì)劃”一度鬧得沸沸揚(yáng)揚(yáng),機(jī)頂盒、信息j家電這兩年更成了IT熱點(diǎn),而實(shí)際上這些都是嵌入式系統(tǒng)在特定環(huán)境下的一個(gè)特定應(yīng)用。據(jù)調(diào)查,目前國(guó)際上已有兩百多種嵌入式操作系統(tǒng),而各種各樣的開發(fā)工具、應(yīng)用于嵌入式開發(fā)的儀器設(shè)備更是不可勝數(shù)。在國(guó)內(nèi),雖然嵌入式應(yīng)用、開發(fā)很廣,但該領(lǐng)域卻幾乎還是空白,只有三兩家公司和極少數(shù)人員在從事這方面工作。由此可見,嵌入式系統(tǒng)技術(shù)發(fā)展的空間真是無比廣大。

      三、課題設(shè)計(jì)內(nèi)容:

      1、課題所需材料及工具

      材料:1062LCD顯示器、電路板、IAP15F2K61S2系統(tǒng)板、數(shù)據(jù)線、三個(gè)按鈕、若干電線等

      工具:USB串口驅(qū)動(dòng)、Keil_uvision_

      4、STC_ISP Ver6.82B等

      2、課題設(shè)計(jì)要求及總體思路

      要求秒表可以實(shí)現(xiàn)三個(gè)功能:秒表的顯示功能,秒表的控制功能:開始、暫停、清零,秒表的LED閃爍功能。

      總體思路:

      1、查閱與課題相關(guān)的資料了解uC/OS-II嵌入式系統(tǒng)移植已有的主要技術(shù)方案,應(yīng)用軟件設(shè)計(jì)及系統(tǒng)調(diào)試的方法;

      2、在IAP15F2K61S2單片機(jī)系統(tǒng)板上移植uC/OS-II嵌入式系統(tǒng),完成系統(tǒng)調(diào)試。

      3、完成對(duì)秒表的功能進(jìn)行總體的設(shè)計(jì)和規(guī)劃,根據(jù)自己的總體設(shè)計(jì)和規(guī)劃進(jìn)行軟件設(shè)計(jì),焊接電路。

      4、系統(tǒng)功能調(diào)試。

      3、uC/OS-II嵌入式系統(tǒng)的移植

      uC/OS-II代碼中大部分都是用C語言寫的,但是涉及到數(shù)據(jù)類型的重定義、堆棧結(jié)構(gòu)的設(shè)計(jì)、任務(wù)切換時(shí)狀態(tài)的保存和恢復(fù)等問題的大部分代碼由于與處理器有關(guān),是用匯編語言實(shí)現(xiàn)的。移植所要做的工作,就是在不同的處理器上用匯編語言來改寫與處理器有關(guān)的代碼及其他與處理器特性相關(guān)的部分。

      在uC/OS-II移植過程中涉及以上問題的代碼都包含在文件 OS_CPU.H、OS_CPU.C、OS_CPU_A.ASM中。因此移植的主要工作也在源代碼的基礎(chǔ)上圍繞著這三個(gè)文件的改寫展開。

      OS_CPU.H的改寫:其中主要定義了一些與編譯器有關(guān)的數(shù)據(jù)類型、堆棧的生長(zhǎng)方向、臨界代碼區(qū)的保護(hù)方式。因?yàn)椴煌奶幚砥饔胁煌淖珠L(zhǎng),所以O(shè)S_CPU.H中需要針對(duì)具體的處理器字長(zhǎng)重新定義一系列數(shù)據(jù)類型以確保系統(tǒng)的可移植性。特別需要注意的是MCS-51的棧寬度是8位的,所以將堆棧的數(shù)據(jù)類型聲明為8 位無符號(hào)字符類型,即unsigned char OS_STK。第二,為了避免臨界區(qū)代碼被中斷,在臨界區(qū)操作時(shí)必須用C語言開放和關(guān)閉中斷。對(duì)于51單片機(jī),在中斷控制中使用EA = 0關(guān)中斷,EA = 1開中斷。由于51堆棧自低地址往高地址生長(zhǎng),所以堆棧增長(zhǎng)方向的設(shè)置必須更改。采用語句#define OS_STK_GROWTH 0。最后,由于MCS-51沒有軟中斷指令,所以用程序調(diào)用代替,定義任務(wù)切換宏OS_TASK_SW():#define OS_TASK_SW()OSCtxSw()。

      OS_CPU_C.C需要改寫的六個(gè)鉤掛函數(shù)分別是 OSTaskStkInit()

      //初始化任務(wù)堆棧函數(shù) OSTaskCreateHook()//任務(wù)創(chuàng)建鉤掛函數(shù) OSTaskDelHook()

      //任務(wù)刪除鉤掛函數(shù) OSTaskSwHook()

      //任務(wù)切換鉤掛函數(shù) OSTaskStatHook()

      //統(tǒng)計(jì)任務(wù)鉤掛函數(shù) OSTimeTickHook()//定時(shí)鉤掛函數(shù)

      OS_CPU_A.ASM需要改寫的四個(gè)函數(shù)分別是: OSStartHighRdy()//運(yùn)行優(yōu)先級(jí)最高的就緒任務(wù) OSCtxSw()

      //任務(wù)級(jí)的切換函數(shù)

      OSIntCtxSw()

      //中斷級(jí)的任務(wù)切換函數(shù) OSTickISR()

      //時(shí)鐘節(jié)拍中斷服務(wù)函數(shù)

      移植過程要留意的問題:

      當(dāng)調(diào)用OSTaskCreate()或OSTaskCreateExt()創(chuàng)建一個(gè)新任務(wù)時(shí),需要傳遞的參數(shù)是:任務(wù)代碼的起使地址,參數(shù)指針(pdata),任務(wù)堆棧頂端的地址,任務(wù)的優(yōu)先級(jí)。OSTaskCreateExt()還需要一些其他參數(shù),但與OSTask-StkInit()沒有關(guān)系。OSTaskStkInit()只需要以上提到的3個(gè)參數(shù)(task, pdata,和ptos)。在這個(gè)堆棧初始化函數(shù)中要清楚堆棧中都要保存哪些東西,要留多大的空間,這些都很重要,否則會(huì)發(fā)生很嚴(yán)重的錯(cuò)誤。

      4、課題程序功能設(shè)計(jì)及代碼

      如下圖所示,整個(gè)秒表以STC15為核心,按下停止鍵或啟動(dòng)鍵控制秒表的停止和開始,清零鍵負(fù)責(zé)清零,同時(shí)反映給STC15,再經(jīng)過處理顯示在1602液晶顯示器上,進(jìn)行計(jì)時(shí):

      LCD1602液晶顯示器啟動(dòng)鍵key1STC15停止鍵key3清零鍵key2

      系統(tǒng)設(shè)計(jì)圖:

      系統(tǒng)總的原理圖如上圖所示,按下暫停、啟動(dòng)和清零按鍵,秒表開始計(jì)時(shí)或清零并顯示在LCD1602液晶顯示器上。

      功能流程圖:

      開始單片機(jī)、LED初始化trueIf(key==0)false定時(shí)器開啟TR1=1定時(shí)中斷計(jì)數(shù)值累加屏幕顯示定時(shí)器關(guān)閉TR1=0結(jié)束 主要函數(shù)代碼:

      void main(void)

      //主函數(shù)

      { OSInit();

      //初始化uc/os-||

      InitTime0();

      //定時(shí)器初始化

      OSTaskCreate(Task1,(void*)0,&Task1Stk[0],4);

      //任務(wù)1 OSTaskCreate(Task2,(void*)0,&Task2Stk[0],1);

      //任務(wù)2

      OSStart();

      //開始多任務(wù)調(diào)度 } void Task2(void *ppdata)reentrant

      // 任務(wù)2,LED閃爍, { ppdata=ppdata;while(1)

      {

      P55 = ~P55;

      OSTimeDly(OS_TICKS_PER_SEC);

      }

      } void Task1(void xdata * ppdata)reentrant

      //任務(wù)1,三個(gè)按鍵功能以及字幕的顯示 {

      ppdata = ppdata;

      TR1=0;count=0;

      //中斷次數(shù)

      while(1){

      init();

      //1602初始化

      if(key1==0)

      //開始

      {

      TR1=1;

      //定時(shí)器開啟

      }

      if(key3==0)

      //暫停

      { TR1=0;

      //定時(shí)器關(guān)閉

      }

      if(key2==0&&TR1==0)

      //清零

      { zong=0;

      //時(shí)間清零

      }

      lcd_pos(0x46);

      //顯示的地址

      Display_int(zong/60);

      //顯示分鐘

      lcd_date(':');

      //顯示

      Display_int(zong%60);

      //顯示秒

      lcd_pos(0x00);

      //字符輸出地址

      Display_string(time);//輸出”times start:”

      OSTimeDly(OS_TICKS_PER_SEC/40);} }

      //中斷函數(shù)

      void Time1()interrupt 3

      //定時(shí)器T1的中斷編號(hào)為1 { TH1 =(65536-50000)/256;

      //定時(shí)器T0高8位重新賦初值0.05s TL1 =(65536-50000)%256;

      //定時(shí)器T0低8位重新賦初值

      count++;if(count%20==0)

      //調(diào)整數(shù)字變化速度

      {

      zong++;// } }

      void Display_int(int a){

      //顯示

      int tmp[2]={0,0};int t = 0;

      while(a!=0){

      tmp[t++] = a%10;

      a = a/10;}

      t=2;while(t>0){

      lcd_date('0' + tmp[--t]);} } void Display_string(char *str){

      int i = 0;

      while(str[i]!= '