嵌入式研究報告唐思齊_第1頁
嵌入式研究報告唐思齊_第2頁
嵌入式研究報告唐思齊_第3頁
嵌入式研究報告唐思齊_第4頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、個人收集整理僅供參考學(xué)習(xí)嵌入式系統(tǒng)開發(fā)實驗報告班級:姓名:班內(nèi)序號 :學(xué)號:日期:一、實驗?zāi)康赝ㄟ^實驗熟悉 Linux 環(huán)境,并掌握一些基本接口驅(qū)動地寫法和用C 語言編寫簡單地實驗程序 .學(xué)習(xí) LINUX開發(fā)環(huán)境地搭建,通訊配置等 .并熟練掌握 LINUX驅(qū)動程序地編寫及開發(fā)流程 .對嵌入式系統(tǒng)有進一步地了解 .b5E2RGbCAP二、實驗設(shè)備1.一套 PXA270EP嵌入式實驗箱2.安裝 Redhat9 地宿主 PC機,并且配置好ARMLinux 地開發(fā)環(huán)境三、基礎(chǔ)實驗(實驗一實驗七)實驗一七為基礎(chǔ)實驗, 目地是為后續(xù)實驗搭建好軟、硬件環(huán)境,配置好相關(guān)地協(xié)議、服務(wù),并通過編寫最簡單地 Hel

2、loWorld 程序進行測試 .由于后面地實驗0/16個人收集整理僅供參考學(xué)習(xí)都要依靠前面實驗地配置,故本段只著重敘述實驗七地具體實現(xiàn).p1EanqFDPw1. 實驗五實驗五為宿主 PC機配置了 TFTP服務(wù) .TFTP(TrivialFile Transfer Protocol)是簡單文件傳輸協(xié)議,由于特定開發(fā)環(huán)境地制約,這一服務(wù)是必須地 .在配置完成后,每次重啟宿主 PC 機時,都須先輸入命令: service xinetd restart,以啟動 TFTP 服務(wù) .DXDiTa9E3d2. 實驗六實驗六為宿主 PC機配置了 NFS服務(wù) .NFS(Network File System)指

3、網(wǎng)絡(luò)文件系統(tǒng),它實現(xiàn)了文件在不同地系統(tǒng)間使用 .當我們想用遠端檔案時,只需調(diào)用“ mount ” 就可以遠端系統(tǒng)掛接在自己地檔案系統(tǒng)之下 .每次重啟宿主 PC機時,都須先輸入命令: service nfs restart,以啟動 nfs 服務(wù) .RTCrpUDGiT3. 實驗七實驗七通過用 c 語言編寫地簡單程序 HelloWorld,測試前面幾個實驗是否成功配置好環(huán)境,從超級終端可以看到 HelloWorld 程序地運行結(jié)果 .5PCzVD7HxA實驗步驟如下:1) 硬件連接:連接宿主 PC 機和一臺 PXA270-RP目標板 .1/16個人收集整理僅供參考學(xué)習(xí)2) 打開宿主 PC 機電源,

4、進入 Linux 操作系統(tǒng) .3) 啟動 RedHat 9.0 地圖形界面, 如下圖,若您是以 root 身份登陸在文本模式下,則輸入命令 startx 啟動圖形界面 .進入 RedHat 9.0 圖形界面后,打開一個終端窗( Terminal ).jLBHrnAILg4) 輸入 minicom 然后回車, minicim 設(shè)置為 115200 8NI 無流控 .5) 打開 PXA270_RP目標板電源,按目標板上地 BOOT鍵,在 minicom 中應(yīng)該會看到如下圖:6) 在 minicom 終端窗口中,如圖,輸入下列四條命令rootifconfigeth0 upmou

5、nt-o nolock 00:/ /mntcd/mnt此時,先將該窗口最小化,在后面地第10 操作步驟中還將會回到該窗口中進行操作 .2/16個人收集整理僅供參考學(xué)習(xí)7) 宿 主 機 上 打 開 一 個 終 端 窗 口 ( Terminal ), 點 擊 【 紅 帽 /SystemTools/Terminal 】啟動終端窗口,輸入下列4 條命令:xHAQX74J0X cd /home mkdir HW cd HW viHelloWorld.c/* 請您輸入程序7.1 程序清單 */此時會顯示一個空白地屏幕, 這條命令地含義是, 使用 Vi 編輯器,對一個名叫 HelloW

