




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、嵌入式Linux實時操作系統(tǒng)及應(yīng)用編程 嵌入式Linux實時操作系統(tǒng)及應(yīng)用編程 嵌入式Linux實時操作系統(tǒng)及應(yīng)用編程 嵌入式Linux實時操作系統(tǒng)及應(yīng)用編程 附錄A習(xí)題參考答案 嵌入式Linux實時操作系統(tǒng)及應(yīng)用編程 第1章 1 嵌入式系統(tǒng)是指操作系統(tǒng)和功能軟件集成于計算機硬件系統(tǒng)之中。簡單的說就是系統(tǒng)的 應(yīng)用軟件與系統(tǒng)的硬件一體化,類似與 BIOS的工作方式。具有軟件代碼小,高度自動化, 響應(yīng)速度快等特點。特別適合于要求實時的和多任務(wù)的體系。根據(jù)IEEE國際電氣和電子工 程師協(xié)會)的定義:嵌入式系統(tǒng)是“用于控制、監(jiān)視或者輔助操作機器和設(shè)備的裝置” 原 文為 devices used to
2、control, monitor, or assist the operation of equipment, machinery or plants)。簡單地講就是嵌入到對象體中的專用計算機系統(tǒng)。 嵌入式系統(tǒng)一般有3個主要的組成部分:硬件、實時操作系統(tǒng)以及應(yīng)用軟件。 硬件:包括處理器、存儲器 ROM、RAM )、輸入輸出設(shè)備、其他部分輔助系統(tǒng)等。 實時操作系統(tǒng)Real-Time Operating System, RTOS):用于管理應(yīng)用軟件,并提供一種 機制,使得處理器分時地執(zhí)行各個任務(wù)并完成一定的時限要求。 應(yīng)用軟件:實現(xiàn)具體業(yè)務(wù)邏輯功能。 2 .嵌入式系統(tǒng)的三要素是 嵌入、專用、計算機
3、;其中嵌入性指的是嵌入到對象體系中,有 對象環(huán)境要求;專用性是指軟、硬件按對象要求裁減;計算機指實現(xiàn)對象的智能化功能。廣 義地說一個嵌入式系統(tǒng)就是一個具有特定功能或用途的計算機軟硬件集合體。即以應(yīng)用為中 心、以計算機技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、 功耗嚴(yán)格要求的專用計算機系統(tǒng)。 3.嵌入式實時操作系統(tǒng) Real-Time Operating System , RTOS)是指操作系統(tǒng)本身要能在一個 固定時限內(nèi)對程序調(diào)用 或外部事件)做出正確的反應(yīng),亦即對時序與穩(wěn)定性的要求十分嚴(yán) 格。 目前國際較為知名的有:VxWorks、NeutrinoRTOS、Nucle
4、us Plus、 OS/9、VRTX、 LynuxOS , RTLinux、BlueCat RT 等。 4嵌入式系統(tǒng)一般由 硬件層、中間層、軟件層和功能層 組成。其作用分別如下: 1)硬件層 : 由嵌入式微處理器、外圍電路和外設(shè)組成。外圍電路有:電源電路、復(fù)位 電路、調(diào)試接口和存儲器電路,就構(gòu)成一個嵌入式核心控制模塊。 操作系統(tǒng)和應(yīng)用程序都可以固化在 ROM 或者 Flash 中。為方便使用,有的模塊在此基礎(chǔ)上 增加了 LCD 、鍵盤、 USB 接口,以及其他一些功能的擴展電路。 2)中間層 :硬件層與軟件層之間為中間層,也稱為BSPBoard Support Package ,板級 支持包)
5、。 作用:將系統(tǒng)軟件與底層硬件部分隔離,使得系統(tǒng)的底層設(shè)備驅(qū)動程序與硬件無關(guān); 功能:一般應(yīng)具有相關(guān)硬件的初始化、數(shù)據(jù)的輸入/輸出操作和硬件設(shè)備的配置等功能。 BSP 是主板硬件環(huán)境和操作系統(tǒng)的中間接口,是軟件平臺中具有硬件依賴性的那一部分,主 要目的是為了支持操作系統(tǒng),使之能夠更好地運行于硬件主板上。 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)用程序組成,用來完成對被控對象的控制功能。 功能層是面向被控對象和用戶的,為了方便用戶操
6、作,往往需要具有友好的人機界面。 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)就被剝奪了,或 者說被掛起了
7、,那個高優(yōu)先級的任務(wù)立刻得到了 CPU 的控制權(quán)。 6在實時系統(tǒng)中,如果系統(tǒng)在指定的時間內(nèi)未能實現(xiàn)某個確定的任務(wù),會導(dǎo)致系統(tǒng)的全面 失敗,這樣的系統(tǒng)被稱為強實時系統(tǒng)或硬實時系統(tǒng)。強實時系統(tǒng)響應(yīng)時間一般在毫秒或微秒 級。在弱實時系統(tǒng)中,雖然響應(yīng)時間同樣重要,但是超時卻不會發(fā)生致命的錯誤。其系統(tǒng)響 應(yīng)時間在毫秒至秒的數(shù)量級上,其實時性的要求比強實時系統(tǒng)要差一些。 7嵌入式系統(tǒng)的設(shè)計步驟及各部分的主要工作如下。 1) 需求分析階段 ,羅列出用戶的需求; 2) 體系結(jié)構(gòu)設(shè)計階段 ,描述系統(tǒng)的功能如何實現(xiàn); 3) 詳細設(shè)計階段 ,進行硬件系統(tǒng)與軟件系統(tǒng)的分類劃分,以決定哪些功能用硬件實現(xiàn),哪 些用軟件實
8、現(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)用于多種硬件平臺。Linux已經(jīng)被移植到多種硬件平臺,這對于經(jīng)費,時間受限制 的研究與開發(fā)工程是很有吸引力的。原型可以在標(biāo)準(zhǔn)平臺上開發(fā)后移植到具體的硬件上,加 快了軟件與硬件的開發(fā)過程。Linux采用一個統(tǒng)一的框架對硬件進行管理,從一個硬件平臺 到另一個硬件平臺的改動與上層應(yīng)用無關(guān)。 2)Linux的高度模塊化使添加部件非常容易。本身內(nèi)置網(wǎng)絡(luò)支持,而目前嵌入
9、式系統(tǒng) 對網(wǎng)絡(luò)支持要求越來越高。 等特性的一種通用操作系 統(tǒng)。 下發(fā)行。這 樣,開發(fā)人員可以對操作系統(tǒng)進行定制,適應(yīng)其特殊需要。 5)Linux帶有Unix用戶熟悉的完善的開發(fā)工具,幾乎所有的Unix系統(tǒng)的應(yīng)用軟件都 已移植到了 Linux上。其強大的語言編譯器GCC,C+等也可以很容易得到,不但成熟完 善,而且使用方便。 9. 參考答案)Linux執(zhí)行進程調(diào)度一般是在以下情況發(fā)生的: 1)正在執(zhí)行的進程運行完畢; 2)正在執(zhí)行的進程調(diào)用阻塞原語將自己阻塞起來進入等待狀態(tài); 3)正在執(zhí)行的進程調(diào)用了P原語操作,從而因資源不足而被阻塞;或調(diào)用了V原語操作激 活了等待資源的進程隊列; 4)執(zhí)行中的
10、進程提出I/O請求后被阻塞; 5)系統(tǒng)分配的時間片已經(jīng)用完; 以上都是CPU為不可剝奪方式下的引起進程調(diào)度的原因。在CPU方式是可剝奪時,還有下 面的原因: hello: mai n.o list.o symbol.o table.o gcc -o prog main.o list.o symbol.o table.o mai n.o: mai n.c table.h symbol.h list.h gcc -c -o mai n.o main.c list.o: list.c list.h gcc -c -o list.o list.c symbol.o: symbol.c symbol.h
11、 gcc -c -o symbol.o symbol.c table.o: table.c table.h symbol.h list.h gcc -c -o table.o table.c clea n: rm hello *.o (2 mount - t nfs - o noclock 0:/home/armtest/hello /mnt 3. hello.c: # in clude # in clude # in clude # in clude hello.h int main (int argc,char *argv prin tf(Hello World!n。
12、 message(。 return 0。 hello.h: void message(void 。 message.c: # in clude (void 。 voidmessage prin tf(Thisisamessage!n 三選擇題 1 . C2 A3 B 4 B 5 B6. C 7 C8. D 9 D10. A11. A 嵌入式Linux實時操作系統(tǒng)及應(yīng)用編程 一選擇題 I. A2 C 3 D 4. D 5. C 6. B7 C 8. A9. D 10. D II. D12. D 13 . D 14 . B 15 . D 16. B17. A18. C19. C20. C 二.簡答
13、題 1、Linux內(nèi)核的編譯菜單有好幾個版本,運行: 1) make config :進入命令行,可以一行一行的配置,但使用不十分方便。 2) make menuconfig :大多數(shù)開發(fā)人員使用的Linux內(nèi)核編譯菜單,使用方便。 # 若位置參數(shù)為 start /usr/sbin/apachectl start 。 # 啟動 httpd 進程 stop # 若位置參數(shù)為 stop /usr/sbin/apachectl stop 。 # 關(guān)閉 httpd 進程 restart # 若位置參數(shù)為 stop /usr/sbin/apachectl restart 。 # 重新啟動 httpd 進
14、程 * # 若位置參數(shù)不是 start 、 stop 或 restart 時 echo usage $0 start|stop|restart。 # 顯示命令提示信息:程序的調(diào)用方法 esac #case 結(jié)構(gòu)結(jié)束 2)程序的功能是啟動,停止或重新啟動httpd 進程 3)程序的調(diào)用方式有三種:啟動,停止和重新啟動。 3. #!/bin/sh FILENAME= echo “ Input file name :” read FILENAME if -c $FILENAME then cp $FILENAME /dev fi 4. #/bin/bash typeset first second
15、read -p Input the first number: first read -p Input the second number: second result=$first+$second echo result is : $result exit 0 5、 #!/bin/sh i=1 while i -le 50 do if -d /userdata 。then mkdir -p /userdata/user$i chmod 754 /userdata/user$i echo user$i let i = i + 1 或 i=$i + 1) else mkdir /userdata
16、 mkdir -p /userdata/user$i chmod 754 /userdata/user$i echo user$i let i = i + 1 或 i=$ 定期由調(diào)度程序調(diào)度 ,這也是 內(nèi)存 管理依賴于進程調(diào)度 的唯一原因。當(dāng)一個進程存取的 內(nèi)存映射被換出 時,內(nèi)存管理向文件系 統(tǒng)發(fā)出請求,同時,掛起當(dāng)前正在運行的進程。 二. 編程題 1參考程序 : #include struct test int a10 。 char b20 。 int main( struct test *ptr=calloc(sizeof(struct test,10 。 2參考程序 : #includ
17、e #include #include #include #include main( int fd 。 void *start 。 struct stat sb 。 fd=open( /etc/passwd ”,O_RDONLY /* 打開 /etc/passwd*/ fstat(fd,這涉及到 了 LINUX SHELL編程中的命令引用,LINUX下的標(biāo)準(zhǔn)的 BASH是支持命令引用的,而其它的 SHELL就 不一定了。 圖A-2所示分別為程序的運行時的窗口和單擊Hello World 按鈕后彈出的對話框。 Hello barId! 條好! 自由的世界。 確定(Q) Hello World1
18、. 圖A-2 4參考程序: /thread.c #include typedef struct _Ourarg Ourarg struct _Ourarg GtkWidget *fixed 。 GtkWidget *image 。 gint right 。 gint left 。 。 void image_go(Ourarg *arg gint x, y, toward。 x = y = arg-left。 toward = 1 。 for( 。 g_usleep(1500 。 gdk_threads_enter( 。 gtk_fixed_move(GTK_FIXED(arg-fixed,ar
19、g-image, x, y switch(toward case 1: x = x + 10 。 if( x arg-right toward = 2 break 。 case 2: y = y + 10 。 if( y arg-right toward = 3 break 。 case 3: x = x - 10 。 if( x left toward = 4 break 。 case 4: y = y -10 。 if( y left toward = 1 gdk_threads_leave( 。 int main(int argc, char* argv GtkWidget *windo
20、w 。 GtkWidget *vbox, *viewport, *button 。 GtkWidget *image, *fixed 。 Ourarg *arg 。 if(!g_thread_supported( g_thread_init(NULL 。 gdk_threads_init( 。 gtk_init(&argc,&argv 。 wi ndow = gtk_wi ndow_ new(GTK_WINDOW_TOPLEVEL gtk_window_set_title(GTK_WINDOW(window, 線程測試 。 g_signal_connect(G_OBJECT(window,delete_event, G_CALLBACK(gtk_main_quit,NULL 。 gtk_container_set_border_width(GTK_CONTAINER(window,2 vbox = gtk_vbox_new(FALSE,0 。 gtk_container_add(GTK_CONTAINER(window,vbox 。 fixed = g
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報書字體標(biāo)準(zhǔn)
- 合同范本美容美發(fā)
- 傳媒影視合同范本
- 和移動合作合同范本
- 兼職寶潔勞務(wù)合同范本
- 含油銅軸承采購合同范例
- 知識產(chǎn)權(quán)保護高地建設(shè)的實踐步驟與部署
- 品牌冠名合作合同范本
- 合作投資入股合同范本
- 加快建設(shè)知識產(chǎn)權(quán)保護高地的戰(zhàn)略規(guī)劃
- YYT0287-2017標(biāo)準(zhǔn)與醫(yī)療器械法規(guī)對照表
- 部編版道德與法治三年級下冊教案全冊
- 山西眾輝電力服務(wù)公司歷年真題
- 修建蓄水池施工合同協(xié)議書范本
- CJJ-181-2012(精華部分)城鎮(zhèn)排水管道檢測與評估技術(shù)規(guī)程
- 《乳腺癌的防治》課件
- 個人所得稅個人所得稅
- 《小貓的九個命》
- 大班健康《愛是什么》課件
- 特種作業(yè)(鍋爐工)安全培訓(xùn)
- 煤礦違章行為及預(yù)防
評論
0/150
提交評論