




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、CONTENTS13334445778811111418202122252627272727282929323939序1.11.21.31.41.51.6RT-Thread誕生 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .艱難的發(fā)展期 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .一年增加0.0.1. . . . . . . . . . . . . . . . . . . . .
2、 . . . . . . . . . . . . . . . . . .Cortex-M3的. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .象設(shè)計(jì)方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .面文檔結(jié)構(gòu) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2實(shí)時系統(tǒng)2.12.22.
3、3系統(tǒng) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .實(shí)時系統(tǒng) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .軟實(shí)時與硬實(shí)時 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3快速入門3.1準(zhǔn)備環(huán)境 . . . . . . . . . . . . . . . .
4、 . . . . . . . . . . . . . . . . . . . . . . . . . .3.23.33.43.53.6初識RT-Thread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .系統(tǒng)啟動代碼 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .用戶代碼 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5、. . . . . . . . . . . .跑馬燈的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .生產(chǎn)者消費(fèi)者問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4RT-Thread簡介4.1實(shí)時內(nèi)核 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4.24.3
6、4.44.54.6虛擬文件系統(tǒng) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .輕型IP協(xié)議棧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .s系統(tǒng) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .圖形用戶界面 . . . . . . . . . . . . .
7、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .支持的5內(nèi)核對象模型5.1C語言的對象化模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.2內(nèi)核對象模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8、 . . . . . . . .6線程調(diào)度與管理6.1實(shí)時系統(tǒng)的需求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .i6.26.36.46.56.66.7線7.17.27.37.47.67.7線程調(diào)度器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .線程控制塊 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9、 . . . . . . . . . . .線程狀態(tài) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .空閑線程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .調(diào)度器相關(guān)接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .線程相關(guān)接口 . . . . . .
10、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .同步與通信關(guān)閉中斷 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .調(diào)度器上鎖 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .信號量 . . . . . . . . . . . . . . . . . . . . . . . . .
11、 . . . . . . . . . . . . . . . . . .互斥量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .郵箱 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12、. . .消息隊(duì)列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .394142434344636364657783889478101. 102. 106111. 111. 113. 114117. 117. 118. 118127. 127. 128. 131145. 145. 146. 146. 148. 149. 149151. 151. 156. 159. 159內(nèi)存管理8.1靜態(tài)內(nèi)存池管理 . . . . . . . . . . . . . . . . . . . .
13、 . . . . . . . . . . . . . . . . .8.2動態(tài)內(nèi)存管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9異常與中斷9.1中斷處理過程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9.29.3中斷的底半處理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14、.中斷相關(guān)接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .定時器與系統(tǒng)時鐘10.1 定時器管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.2 定時器管理控制塊 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.3 定時器管理接口 . . . . . . . . . .
15、 . . . . . . . . . . . . . . . . . . . . . . . . . . .I/O設(shè)備管理11.1 I/O設(shè)備管理控制塊 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11.2 I/O設(shè)備管理接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11.3 設(shè)備驅(qū)動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16、. . . . . . . . . . . .12SH S系統(tǒng)12.1 基本數(shù)據(jù)類型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12.212.312.412.512.6工作模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .RT-Thread內(nèi)置命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17、. . . . .應(yīng)用程序接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .移植 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .選項(xiàng) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 文件系統(tǒng)13.1 文件系統(tǒng)接口 . . . .
18、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13.2 目錄操作接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13.3 下層驅(qū)動接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13.4 文件系統(tǒng)初始化 . . . . . . . . . . . . . . . . . . . .
19、. . . . . . . . . . . . . . . . .iiTCP/IP協(xié)議棧協(xié)議初始化161. 161. 163. 166. 173185. 185. 186. 187. 187. 191. 194. 203. 205. 207. 219257. 257261. 261. 261. 262. 263. 264. 265267. 267. 279289. 289. 292. 294. 296. 306. 306307. 307. 308. 312. 312315. 315. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20、 . . . . . . . . . . .14.2 緩沖區(qū)函數(shù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14.3 網(wǎng)絡(luò)連接函數(shù) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14.4 BSD Socket庫 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 圖形用戶界
21、面15.1 簡介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15.215.315.415.515.615.715.8構(gòu)架 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .文件目錄 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22、服務(wù)端 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .客戶端 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .設(shè)備上下文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .圖像引擎 . . . . . . . . . . . . . . . . . .
23、. . . . . . . . . . . . . . . . . . . . . . .控件樹結(jié)構(gòu)及事件派發(fā) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15.9系統(tǒng)配置與圖形驅(qū)動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15.10 編程說明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .內(nèi)核配置
24、rtcong.h配置頭文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .ARM基本知識17.1 ARM的工作狀態(tài) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17.2 ARM處理器模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17.3 ARM的寄存器組織 . . . . . . . . . . . .
25、. . . . . . . . . . . . . . . . . . . . . . .17.4 ARM的異常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17.5 ARM的IRQ中斷處理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17.6 AT91SAM7S64概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26、 . . .GNU GCC移植CPU相關(guān)移植板級相關(guān)移植 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .RealView MDK移植19.1 建立RealView MDK工程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19.2 添加RT-Thread的源文件 .
27、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19.3 線程上下文切換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19.4 啟動匯編文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19.5 中斷處理 . . . . . . . . . . . . . . . . . . . . . . . . . . .
28、. . . . . . . . . . . . . .19.6 開發(fā)板初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .RT-Thread/STM32說明20.1 ARM Cortex M3概況 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20.2 ARM Cortex M3移植要點(diǎn) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29、. . .20.3 RT-Thread/STM32說明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20.4 RT-Thread/STM32移植默認(rèn)配置參數(shù) . . . . . . . . . . . . . . . . . . . . . . . . .例程說明21.1 例程的基本結(jié)構(gòu) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .iii21.221.322 Indi例程向測試用例的轉(zhuǎn)換 . . . . .
30、. . . . . . . . . . . . . . . . . . . . . . . . . . . .測試用例的基本結(jié)構(gòu) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .and tables. 318. 319321ivContents:CONTENTS12CONTENTSCHAPTERONE序1.1 RT-Thread誕生RT-Thread 實(shí)時操作系統(tǒng),Kernel部分完成于2006年上半年,其IPC部分甚至是年中時才具備相應(yīng)的雛形。最開始時是因?yàn)橐獮榕笥炎鲆粋€小型持設(shè)備,而本人起初又是另一國
31、內(nèi)老牌實(shí)時操作系統(tǒng):DOOLOO RTOS開發(fā),但這個團(tuán)隊(duì)在2005年底已經(jīng)解散。但朋友的系統(tǒng)要上,用其他小型系統(tǒng)嗎,一不熟悉,二看不上。答應(yīng)朋友的事,總得有解決方法吧,即使是原來的DOOLOO RTOS,因?yàn)槠浞耉xWorks結(jié)構(gòu),導(dǎo)致它的太大,包括太多不必要的東西(一套完整的libc庫),這些方案都否決了。怎么辦?當(dāng)時朋友那邊也不算太急,先自己寫一套內(nèi)核吧。這個就是?。ê髞黼m然朋友的項(xiàng)目夭折了,但這套OS則保留下來了,并開源了,萬幸)當(dāng)然RT-Thread和原來的DOOLOO RTOS差別還是很大的。DOOLOO RTOS是一種類VxWorks風(fēng)格的,而RT-Thread則是一種追求小型風(fēng)
32、格的實(shí)時操作系統(tǒng):小型、實(shí)時、可剪裁。這三個方面RT-Thread可以驕傲的說做得比DOOLOO RTOS都要好很多,小型:RT-Thread 能夠小到2.5K ROM,1K RAM;實(shí)時:線程調(diào)度 是完全bitmap方式,計(jì)算時間是完全固定的;可剪裁性,配置文件rtcong.h包含多種選項(xiàng),對Kernel細(xì)節(jié)進(jìn)行精細(xì)調(diào)整,對各種組件(文件系統(tǒng),使用EFSL、ELM FatFs;網(wǎng)絡(luò)協(xié)議棧,nsh s ,圖形用戶界面GUI)進(jìn)行可選配置。1.2 艱難的發(fā)展期在第一個公開板發(fā)布后(0.1),RT-Thread了一個問題,光有。別人如何使用:雖然采用了doxygen風(fēng)格的注釋,并自動產(chǎn)生相應(yīng)的AP
33、I文檔(且是英文的),但能夠使用的人寥寥,有這個功底的人不見得認(rèn)可你的系統(tǒng),沒相應(yīng)功底的人也玩不轉(zhuǎn)你的系統(tǒng)。所以下一個系列,考的。首選ARM,為什么?因?yàn)锳RM正處于發(fā)展的前期,使用的人慮如何讓系統(tǒng)能夠支持也廣泛,而RT-Thread第一個支持的就是s3c4510,這個是 lumit 開源項(xiàng)目的。在其后,支持了包括 s3c44b0,AT91SAM7S64,AT91SAM7X256,s3c2410,AT91SAM9200,coldre, x86等一系列,編譯器使用GCC,這個時期無疑是最艱難的時期(真的艱難嗎?或許不是,但肯定是迷茫的),這期間陸續(xù)發(fā)布了0.2.0、0.2.1、0.2.3、0.2
34、.4版本等,不同的版本支持不同的平臺。在這個苦中做樂的日子里,shaolin同學(xué)出現(xiàn)了,幫助完成了 RT-Thread/x86的移植,他當(dāng)時還是學(xué)生,同時也把RT-Thread作為了他的畢業(yè)設(shè)計(jì)。31.3 一年增加0.0.1本人很早就接觸了Linux,算是國內(nèi)資深的Linux接觸者(早期也算一個Linux開發(fā)1.0幾乎是發(fā)展起來的(大家有誰用過RedHat 5.1?)。個人算是很多方面有一些吧),KDE的:的版本號是非常重要的一個標(biāo)志,寧愿增加一個細(xì)微的版本號也不輕易的增加一個大的版本號,因?yàn)榇蟮陌姹咎柺切枰獙τ脩糌?fù)責(zé)的。1.0版本更代表了系統(tǒng)的穩(wěn)定性,健全性。例如mplayer到1.0版本就
35、經(jīng)歷眾多小版本,0.99的beta版本亦無數(shù)。RT-Thread也把這點(diǎn)體現(xiàn)得淋漓盡致,0.2.2到0.2.3一個版本的增加,整整花了一年多的時間。但這環(huán)境中最完善的TCP/IP協(xié)議棧:LwIP。當(dāng)然,開個小版本號的增加,卻帶來了開源社區(qū)始時并不算穩(wěn)定。在這幾個版本中,RT-Thread也終于從迷茫中走出來,RT-Thread需要自己的特色,一個單獨(dú)的實(shí)時操作系統(tǒng)內(nèi)核沒太大的用處,因?yàn)槟悴]有上層應(yīng)用代碼的積累支撐,并且一些基礎(chǔ)組件也非常重要,有這些基礎(chǔ)組件基本上意味著,在這個上寫代碼,這些代碼就屬于你自己的,甚至于哪天也可以把它放到另外一個硬件上運(yùn)行。同樣,0.2到0.3版本號的變更,花費(fèi)的
36、時間會更長:版本號的長短,是和計(jì)劃的功能特性密切相關(guān)的,沒到設(shè)定的目標(biāo)如何可能進(jìn)行發(fā)布?1.4 Cortex-M3的RT-Thread的因?yàn)?Cortex-M3 而來,因?yàn)镾T的 STM32 使用的人太廣了,當(dāng)然還有非常重要的一點(diǎn)。RT-Thread已經(jīng)開始支持 Keil MDK ,armcc編譯器了。 GNU GCC 確實(shí)好,并且也由衷的推崇它,使用它,只是調(diào)試確實(shí)麻煩,阻礙了人使用它(ARM上)。當(dāng) RT-Thread+ Cortex-M3 + Keil MDK碰撞在一起的時候,火花因它而生,越來越多人使用RT-Thread了,當(dāng)然這和RT-Thread厚積薄發(fā)是離不開的,因?yàn)檫@個時候,R
37、T-Thread已經(jīng)有一個穩(wěn)定的內(nèi)核, s方式的調(diào)試?yán)鱪sh,DFS虛擬設(shè)備文件系統(tǒng),LwIP協(xié)議棧以及自己從頭開發(fā)的圖形用戶界面GUI。RT-Thread/GUI成型于2008年底,但為了 Cortex-M3分支,這個組件停下來很多,但這種停留是值得的。另外就是特別感謝UET的STM32開發(fā)板了,RT-Thread/STM32的分支都是在UET的STM32開發(fā)板上驗(yàn)證的。在Cortex-M3這個上(當(dāng)然也包括其他一些ARM),已經(jīng)有多家企業(yè)開始使用RT-Thread實(shí),其中也包括一家國內(nèi)上市企業(yè),他們把RT-Thread應(yīng)用于電時操作系統(tǒng)作為他們的 力,RFID, LwIP網(wǎng)絡(luò)協(xié)議棧,ns
38、h s等數(shù)個領(lǐng)域中,RT-Thread實(shí)時操作系統(tǒng)涵蓋了實(shí)時內(nèi)核,文件系統(tǒng),等組件。RT-Thread/GUI因?yàn)槌龅罆r間比較晚,還處于試用期:-)1.5 面象設(shè)計(jì)方法了解RT-Thread開源實(shí)時操作系統(tǒng)的都知道,采用面象風(fēng)格的設(shè)計(jì)是RT-Thread一個很大的特點(diǎn),但它又不等同于eCos操作系統(tǒng)那樣純粹使用C+來實(shí)現(xiàn),而是采用了一種C編碼的面象編程。面象設(shè)計(jì)更適合于人類思考問題的特點(diǎn),有著它天然的好處,例如繼承??梢宰尵邆湎嗤割惖淖宇惞蚕硎褂酶割惖姆椒ǎ究梢哉f是不用寫代碼就憑空多出了很多函數(shù),何樂而不為。另外,對象的好處在于封裝。當(dāng)一個對象封裝好了以后,并測試完成后,基本上就代表這個
39、類是健全的,從這個類派生的子類不需要過多考慮父類的不穩(wěn)定性。這里著重提提另外一個人,我工作后的第三年,曾向當(dāng)時的同事也是好友,L.Huray學(xué)習(xí)面象的實(shí)時設(shè)計(jì)方法:Octpus II。深刻體會到了面象設(shè)計(jì)的好處(需求分析,體系結(jié)構(gòu)設(shè)計(jì),子系統(tǒng)中C+的不系統(tǒng)分析,子系統(tǒng)設(shè)計(jì),子系統(tǒng)測試,集成測試,實(shí)時性分析等),但鑒于確定性,所以個人更偏向于使用C語言來實(shí)現(xiàn)。所以,L.Huray算是老師了,一直希望能夠有4Chapter 1. 序時間把他老人家的更進(jìn)一步的發(fā)揚(yáng)光大,希望以后有這個機(jī)會。(Octpus I最初然后由M.Award, L.Huray發(fā)展成Octpus II,現(xiàn)在幾乎見不到蹤影了)。于
40、Nokia,1.6 文檔結(jié)構(gòu)本書是RT-Thread實(shí)時操作系統(tǒng)的編程指南文檔,它分幾個部分分別描述了:實(shí)時系統(tǒng)概念:實(shí)時系統(tǒng)是一個什么樣的系統(tǒng),它的特點(diǎn)是什么;RT-Thread快速入門,在無硬件的情況下,如何迅速地了解RT-Thread實(shí)時操作系統(tǒng),如何使用RT-Thread實(shí)時操作系統(tǒng)最基本的一些元素;RT-Thread作為一個完整的實(shí)時操作系統(tǒng),它能夠滿足各種實(shí)時系統(tǒng)的需求,所以接下來詳細(xì)地介紹了各個模塊的結(jié)構(gòu),以及編程時的注意事項(xiàng)。RT-Thread組件的編程說明,RT-Thread不僅包括了一個強(qiáng)實(shí)時的內(nèi)核,也包括的一些組件,例如s,文件系統(tǒng),協(xié)議棧,圖形用戶界面等。這部分對描述。
41、組件編程進(jìn)行了RT-Thread中一些其他部分說明,包含了如何使用GNU GCC工具搭建RT-Thread的開發(fā)環(huán)境及RT-Thread在Cortex-M3系統(tǒng)上的說明。向使用RT-Thread系統(tǒng)進(jìn)行編程的開發(fā),并假定開發(fā)具備基本的C語言基礎(chǔ)知本一些概念。本書是一本使用RT-識,如果具備基本的實(shí)時操作系統(tǒng)知識將能夠更好地理解Thread進(jìn)行編程的書籍,對于RT-Thread的實(shí)現(xiàn)并不做過多、過細(xì)節(jié)性的分析。本書中異常與中斷由編寫,定時器與系統(tǒng)時鐘,I/O設(shè)備管理,文件系統(tǒng)由編寫,其余部分由編寫,部分章節(jié)由March 18, 2010進(jìn)行審校。于1.6.5文檔結(jié)構(gòu)6Chapter 1. 序CH
42、APTERTWO實(shí)時系統(tǒng)2.1系統(tǒng)系統(tǒng)是為滿足特定需求而設(shè)計(jì)的計(jì)算系統(tǒng),常見的系統(tǒng)如:電視用的機(jī)頂盒,網(wǎng)絡(luò)網(wǎng)絡(luò)中的電視(不會試中的路由器等。它們總是針對特定的需求,例如電視機(jī)頂盒,用于圖用來寫文檔);網(wǎng)絡(luò)路由器,用于網(wǎng)絡(luò)報文的正確轉(zhuǎn)發(fā)(不會試圖用于,看)。這類系統(tǒng)通常針對特定的外部輸入進(jìn)行處理然后給出相應(yīng)的結(jié)果。功能相對單一(因?yàn)樾枨笠蚕鄬我?,而正是因?yàn)檫@類系統(tǒng)的性,為了完成這能,系統(tǒng)提供相匹配的硬件資源,多余的硬件資源能力是浪費(fèi),而欠缺的硬件資源能力則不能夠滿足設(shè)定的目標(biāo),即在成本上“恰好”滿足設(shè)定的要求。通用系統(tǒng)則恰恰相反,他們并不具備特定的需求,是力圖盡可能得滿足最大化的需求,甚至在
43、構(gòu)造硬件系統(tǒng)時還會考慮到滿足未來幾年的需求變化。例如,在人們電腦時,在自身有限的資金情況下,盡可能獲得高端的性能,用于多,工作等。系統(tǒng)的硬件設(shè)備由一些及電路組成,微控制器,存放代碼的Flash,Boot Rom,運(yùn)行代碼時用到的內(nèi)存(開發(fā)階段調(diào)試時用到的JTAG接口)等,也可能包含一定的機(jī)械控制模塊,數(shù)據(jù)采集模塊等,在控制當(dāng)中會包含相應(yīng)的計(jì)算單元??偟膩碚f,系統(tǒng)提倡的是在滿足設(shè)定系統(tǒng)通常會進(jìn)行大量生產(chǎn)。所需求的條件下,力圖以最小的的成本代價完成相應(yīng)的功能。以單個的成本節(jié)約,能夠隨著產(chǎn)量進(jìn)行成百上千的放大。72.2 實(shí)時系統(tǒng)實(shí)時計(jì)算可以定義成這樣一類計(jì)算,即系統(tǒng)的正確性不僅取決于計(jì)算的邏輯結(jié)果,
44、而且還依賴于產(chǎn)生結(jié)果的時間。關(guān)鍵的兩點(diǎn):正確地完成和在給定的時間內(nèi)完成,且兩者重要性是等同的。針對于在給定的時間內(nèi)功能性的要求可以劃分出常說的兩類實(shí)時系統(tǒng),軟實(shí)時和硬實(shí)時系統(tǒng)。如下一個示例圖:對于輸入的信號、事件,實(shí)時系統(tǒng)必須能夠在規(guī)定的時間內(nèi)得到正確的響應(yīng),而不管這些事件是單一事件、多重事件還是同步信號或異步信號。一個具體的例子:一顆 從20米處射出,射向一個玻璃杯。假設(shè) 的速度是v米/秒,那么經(jīng)過t1=20/v秒后, 將擊碎玻璃杯。而有一系統(tǒng)在檢測到 射出后,將把玻璃杯拿走,假設(shè)這整個過程將持續(xù)t2秒的事件。如果t2 ”進(jìn)入下一畫面為了能夠正常安裝,需要同意它的條款(這是一款評估版),選擇
45、”Next ”12Chapter 3. 快速入門選擇RealView MDK對于的安裝目錄,默認(rèn)C:Keil即可,選擇”Next ”輸入您的名字及郵件地址,選擇”Next ”3.1. 準(zhǔn)備環(huán)境13安裝完成,選擇”ish”有了RealView MDK的利器,就可以輕松開始RT-Thread之旅,一起探索實(shí)時操作系統(tǒng)的奧秘。請注意RealView MDK正式版是的,如果您希望能夠編譯出更大體積的二進(jìn)制文件,請購買RealView MDK正式版。RT-Thread也支持的GNU GCC編譯器,這是一款開源的編譯器,想要了解如何使用GNU的相關(guān)工具搭建RT-Thread的開發(fā)環(huán)境請參考本書后面的章節(jié),
46、其中有在Windows/Linux環(huán)境下搭建采用GNU GCC做為RT-Thread開發(fā)環(huán)境的詳細(xì)說明。3.2 初識RT-ThreadRT-Thread做為一個操作系統(tǒng),它的代碼規(guī)模會不會和Windows或Linux一樣很龐大?代碼會不會達(dá)到驚人的上百萬行代碼級別?弄清楚這些之前,先要做的就是獲得本書相對應(yīng)的RT-Thread0.3.0正式版 RT-Thread 0.3.0正式版本。這個是一個壓縮包文件,請解壓到一個目錄,這里把它解壓到D:目錄中。解壓完成后的目錄結(jié)構(gòu)是這樣的:14Chapter 3. 快速入門各個目錄的解釋如下:(請注意在RT-Thread 0.3.0中,所有的Keil、IA
47、R工程文件都放在bsp中各個子目錄下,如果是命令行編譯也需要在這些目錄下進(jìn)行)目錄名bsp描述的目錄,其中包含相應(yīng)的Keil工程文件(如果包含針對各個具體開發(fā)板、了Keil MDK的移植)lesystem nsh include libc libcpu netrtgui src包含了RT-Thread的文件系統(tǒng)組件代碼包含了RT-Thread的nsh s組件代碼包含了RT-Thread的頭文件面向GCC移植的小型C庫面向各個移植的代碼包含了RT-Thread的網(wǎng)絡(luò)組件代碼包含了RT-Thread/GUI圖形用戶界面組件代碼包含了RT-Thread內(nèi)核的代碼在目錄bspsam7s下,有一個pro
48、ject.Uv2文件3.2. 初識RT-Thread15它是一個RealView MDK的工程文件,如果按照上節(jié)的步驟正確的安裝了RealView MDK,那么在這里直接雙擊鼠標(biāo)可以打開這個文件。打開后會出現(xiàn)如下的畫面:這個就是RT-Thread工程文件夾畫面,在工程文件列表中總共存在如下幾個組16Chapter 3.快速入門Startup 用戶開發(fā)板相關(guān)文件及啟動文件(對應(yīng)kernelbsp目錄)Kernel RT-Thread內(nèi)核實(shí)現(xiàn)(對應(yīng)kernelsrc目錄)AT91SAM7S 針對ATMEL AT91SAM7S64移植的代碼(對應(yīng)kernellibcT91SAM7S目錄)先讓Real
49、View MDK編譯運(yùn)行試試:沒什么意外,最后會出現(xiàn)類似畫面上的結(jié)果,雖然有一些警告但關(guān)系不大。在編譯完RT-Thread/AT91SAM7S后,Thread。模擬運(yùn)行的結(jié)果如下圖所示??梢酝ㄟ^RealViewMDK的模擬器來仿真運(yùn)行RT-3.2. 初識RT-Thread17因?yàn)橛脩舸a是空的,所以只是顯示了RT-Thread的LOGO。3.3 系統(tǒng)啟動代碼一般了解一份代碼大多從啟動部分開始,同樣這里也采用這種方式,先尋找啟動的:因?yàn)镽ealView MDK的用戶程序采用了main()函數(shù), 所以先看看main()函數(shù)在哪個文件中:startup.c,它位于Startup組中,是在AT91SA
50、M7S64的啟動匯編代碼(啟動匯編在AT91SAM7SGroup的start rvds.S中,在后面章節(jié)的移植一節(jié)中會詳細(xì))后跳轉(zhuǎn)到C代碼的位置。main (void)/* 調(diào)用RT-Thread的啟動函數(shù),rtthread startup */rtthread startup();return 0;很簡單,main()函數(shù)僅僅調(diào)用了rtthread startup()函數(shù)。RT-Thread因?yàn)橹С侄喾N,多種編譯可以看器,rtthread startup()函數(shù)是RT-Thread的到RT-Thread的啟動流程:點(diǎn)。從rtthread startup()函數(shù)中/* 這個函數(shù)將啟動RT-Th
51、read RTOS */void rtthread startup(void)/* 初始化硬件中斷控制器 */rt hwerrupt init();/* 初始化硬件開發(fā)板 */rt hw board init();/* 顯示RT-Thread的LOGO及版本號 */18Chapter 3. 快速入門rt show ver();/* 初始化系統(tǒng)節(jié)拍,用于操作系統(tǒng)的時間技術(shù) */rt system tick init();/* 初始化系統(tǒng)對象 */rt system object init();/* 初始系統(tǒng)定時器 */rt system timer init();/*如果定義了宏RT USING
52、 HEAP,即RT-Thread使用動態(tài)堆AT91SAM7S64的SRAM總共是16kB,地址范圍是*0 x200000 - 0 x204000所以在調(diào)用rt system heap init函數(shù)時的最后一個參數(shù)是尾地址0 x204000前面的初始地址則根據(jù)編譯器環(huán)境的不同而略微不同*/#ifdef RT USING HEAP#ifdefCC ARMrt system heap init(void*)&Image$RW IRAM1$ZI$Limit, (void*)0 x204000); #elifICCARMrt system heap init( segment end(HEAP), (v
53、oid*)0 x204000); #elsert system heap init(void*)& bss end, (void*)0 x204000); #endif#endif/* 初始化系統(tǒng)調(diào)度器 */rt system scheduler init();/* 如果使用了鉤子函數(shù),把rt hw led flash函數(shù)掛到idle線程的執(zhí)行中去#ifdef RT USING HOOK/* set idle thread hook */rt thread idle sethook(rt hw led flash); #endif/* 如果使用了設(shè)備框架 */#ifdef RT USING D
54、EVICE*/*/初始化硬件串口 */rt hw serial init();/* 初始化所有了的設(shè)備 */rt device init all();#endif/* 初始化上層應(yīng)用 */rt application init();/*#ifdef/*/*如果系統(tǒng)中使用了sRT USINGSH初始化sh */系統(tǒng) */sh system init();sh的輸入設(shè)備是uart1設(shè)備 */3.3. 系統(tǒng)啟動代碼19sh set device(uart1);#endif/* 初始化idle線程 */rt thread idle init();/* 啟動調(diào)度器,將進(jìn)行系統(tǒng)的第一次調(diào)度 */rt sy
55、stem scheduler start();/* 這個地方應(yīng)該是return ;都不應(yīng)該達(dá)到的 */這部分啟動代碼,可以分為幾個部分:初始化系統(tǒng)相關(guān)的硬件初始化系統(tǒng)組件,例如定時器,調(diào)度器初始化系統(tǒng)設(shè)備,這個主要是為RT-Thread的設(shè)備框架做的初始化初始化各個應(yīng)用線程,并啟動調(diào)度器3.4用戶代碼上面的啟動代碼基本上可以說都是和RT-Thread系統(tǒng)相關(guān)的,那么用戶如何加入自己應(yīng)用程序的初始化代碼:/* 初始化上層應(yīng)用 */rt application init();這里,用戶代碼位置是rt application init(),在這個函數(shù)中可以初始化用戶應(yīng)用程序的線程,當(dāng)后面打開調(diào)度器后
56、,用戶線程也將得到執(zhí)行。在工,rt application init()的實(shí)現(xiàn)在application.c文件中,目前跑的RT-Thread是最簡單的,僅包含一個空的rt application init()實(shí)現(xiàn):/* 包含RT-Thread的頭文件,每一個需要用到RT-Thread服務(wù)的文件都需要包含這個文件 */#include /*點(diǎn) */用戶應(yīng)用程序rt application init()return 0;空的實(shí)現(xiàn)就意味著,系統(tǒng)中不存在用戶的代碼,系統(tǒng)只會運(yùn)行和系統(tǒng)相關(guān)的一些代碼。在以后的都將在這個文件中實(shí)現(xiàn)代碼,并在rt application init()函數(shù)中例子中,如果沒有特
57、殊的說明,進(jìn)行初始化工作。20Chapter 3. 快速入門3.5 跑馬燈的例子對于從事電子方面開發(fā)的技術(shù)工程師來說,跑馬燈大概是最簡單的例子,就類似于每種編程語言中的 o World。所以第一個例子就從跑馬燈例子開始:創(chuàng)建一個線程,讓它不定時的對LED進(jìn)行更新(關(guān)或滅)/* 因?yàn)橐褂肦T-Thread的線程服務(wù),需要包含RT-Thread的頭文件 */#include /*s/*s/*s線程用到的棧,由于ARM是4字節(jié)對齊的,所以棧的空間必須是4字節(jié)對齊ic char led thread stack512;線程的TCB控制塊 */ic struct rt thread led threa
58、d;*/*/線程的點(diǎn),當(dāng)線程運(yùn)行起來后,它將從這里開始執(zhí)行l(wèi)ed thread entry(void* parameter)icvoidi;/*循環(huán)執(zhí)行的線程 */這個線程是一個while (1)/* 開LED,然后延時10個OS Tick */led on();rt thread delay(10);/* 關(guān)LED,然后延時10個OS Tick */led off();rt thread delay(10);/*點(diǎn) */用戶應(yīng)用程序rt application init()/*初始化一個線程名稱是led位置是led thread entry參數(shù)是RT NULL,這個參數(shù)會傳遞給函數(shù)的,可以是
59、一個指針或一個數(shù)優(yōu)先級是25(AT91SAM7S64配置的最大優(yōu)先級數(shù)是32,這里使用25)*時間片是8(如果有相同優(yōu)先級的線程存在,時間片才會真正起作用)*/rt thread init(&led thread, led,led thread entry, RT NULL,&led thread stack0, sizeof(led thread stack), 25, 8);/* 上一步僅僅是初始化一個線程,也就是為一個線程的運(yùn)行做準(zhǔn)備,3.5. 跑馬燈的例子21*這里則是啟動這個線程注:這個函數(shù)并不代表線程立刻就運(yùn)行起來,當(dāng)調(diào)度器啟動起來后,線程才得到真正的調(diào)度。如果此時,調(diào)度器已經(jīng)運(yùn)行
60、了,那么則取決于新啟動的線程優(yōu)先級是否高于當(dāng)前任務(wù)優(yōu)先級,如果高于,則立刻執(zhí)行新線程。*/rt thread startup(&led thread);return 0;在代碼中rt thread delay(10)函數(shù)的作用是延時一段時間, 即讓led線程休眠10個tick (按照rtcong.h中的配置, 1秒 = RT TICK PER SECOND個tick = 100 tick, 即這份代碼中是延時100ms)。在休眠的這段時間內(nèi),如果沒有其他線程運(yùn)行,操作系統(tǒng)會切換到idle線程運(yùn)行。3.6 生產(chǎn)者消費(fèi)者問題生產(chǎn)者消費(fèi)者問題是操作系統(tǒng)中的一個經(jīng)典問題,在操作系統(tǒng)中也經(jīng)常能夠遇到,例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 采購設(shè)備分期合同范本
- 門面出租合同范本
- 酒店廣告合作合同范本
- 出售防水器材合同范本
- 樓盤代理樓盤合同范本
- pvc管道采購合同范本
- 個人借企業(yè)合同范本
- 電路改造合同范本
- 短期合伙生意合同范本
- 產(chǎn)品攝影拍攝合同范例
- 河北省第八屆關(guān)注時事胸懷天下知識競賽題庫及答案
- 拆除道牙和生態(tài)磚施工方案
- 東方終端鍋爐安全環(huán)保升級改造工程環(huán)境影響報告表
- 2025年四川成渝高速公路股份有限公司招聘筆試參考題庫含答案解析
- 2025年贛南衛(wèi)生健康職業(yè)學(xué)院單招職業(yè)技能考試題庫及完整答案1套
- 《經(jīng)絡(luò)與腧穴》課件-手少陰心經(jīng)
- 大連農(nóng)商銀行2024年招聘172人管理單位遴選500模擬題附帶答案詳解
- 柴油機(jī)結(jié)構(gòu)原理
- 機(jī)房維保巡檢服務(wù)報告
- 一年級小朋友講故事-守株待兔.ppt
- 最新文字學(xué)試題(1)(共8頁)
評論
0/150
提交評論