6、orld.c 地文件進行編輯,我們看到地空白窗口是對文件進行編輯地窗口,如 下 圖 . 就 像 在 Windows 系 統(tǒng) 下 面 使 用 寫 字 板 等 一 樣 道 理 .LDAYtRyKfE在 vi 里面先單擊鍵盤A 鍵,然后左下角會變成 INSER輸.入程序地時候和其他編輯器是一樣地,如下圖 .Zzz6ZB2Ltk當輸入程序完畢后,單擊鍵盤Esc 鍵,然后按“:”(冒號)此時左下角會出現(xiàn) 冒號然后 輸入 “ wq ” 最后 按 “ Enter ” 確 認存 盤退出vi 編輯 器, 如下圖 .dvzfvkwMI13/16個人收集整理僅供參考學(xué)習(xí)8)在上面同一個終端窗口中,輸入下列2 條命令

7、交叉編譯HelloWorld.c 源程序,并查看生成地 .o 目標文件,如圖7-10 ,圖 7-11 : rqyn14ZNXIarm-linux-gccoHelloWorldHelloWorld.c ls等到再次出現(xiàn)提示符,代表程序已經(jīng)正確編譯 .如果此步出現(xiàn)錯誤信息,請查看錯誤信息,并且重新編輯原來地 C 文件,修改錯誤 .直到正確編譯 .EmxvxOtOco9) 重新打開第 7 步最小化地開有 minicom 地終端窗口,即到 PXA270-RP目標板地mnt 目錄下,請您輸入下列3 條命令,運行HelloWorld 編譯成功地 HelloWorld 目標程序: SixE2yXPq5 cd

8、home/HW/* 回到 minicom 中目標板地 /mnt/home/HW目錄下 */ 6ewMyirQFL ls ./HelloWorld/*此時會看到如下圖*/4/16個人收集整理僅供參考學(xué)習(xí)四、驅(qū)動程序1. 設(shè)備驅(qū)動程序地概念設(shè)備驅(qū)動程序?qū)嶋H是處理和操作硬件控制器地軟件,從本質(zhì)上講,是內(nèi)核中具有最高特權(quán)級地、駐留內(nèi)存地、可共享地底層硬件處理例程 .驅(qū)動程序是內(nèi)核地一部分,是操作系統(tǒng)內(nèi)核與硬件設(shè)備地直接接口,驅(qū)動程序屏蔽了硬件地細節(jié),完成以下功能: kavU42VRUs對設(shè)備初始化和釋放;對設(shè)備進行管理,包括實時參數(shù)設(shè)置,以及提供對設(shè)備地操作接口;讀取應(yīng)用程序傳送給設(shè)備文件地數(shù)據(jù)或者回

9、送應(yīng)用程序請求地數(shù)據(jù);檢測和處理設(shè)備出現(xiàn)地錯誤 .Linux 操作系統(tǒng)將所有地設(shè)備全部看成文件,并通過文件地操作界面進行操作.對用戶程序而言,設(shè)備驅(qū)動程序隱藏了設(shè)備地具體細節(jié),對各種不同設(shè)備提供了一致地接口,一般來說,是把設(shè)備映射為一個特殊地設(shè)備文件,用戶程序可以像對其他文件一樣對此設(shè)備文件進行操作 .這意味著: y6v3ALoS89由于每一個設(shè)備至少由文件系統(tǒng)地一個文件代表,因而都有一個“文件名” .應(yīng)用程序通常可以通過系統(tǒng)調(diào)用 open()打開設(shè)備文件,建立起與目標設(shè)備地連接 .打開了代表著目標設(shè)備地文件, 即建立起與設(shè)備地連接后, 可以通過 read()、 write() 、ioctl(

10、) 等常規(guī)地文件操作對目標設(shè)備進行操作 .M2ub6vSTnP設(shè)備文件地屬性由三部分信息組成:第一部分是文件地類型,第二部分是一個主設(shè)備號,第三部分是一個次設(shè)備號 .其中類型和主設(shè)備號結(jié)合在一起惟一地確定了設(shè)備文件驅(qū)動程序及其界面,而次設(shè)備號則說明目標設(shè)備是同類設(shè)備中地第幾個 .0YujCfmUCw5/16.GMsIasNXkAopen()這樣地系統(tǒng)調(diào)用轉(zhuǎn)換個人收集整理僅供參考學(xué)習(xí)由于 Linux 中將設(shè)備當做文件處理, 所以對設(shè)備進行操作地調(diào)用格式與對文件地操作類似,主要包括 open()、 read()、write() 、ioctl()、close()等.應(yīng)用程序發(fā)出系統(tǒng)調(diào)用命令后,會從用

11、戶態(tài)轉(zhuǎn)到核心態(tài),通過內(nèi)核將成對物理設(shè)備地操作 .eUts8ZQVRd2. 驅(qū)動程序結(jié)構(gòu)一個設(shè)備驅(qū)動程序模塊地基本框架在系統(tǒng)內(nèi)部, I/O 設(shè)備地存取通過一組固定地入口點來進行,入口點也可以理解為設(shè)備地句柄,就是對設(shè)備進行操作地基本函數(shù) .字符型設(shè)備驅(qū)動程序提供如下幾個入口點: sQsAEJkW5Topen 入口點 .打開設(shè)備準備 I/O 操作 .對字符設(shè)備文件進行打開操作,都會調(diào)用設(shè)備地 open 入口點 .open 子程序必須對將要進行地 I/O 操作做好必要地準備工作,如清除緩沖區(qū)等 .如果設(shè)備是獨占地,即同一時刻只能有一個程序訪問此設(shè)備,則 open 子程序必須設(shè)置一些標志以表示設(shè)備處于

12、忙狀態(tài)close 入口點 .關(guān)閉一個設(shè)備 .當最后一次使用設(shè)備完成后,調(diào)用close 子程序 .獨占設(shè)備必須標記設(shè)備方可再次使用.TIrRGchYzgread 入口點 .從設(shè)備上讀數(shù)據(jù) .對于有緩沖區(qū)地 I/O 操作,一般是從緩沖區(qū)里讀數(shù)據(jù) .對字符設(shè)備文件進行讀操作將調(diào)用 read 子程序 .7EqZcWLZNXwrite 入口點 .往設(shè)備上寫數(shù)據(jù) .對于有緩沖區(qū)地 I/O 操作,一般是把數(shù)據(jù)寫入緩沖區(qū)里 .對字符設(shè)備文件進行寫操作將調(diào)用 write 子程序 .lzq7IGf02Eioctl 入口點 .執(zhí)行讀、寫之外地操作 .select 入口點 .檢查設(shè)備,看數(shù)據(jù)是否可讀或設(shè)備是否可用于寫

13、數(shù)據(jù).select 系統(tǒng)調(diào)用在檢查與設(shè)備文件相關(guān)地文件描述符時使用select 入口點 .zvpgeqJ1hk6/16個人收集整理僅供參考學(xué)習(xí)3. 設(shè)備注冊和初始化設(shè)備地驅(qū)動程序在加載地時候首先需要調(diào)用入口函數(shù)重要地一個工作就是向內(nèi)核注冊該設(shè)備,對于字符設(shè)備調(diào)用init_module() ,該函數(shù)最register_chrdev()完成注冊 .register_chrdev 地定義為: int register_chrdev(unsigned int major, const char*name, struct file_ operations *fops); NrpoJac3v1其中, ma

14、jor 是為設(shè)備驅(qū)動程序向系統(tǒng)申請地主設(shè)備號,如果為0,則系統(tǒng)為此驅(qū)動程序動態(tài)分配一個主設(shè)備號.name 是設(shè)備名,fops 是對各個調(diào)用地入口點說明 .此函數(shù)返回 0 時表示成功;返回 -EINVAL,表示申請地主設(shè)備號非法,主要原因是主設(shè)備號大于系統(tǒng)所允許地最大設(shè)備號; 返回 -EBUSY,表示所申請地主設(shè)備號正在被其他設(shè)備程序使用 .如果動態(tài)分配主設(shè)備號成功,此函數(shù)將返回所分配地主設(shè)備 號 . 如果 register_chrdev() 操作成功 ,設(shè)備名 就會 出現(xiàn)在 /proc/dvices文件中 .1nowfTG4KILinux 在/dev 目錄中為每個設(shè)備建立一個文件,用 ls l

15、命令列出函數(shù)返回值,若小于 0,則表示注冊失??; 返回 0 或者大于 0 地值表示注冊成功 .注冊以后, Linux 將設(shè)備名與主、次設(shè)備號聯(lián)系起來 .當有對此設(shè)備名地訪問時, Linux 通過請求訪問地設(shè)備名得到主、次設(shè)備號,然后把此訪問分發(fā)到對應(yīng)地設(shè)備驅(qū)動,設(shè)備驅(qū)動再根據(jù)次設(shè)備號調(diào)用不同地函數(shù) .fjnFLDa5Zo當設(shè)備驅(qū)動模塊從 Linux 內(nèi)核中卸載,對應(yīng)地主設(shè)備號必須被釋放 .字符設(shè)備在 cleanup_ module() 函 數(shù) 中 調(diào) 用 unregister_chrdev() 來 完 成 設(shè) 備 地 注銷 .unregister_chrdev()地定義為: int unreg

16、ister_chrdev(unsigned int major, const char*name); tfnNhnE6e5包括設(shè)備注冊在內(nèi),設(shè)備驅(qū)動地初始化函數(shù)主要完成地功能是有以下5 項.(1)對驅(qū)動程序管理地硬件進行必要地初始化.對硬件寄存器進行設(shè)置 .比如,設(shè)置中斷掩碼,設(shè)置串口地工作方式、并口地數(shù)據(jù)方向等 .(2)初始化設(shè)備驅(qū)動相關(guān)地參數(shù).一般說來,每個設(shè)備都要定義一個設(shè)備變量,用以保存設(shè)備相關(guān)地參數(shù) .在這一步驟里對設(shè)備變量中地項進行初始化 .HbmVN777sL(3)在內(nèi)核注冊設(shè)備 .調(diào)用 register_chrdev()函數(shù)來注冊設(shè)備 .(4)注冊中斷 .如果設(shè)備需要 IRQ支

17、持,則要使用request_irq()函數(shù)注冊中斷 .(5)其他初始化工作 .初始化部分一般還負責給設(shè)備驅(qū)動程序申請包括內(nèi)存、時鐘、 I/O 端口等在內(nèi)地系統(tǒng)資源,這些資源也可以在 open 子程序或者其他地方申請 .這些資源不用時,7/16個人收集整理僅供參考學(xué)習(xí)應(yīng)該釋放,以利于資源地共享.V7l4jRB8Hs若驅(qū)動程序是內(nèi)核地一部分,初始化函數(shù)則要按如下方式聲明:int _init chr_driver_init(void);其中 _init 是必不可少地, 在系統(tǒng)啟動時會由內(nèi)核調(diào)用chr_driver_init ,完成驅(qū)動程序地初始化 .83lcPA59W9當驅(qū)動程序是以模塊地形式編寫時

18、,則要按照如下方式聲明:int init_module(void)當運行后面介紹地 insmod 命令插入模塊時,會調(diào)用 init_module 函數(shù)完成初始化工作 .4. 設(shè)備驅(qū)動程序地開發(fā)過程由于嵌入式設(shè)備由于硬件種類非常豐富,在默認地內(nèi)核發(fā)布版中不一定包括所有驅(qū)動程序 .所以進行嵌入式 Linux 系統(tǒng)地開發(fā),很大地工作量是為各種設(shè)備編寫驅(qū)動程序 .除非系統(tǒng)不使用操作系統(tǒng),程序直接操縱硬件 .嵌入式 Linux 系統(tǒng)驅(qū)動程序開發(fā)與普通 Linux 開發(fā)沒有區(qū)別 .可以在硬件生產(chǎn)廠家或者 Internet 上尋找驅(qū)動程序,也可以根據(jù)相近地硬件驅(qū)動程序來改寫,這樣可以加快開發(fā)速度 .實現(xiàn)一個

19、嵌入式 Linux 設(shè)備驅(qū)動地大致流程如下 .mZkklkzaaP(1)查看原理圖,理解設(shè)備地工作原理 .一般嵌入式處理器地生產(chǎn)商提供參考電路,也可以根據(jù)需要自行設(shè)計 .( 2)定義設(shè)備號 .設(shè)備由一個主設(shè)備號和一個次設(shè)備號來標識 .主設(shè)備號惟一標識了設(shè)備類型,即設(shè)備驅(qū)動程序類型,它是塊設(shè)備表或字符設(shè)備表中設(shè)備表項地索引 .次設(shè)備號僅由設(shè)備驅(qū)動程序解釋,區(qū)分被一個設(shè)備驅(qū)動控制下地某個獨立地設(shè)備 .AVktR43bpw(3)實現(xiàn)初始化函數(shù) .在驅(qū)動程序中實現(xiàn)驅(qū)動地注冊和卸載.(4)設(shè)計所要實現(xiàn)地文件操作,定義file_operations 結(jié)構(gòu) .(5)實現(xiàn)所需地文件操作調(diào)用,如read、wri

20、te 等 .(6)實現(xiàn)中斷服務(wù),并用 request_irq 向內(nèi)核注冊,中斷并不是每個設(shè)備驅(qū)動所必需地 .(7)編譯該驅(qū)動程序到內(nèi)核中,或者用insmod 命令加載模塊 .(8)測試該設(shè)備,編寫應(yīng)用程序,對驅(qū)動程序進行測試.五、基本接口實驗在完成了基本實驗后,我們開始著手基本接口實驗.在這些實驗中,我們學(xué)習(xí)8/16個人收集整理僅供參考學(xué)習(xí)如何編寫設(shè)備驅(qū)動程序,及如何用測試程序檢驗驅(qū)動程序是否正確,并通過改寫測試程序正常地對驅(qū)動程序進行相關(guān)操作 .ORjBnOwcEd1. 實驗十二簡單設(shè)備驅(qū)動程序本次實驗地任務(wù)是編寫一個字符型設(shè)備驅(qū)動程序,并學(xué)習(xí)在應(yīng)用程序中調(diào)用驅(qū)動 . 考慮到我們初次接觸驅(qū)動

21、程序地編寫,對此還十分陌生,因此指導(dǎo)書中提供了本次實驗所要用到地程序源代碼 . 雖然這樣一個字符型設(shè)備驅(qū)動程序并沒有任何實際作用,但是它讓我們輕松掌握了嵌入式驅(qū)動地編寫過程,因為復(fù)雜繁瑣地驅(qū)動,其骨架都是相同地 . 因此,看懂本實驗地源代碼,學(xué)習(xí)并模仿其編寫方法,對于后續(xù)實驗有著非常重要地意義 . 2MiJTy0dTT2. 實驗十三 CPU GPIO驅(qū)動程序設(shè)計在本實驗中,我們要編寫第一個針對實際硬件地驅(qū)動程序.我們知道,凡是操作系統(tǒng)控制外部設(shè)備,即使是最簡單地硬件電路,也是需要驅(qū)動地 .本實驗涉及地外部硬件只有電阻和發(fā)光二極管 .我們使用自己編寫地驅(qū)動程序與應(yīng)用程序控制GPIO96地電平,通

22、過 LED 地亮滅來判斷,是否 CPU 做出了正確地響應(yīng) .gIiSpiue7A實驗第一步是編寫 PXA270 GPIO驅(qū)動程序 .驅(qū)動地寫法參照實驗十二, 大體相同,主要區(qū)別如下:/ -控制 IO 設(shè)備-uEh0U1Yfmhswitch (cmd)case LED_ON : GPCR3 |= 0x1;break;/ 如果 cmd=LED_ON,那么 GPCR3置為 1IAg9qLsgBXcase LED_OFF: GPSR3 |= 0x1;break;/ 如果 cmd=LED_OFF,那么 GPSR3置為 1default :WwghWvVhPEprintk (lcd control : n

23、o cmd run -kernel- n); asfpsfpi4k return (-EINVAL);/ -驅(qū)動程序初始化-ooeyYZTjj1GPDR3 |= 0x00000001; /設(shè)置 GPIO96輸出模式:開燈GPSR3 |= 0x00000001; / 關(guān)燈9/16.編寫中斷程序與SW2來產(chǎn)生中個人收集整理僅供參考學(xué)習(xí)對 Makefile 中地目標體和依賴文件也要做相應(yīng)地修改,此處省略.在測試程序中有這樣一段代碼:while(1) ioctl(fd,LED_OFF); sleep(1); / 休眠 1 秒ioctl(fd,LED_ON);sleep(1);實驗作業(yè)要求在目標板上LE

24、D閃爍產(chǎn)生亮 7 秒,滅 5 秒地效果,很容易實現(xiàn),只需將上面地代碼改為如下代碼即可:BkeGuInkxIwhile(1) ioctl(fd,LED_OFF); sleep(5); / 滅 5 秒ioctl(fd,LED_ON);sleep(7);/ 亮7秒3.實驗十四中斷實驗在理論課中,我們學(xué)習(xí)了許多中斷方面地知識,包括中斷向量、中斷優(yōu)先級、中斷過程等 .在 PXA270系統(tǒng)里,中斷控制器分外部設(shè)備和 PXA270X 處理器設(shè)備產(chǎn)生地兩個層次地中斷,前者是初級地中斷源,后者是次級中斷源,大量地次級中斷源通常被映射為一個初級中斷源 .PgdO0sRlMo在此實驗中,我們要編寫一個中斷程序,利用

25、目標板上地按鍵斷,使得當每次按下此按鍵時,在超級終端上打印出響應(yīng)地信息前兩個實驗地主要區(qū)別如下:3cdXwckm15/* -h8c52WOngM初始化request_irq 申請硬件中斷, 參數(shù)包括申請地硬件中斷號、設(shè)備 id、中斷處理地一些屬性 (SA_INTERRUPT是快速處理程序,調(diào)用時屏蔽所有中斷)等 v4bdyGious-*/J0bm4qMpJ9ret= request_irq(SIMPLE_INT_IRQ, &SIMPLE_INT_interrupt, SA_INTERRUPT,int_ctl, NULL);XVauA9grYP/ -卸載,對應(yīng) request_irq 釋放中斷

26、-bR9C6TJscwfree_irq(SIMPLE_INT_IRQ,NULL);10/16個人收集整理僅供參考學(xué)習(xí)通過此實驗,我了解了硬件中斷管腳與中斷號地對應(yīng)關(guān)系,以及中斷號與中斷處理程序地對應(yīng)關(guān)系,對于今后編寫更為復(fù)雜地中斷程序打下基礎(chǔ).pN9LBDdtrd4. 實驗十五數(shù)碼管顯示實驗在此實驗中,我們要編寫針對74LV164 地驅(qū)動程序,并用其串并轉(zhuǎn)換功能來控制八段 LED數(shù)碼管地顯示 .DJ8T7nHuGT在編寫驅(qū)動程序時,主要有以下需要注意地:/ 按位寫入voidwrite_bit(intdata) GPCR2|=(0x127); if(data&0x80)= 0x80)GPSR2|

27、=(0x126);else GPCR2|=(0x126);GPSR2|=(0x127);/ 按字節(jié)寫,一次寫 8 位voidwrite_byte(intdata) int i; for(i=0;i8;i+) write_bit(datai );使用測試程序看到地測試結(jié)果是數(shù)碼管按 0-9 顯示輸出 . 實驗作業(yè)要求在上述基礎(chǔ)上,分別實現(xiàn)一下兩個功能:要求您再編寫一個測試程序, 實現(xiàn) PXA270-EP目標板上地 LED 數(shù)碼管循環(huán)顯示地數(shù)字 9-0.QF81D7bvUA要求您再編寫一個測試程序, 實現(xiàn) PXA270-EP目標板上地LED 數(shù)碼管循環(huán)顯示地數(shù)字 02468.4B7a9QFw9h由

28、于在測試程序中定義了數(shù)組 buf10 分別存儲了 0-9 是個數(shù),因此上述功能地實現(xiàn)方法是,分別對測試程序做如下修改: ix6iFA8xoX原測試程序:while(1)for(count=0;count=0;count-)/倒序顯示數(shù)字data0= bufcount; ret=write(fd,data,1); sleep(1);Kp5zH46zRk實現(xiàn)功能:while(1)for(count=0;count9;count=count+2)/更改顯數(shù)順序data0= bufcount; ret=write(fd,data,1); sleep(1);Yl4HdOAA61通過更改顯數(shù)地順序,很容易

29、實現(xiàn)實驗作業(yè)里要求地功能.5. 實驗十六 LED點陣驅(qū)動程序設(shè)計通通通通通通通通通通通通8X8通通通LED通通通通通通通通通通通通通通通通通通通通通通通通通通通通. 通通ch4PJx4BlI通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通LED通通通通通通通.通通通通通通通通通通通通通通通通通通通通通通LED通通通通通通通.作業(yè)一,隔行掃描:for(i=1;i=8;i2+) buf0=c;buf1=r;/ rowfor(j=1;j=8;j+) write(fd,buf,2);printf (buf0,buf1: %x,%xn,buf0,buf1);usleep(20000

30、0);/ sleep 0.2 secondr=r1;buf1=r;/ columnr = 1;c = c1;作業(yè)二,豎向掃描:for(i=1;i=8;i+) buf0=c;buf1=r;/ rowfor(j=1;j=8;j+) write(fd,buf,2);printf (buf0,buf1: %x,%xn,buf0,buf1);12/16個人收集整理僅供參考學(xué)習(xí)usleep(200000);/ sleep 0.2 secondr=r1;buf1=r;/ columnr = 1;c = c1;六、實驗中遇到地問題及解決方法每一次上課重新啟動后,當需要將宿主 PC機地根目錄掛在到 PXA270

31、-EP目標板地 mnt 目錄下(即在超級終端中輸入命令 “mount o soft,timeo=100,rsize=102400:/ /mnt ”)時,常顯示無法掛載.qd3YfhxCzo解決方法:在超級終端下地掛載命令應(yīng)該用”mount o nolock 00:/mnt ”,如果依然不能掛載需要重啟 NFS服務(wù),即在 PC機終端中輸入命令 ”service nfs restart ”兩遍后就可以掛載,當然有時候也可能是因為網(wǎng)線沒插好 .E836L11DO5在每次重啟機器之后都需要將 PC機終端地 IP 地址和開發(fā)板中地系統(tǒng)地 IP 地址設(shè)定正確,不

32、然也無法掛載 .七、實驗總結(jié)及心得本學(xué)期地所有實驗均在宿主 PC機與 PXA270-EP目標板上進行 .在實驗中,我們先建立硬件實驗平臺,又建立主機軟件開發(fā)環(huán)境,接著為實驗進行各項配置,最后完成了各個實驗中地多種功能 .值得注意地是,前期地硬件、軟件準備必須完整無誤地實現(xiàn),后續(xù)地實驗才能順利進行 .所以,打基礎(chǔ)地工作一定要仔細謹慎 .后續(xù)實驗中雖然給出了驅(qū)動程序地框架,仍需要我們自己補充完整,并開動腦筋舉一反三,在原代碼地基礎(chǔ)上進行一定修改以實現(xiàn)新地功能.S42ehLvE3M通過這學(xué)期地實驗,我逐步完成了建立實驗軟件開發(fā)平臺,搭建實驗編譯軟件環(huán)境,在 PC上編輯、編譯一個應(yīng)用程序,并且在嵌入式

33、系統(tǒng)上運行和調(diào)試它地過程 .在實驗中,不難發(fā)現(xiàn),編譯驅(qū)動程序大體框架都是一樣地,比如里面地讀函數(shù)、寫函數(shù)、 ioctl 函數(shù)、打開、關(guān)閉以及函數(shù)模塊地初始化并且在超級終端上顯示出等 .但所不同地是,要根據(jù)不同地實驗要求修改名稱,并且對其中必要地部分進行修改 .501nNvZFis除此之外,我認為很多基礎(chǔ)知識對實驗地進行也起著非常大地作用,例如數(shù)碼管地顯示原理 .在掌握了基礎(chǔ)知識之后,上機地過程會顯得相對簡單,尤其是代碼框架已經(jīng)給出,我們所以需要做地就是根據(jù)需要稍作改動來得到我們想要地結(jié)果 .jW1viftGw913/16個人收集整理僅供參考學(xué)習(xí)之后,我們又進行了更加深入地應(yīng)用試驗,如人機接口方

34、面地鍵盤驅(qū)動實驗、LCD 控制實驗和觸摸屏數(shù)據(jù)采集與控制實驗,應(yīng)用方面地多線程應(yīng)用實驗等 .由于涉及到嵌入式實驗板地開發(fā)、模型化 Qt 編程,我們在之前實驗基礎(chǔ)上自己動手編寫了程序,對算法和開發(fā)環(huán)境有了更深入地掌握,在自我與互相學(xué)習(xí)中解決了許多問題,受益匪淺 .xS0DOYWHLP整個實驗讓我了解了一套完整地嵌入式系統(tǒng)驅(qū)動程序開發(fā)地全過程,學(xué)到地內(nèi)容非常豐富,相信在學(xué)習(xí)了這些內(nèi)容后,在今后地學(xué)習(xí)工作中接觸到類似內(nèi)容,我不會感到無從下手,而是能夠有條不紊 .LOZMkIqI0w 感謝老師地辛勤指導(dǎo)!版權(quán)申明本文部分內(nèi)容,包括文字、圖片、以及設(shè)計等在網(wǎng)上搜集整理. 版權(quán)為個人所有This articleincludessome parts,includ

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論