freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

北郵嵌入式實(shí)驗(yàn)報(bào)告-資料下載頁(yè)

2024-10-19 18:16本頁(yè)面
  

【正文】 設(shè)備名得到主、次設(shè)備號(hào),然后把此訪問(wèn)分發(fā)到對(duì)應(yīng)的設(shè)備驅(qū)動(dòng),設(shè)備驅(qū)動(dòng)再根據(jù)次設(shè)備號(hào)調(diào)用不同的函數(shù)。當(dāng)設(shè)備驅(qū)動(dòng)模塊從Linux內(nèi)核中卸載,對(duì)應(yīng)的主設(shè)備號(hào)必須被釋放。字符設(shè)備在cleanup_ module()函數(shù)中調(diào)用unregister_chrdev()來(lái)完成設(shè)備的注銷。unregister_chrdev()的定義為:int unregister_chrdev(unsigned int major, const char *name)。包括設(shè)備注冊(cè)在內(nèi),設(shè)備驅(qū)動(dòng)的初始化函數(shù)主要完成的功能是有以下5項(xiàng)。(1)對(duì)驅(qū)動(dòng)程序管理的硬件進(jìn)行必要的初始化。對(duì)硬件寄存器進(jìn)行設(shè)置。比如,設(shè)置中斷掩碼,設(shè)置串口的工作方式、并口的數(shù)據(jù)方向等。(2)初始化設(shè)備驅(qū)動(dòng)相關(guān)的參數(shù)。一般說(shuō)來(lái),每個(gè)設(shè)備都要定義一個(gè)設(shè)備變量,用以保存設(shè)備相關(guān)的參數(shù)。在這一步驟里對(duì)設(shè)備變量中的項(xiàng)進(jìn)行初始化。(3)在內(nèi)核注冊(cè)設(shè)備。調(diào)用register_chrdev()函數(shù)來(lái)注冊(cè)設(shè)備。(4)注冊(cè)中斷。如果設(shè)備需要IRQ支持,則要使用request_irq()函數(shù)注冊(cè)中斷。(5)其他初始化工作。初始化部分一般還負(fù)責(zé)給設(shè)備驅(qū)動(dòng)程序申請(qǐng)包括內(nèi)存、時(shí)鐘、I/O端口等在內(nèi)的系統(tǒng)資源,這些資源也可以在open子程序或者其他地方申請(qǐng)。這些資源不用時(shí),應(yīng)該釋放,以利于資源的共享。若驅(qū)動(dòng)程序是內(nèi)核的一部分,初始化函數(shù)則要按如下方式聲明: int __init chr_driver_init(void)。其中__init是必不可少的,在系統(tǒng)啟動(dòng)時(shí)會(huì)由內(nèi)核調(diào)用chr_driver_init,完成驅(qū)動(dòng)程序的初始化。當(dāng)驅(qū)動(dòng)程序是以模塊的形式編寫時(shí),則要按照如下方式聲明: int init_module(void)當(dāng)運(yùn)行后面介紹的insmod命令插入模塊時(shí),會(huì)調(diào)用init_module函數(shù)完成初始化工作。由于嵌入式設(shè)備由于硬件種類非常豐富,在默認(rèn)的內(nèi)核發(fā)布版中不一定包括所有驅(qū)動(dòng)程序。所以進(jìn)行嵌入式Linux系統(tǒng)的開(kāi)發(fā),很大的工作量是為各種設(shè)備編寫驅(qū)動(dòng)程序。除非系統(tǒng)不使用操作系統(tǒng),程序直接操縱硬件。嵌入式Linux系統(tǒng)驅(qū)動(dòng)程序開(kāi)發(fā)與普通Linux開(kāi)發(fā)沒(méi)有區(qū)別。可以在硬件生產(chǎn)廠家或者Internet上尋找驅(qū)動(dòng)程序,也可以根據(jù)相近的硬件驅(qū)動(dòng)程序來(lái)改寫,這樣可以加快開(kāi)發(fā)速度。實(shí)現(xiàn)一個(gè)嵌入式Linux設(shè)備驅(qū)動(dòng)的大致流程如下。(1)查看原理圖,理解設(shè)備的工作原理。一般嵌入式處理器的生產(chǎn)商提供參考電路,也可以根據(jù)需要自行設(shè)計(jì)。(2)定義設(shè)備號(hào)。設(shè)備由一個(gè)主設(shè)備號(hào)和一個(gè)次設(shè)備號(hào)來(lái)標(biāo)識(shí)。主設(shè)備號(hào)惟一標(biāo)識(shí)了設(shè)備類型,即設(shè)備驅(qū)動(dòng)程序類型,它是塊設(shè)備表或字符設(shè)備表中設(shè)備表項(xiàng)的索引。次設(shè)備號(hào)僅由設(shè)備驅(qū)動(dòng)程序解釋,區(qū)分被一個(gè)設(shè)備驅(qū)動(dòng)控制下的某個(gè)獨(dú)立的設(shè)備。(3)實(shí)現(xiàn)初始化函數(shù)。在驅(qū)動(dòng)程序中實(shí)現(xiàn)驅(qū)動(dòng)的注冊(cè)和卸載。(4)設(shè)計(jì)所要實(shí)現(xiàn)的文件操作,定義file_operations結(jié)構(gòu)。(5)實(shí)現(xiàn)所需的文件操作調(diào)用,如read、write等。(6)實(shí)現(xiàn)中斷服務(wù),并用request_irq向內(nèi)核注冊(cè),中斷并不是每個(gè)設(shè)備驅(qū)動(dòng)所必需的。(7)編譯該驅(qū)動(dòng)程序到內(nèi)核中,或者用insmod命令加載模塊。(8)測(cè)試該設(shè)備,編寫應(yīng)用程序,對(duì)驅(qū)動(dòng)程序進(jìn)行測(cè)試。五、基本接口實(shí)驗(yàn)在完成了基本實(shí)驗(yàn)后,我們開(kāi)始著手基本接口實(shí)驗(yàn)。在這些實(shí)驗(yàn)中,我們學(xué)習(xí)如何編寫設(shè)備驅(qū)動(dòng)程序,及如何用測(cè)試程序檢驗(yàn)驅(qū)動(dòng)程序是否正確,并通過(guò)改寫測(cè)試程序正常地對(duì)驅(qū)動(dòng)程序進(jìn)行相關(guān)操作。 簡(jiǎn)單設(shè)備驅(qū)動(dòng)程序本次實(shí)驗(yàn)的任務(wù)是編寫一個(gè)字符型設(shè)備驅(qū)動(dòng)程序,并學(xué)習(xí)在應(yīng)用程序中調(diào)用驅(qū)動(dòng)??紤]到我們初次接觸驅(qū)動(dòng)程序的編寫,對(duì)此還十分陌生,因此指導(dǎo)書中提供了本次實(shí)驗(yàn)所要用到的程序源代碼。雖然這樣一個(gè)字符型設(shè)備驅(qū)動(dòng)程序并沒(méi)有任何實(shí)際作用,但是它讓我們輕松掌握了嵌入式驅(qū)動(dòng)的編寫過(guò)程,因?yàn)閺?fù)雜繁瑣的驅(qū)動(dòng),其骨架都是相同的。因此,看懂本實(shí)驗(yàn)的源代碼,學(xué)習(xí)并模仿其編寫方法,對(duì)于后續(xù)實(shí)驗(yàn)有著非常重要的意義。 CPU GPIO驅(qū)動(dòng)程序設(shè)計(jì)在本實(shí)驗(yàn)中,我們要編寫第一個(gè)針對(duì)實(shí)際硬件的驅(qū)動(dòng)程序。我們知道,凡是操作系統(tǒng)控制外部設(shè)備,即使是最簡(jiǎn)單的硬件電路,也是需要驅(qū)動(dòng)的。本實(shí)驗(yàn)涉及的外部硬件只有電阻和發(fā)光二極管。我們使用自己編寫的驅(qū)動(dòng)程序與應(yīng)用程序控制 GPIO96的電平,通過(guò) LED 的亮滅來(lái)判斷,是否 CPU 做出了正確的響應(yīng)。實(shí)驗(yàn)第一步是編寫 PXA270 GPIO 驅(qū)動(dòng)程序。驅(qū)動(dòng)的寫法參照實(shí)驗(yàn)十二,大體相同,主要區(qū)別如下://控制IO設(shè)備switch(cmd){ case LED_ON : {GPCR3 |= 0x1。break。} 為1 case LED_OFF: {GPSR3 |= 0x1。break。} 為1default :{//如果cmd=LED_OFF,那么GPSR3置//如果cmd=LED_ON,那么GPCR3置printk(“l(fā)cd control : no cmd run [kernel]n”)。return(EINVAL)。} //驅(qū)動(dòng)程序初始化GPDR3 |= 0x00000001。//設(shè)置GPIO96輸出模式:開(kāi)燈 GPSR3 |= 0x00000001。// 關(guān)燈對(duì)Makefile中的目標(biāo)體和依賴文件也要做相應(yīng)的修改,此處省略。在測(cè)試程序中有這樣一段代碼: while(1){ ioctl(fd, LED_OFF)。sleep(1)。// 休眠1秒ioctl(fd,LED_ON)。sleep(1)。}實(shí)驗(yàn)作業(yè)要求在目標(biāo)板上LED閃爍產(chǎn)生亮7秒,滅5秒的效果,很容易實(shí)現(xiàn),只需將上面的代碼改為如下代碼即可:while(1){ ioctl(fd, LED_OFF)。sleep(5)。sleep(7)。}// 滅5秒 // 亮7秒 ioctl(fd,LED_ON)。中斷實(shí)驗(yàn)在理論課中,我們學(xué)習(xí)了許多中斷方面的知識(shí),包括中斷向量、中斷優(yōu)先級(jí)、中斷過(guò)程等。在PXA270系統(tǒng)里,中斷控制器分外部設(shè)備和 PXA270X 處理器設(shè)備產(chǎn)生的兩個(gè)層次的中斷,前者是初級(jí)的中斷源,后者是次級(jí)中斷源,大量的次級(jí)中斷源通常被映射為一個(gè)初級(jí)中斷源。在此實(shí)驗(yàn)中,我們要編寫一個(gè)中斷程序,利用目標(biāo)板上的按鍵SW2來(lái)產(chǎn)生中斷,使得當(dāng)每次按下此按鍵時(shí),在超級(jí)終端上打印出響應(yīng)的信息。編寫中斷程序與前兩個(gè)實(shí)驗(yàn)的主要區(qū)別如下:/*初始化request_irq申請(qǐng)硬件中斷,參數(shù)包括申請(qǐng)的硬件中斷號(hào)、設(shè)備id、中斷處理的一些屬性(SA_INTERRUPT是快速處理程序,調(diào)用時(shí)屏蔽所有中斷)等*/ ret = request_irq(SIMPLE_INT_IRQ, amp。SIMPLE_INT_interrupt, SA_INTERRUPT, “int_ctl”, NULL)。//卸載,對(duì)應(yīng)request_irq釋放中斷free_irq(SIMPLE_INT_IRQ,NULL)。通過(guò)此實(shí)驗(yàn),我了解了硬件中斷管腳與中斷號(hào)的對(duì)應(yīng)關(guān)系,以及中斷號(hào)與中斷處理程序的對(duì)應(yīng)關(guān)系,對(duì)于今后編寫更為復(fù)雜的中斷程序打下基礎(chǔ)。數(shù)碼管顯示實(shí)驗(yàn)在此實(shí)驗(yàn)中,我們要編寫針對(duì) 74LV164 的驅(qū)動(dòng)程序,并用其串并轉(zhuǎn)換功能來(lái)控制八段LED數(shù)碼管的顯示。在編寫驅(qū)動(dòng)程序時(shí),主要有以下需要注意的: // 按位寫入void write_bit(int data){{ } else{GPCR2 |=(0x1 GPCR2 |=(0x1 }GPSR2 |=(0x1 void write_byte(int data){ { } } int i。write_bit(data 使用測(cè)試程序看到的測(cè)試結(jié)果是數(shù)碼管按09顯示輸出。實(shí)驗(yàn)作業(yè)要求在上述基礎(chǔ)上,分別實(shí)現(xiàn)一下兩個(gè)功能:① 要求您再編寫一個(gè)測(cè)試程序,實(shí)現(xiàn) PXA270EP 目標(biāo)板上的 LED 數(shù)碼管循環(huán)顯示的數(shù)字90。② 要求您再編寫一個(gè)測(cè)試程序,實(shí)現(xiàn) PXA270EP 目標(biāo)板上的 LED 數(shù)碼管循環(huán)顯示的數(shù)字02468。由于在測(cè)試程序中定義了數(shù)組buf[10]分別存儲(chǔ)了09是個(gè)數(shù),因此上述功能的實(shí)現(xiàn)方法是,分別對(duì)測(cè)試程序做如下修改:原測(cè)試程序:while(1){ { } } for(count=0。countdata[0] = buf[count]。ret=write(fd,data,1)。sleep(1)。實(shí)現(xiàn)功能①:while(1){ { } } for(count=9。count=0。count)// 倒序顯示數(shù)字data[0] = buf[count]。ret=write(fd,data,1)。sleep(1)。實(shí)現(xiàn)功能②:while(1){ { } } for(count=0。countdata[0] = buf[count]。ret=write(fd,data,1)。sleep(1)。通過(guò)更改顯數(shù)的順序,很容易實(shí)現(xiàn)實(shí)驗(yàn)作業(yè)里要求的功能。 LED點(diǎn)陣驅(qū)動(dòng)程序設(shè)計(jì)通過(guò)本實(shí)驗(yàn)的操作,我們將 8X8 的點(diǎn)陣 LED 驅(qū)動(dòng)起來(lái)并通過(guò)編寫測(cè)試程序,使其能夠按照您的意圖進(jìn)行顯示。要求您還編寫更多的測(cè)試程序① 要求您再編寫一個(gè)測(cè)試程序,實(shí)現(xiàn)按橫的方向隔行順序掃描 LED 點(diǎn)陣數(shù)碼管。② 要求您再編寫一個(gè)測(cè)試程序,實(shí)現(xiàn)按豎的方向順序掃描 LED 點(diǎn)陣數(shù)碼管。作業(yè)一,隔行掃描:for(i=1。ibuf[0]=c。buf[1]=~r。// row for(j=1。j} r = 1。c = c作業(yè)二,豎向掃描:for(i=1。ibuf[0]=c。buf[1]=~r。// row for(j=1。j} r = 1。c = c AD驅(qū)動(dòng)實(shí)驗(yàn)通過(guò)本實(shí)驗(yàn)的操作,我們將 AD 轉(zhuǎn)換器驅(qū)動(dòng)起來(lái)并通過(guò)編寫測(cè)試程序,使其能夠?qū)⒛M信 號(hào)量按照我們的要求轉(zhuǎn)換成數(shù)字信號(hào)量。為了更加清楚地理解 AD 轉(zhuǎn)換器的工作過(guò)程,請(qǐng)您再 編寫一個(gè)測(cè)試程序,將 UCB_ADC_INP_AD0 換成其他通道,來(lái)觀察其他 AD 通道情況。主要代碼:for(i=0。iusleep(100)。val2 = ioctl(fd,UCB_ADC_INP_AD2,0)。usleep(100)。 DA驅(qū)動(dòng)實(shí)驗(yàn)通過(guò)本實(shí)驗(yàn)的操作,我們使用示波器看到了通過(guò) DA 轉(zhuǎn)換而輸出的波形。在此基礎(chǔ)上,要求試寫一個(gè)實(shí)現(xiàn)輸出三角波的測(cè)試程序。主要代碼:while(flag_func_run == FUNC_RUN){ print_prompt()。// print select functions scanf(“%d”,amp。flag_select_func)。// user input select getchar()。// get ENTER switch(flag_select_func){ case DA_SIN : {da_create_sin(fd)。break。} case DA_FANG case FUNC_QUIT :{ flag_func_run = FUNC_NOT_RUN。printf(“Quit DA ”)。break。} case DA_TRI :{da_create_tri(fd)。break。} default : { printf(“input = %xn”,flag_select_func)。printf(“statys = %xn”,flag_func_run)。: {da_create_fang(fd)。break。} printf(“please input your select use 1 to 4n”)。} }六、實(shí)驗(yàn)中遇到的問(wèn)題及解決方法每一次上課重新啟動(dòng)后,當(dāng)需要將宿主PC機(jī)的根目錄掛在到PXA270EP目標(biāo)板的mnt目錄下(即在超級(jí)終端中輸入命令“mount –o soft,timeo=100,rsize=1024 :/ /mnt”)時(shí),常顯示無(wú)法掛載。解決方法:在超級(jí)終端下的掛載命令應(yīng)該用”mount –o nolock :/ /mnt”,如果依然不能掛載需要重啟NFS服務(wù),即在PC機(jī)終端中輸入命令”service nfs restart”兩遍后就可以掛載,當(dāng)然有時(shí)候也可能是因?yàn)榫W(wǎng)線沒(méi)插好。在每次重啟機(jī)器之后都需要將PC機(jī)終端的IP地址和開(kāi)發(fā)板中的系統(tǒng)的IP地址設(shè)定正確,不然也無(wú)法掛載。七、實(shí)驗(yàn)總結(jié)及心得本學(xué)期的所有實(shí)驗(yàn)均在宿主PC機(jī)與PXA270EP目標(biāo)板上進(jìn)行。通過(guò)這些為數(shù)不多課時(shí)的實(shí)驗(yàn),我逐步完成了建立實(shí)驗(yàn)軟件開(kāi)發(fā)平臺(tái),搭建實(shí)驗(yàn)編譯軟件環(huán)境,在PC上編輯、編譯一個(gè)應(yīng)用程序,并且在嵌入式系統(tǒng)上運(yùn)行和調(diào)試它的過(guò)程。在實(shí)驗(yàn)中,不難發(fā)現(xiàn),編譯驅(qū)動(dòng)程序大體框架都是一樣的,比如里面的讀函數(shù)、寫函數(shù)、ioctl函數(shù)、打開(kāi)、關(guān)閉以及函數(shù)模塊的初始化并且在超級(jí)終端上顯示出等。但所不同的是,要根據(jù)不同的實(shí)驗(yàn)要求修改名稱,并且對(duì)其中必要的部分進(jìn)行修改。除此之外,我認(rèn)為很多基礎(chǔ)知識(shí)對(duì)實(shí)驗(yàn)的進(jìn)行也起著非常大的作用,例如數(shù)碼管的顯示原理。在掌握了基礎(chǔ)知識(shí)之后,上機(jī)的過(guò)程會(huì)顯得相對(duì)簡(jiǎn)單,尤其是代碼框架已經(jīng)給出,我們所以需要做的就是根據(jù)需要稍作改動(dòng)來(lái)得到我們想要的結(jié)果。之后,我們又進(jìn)行了更加深入的應(yīng)用試驗(yàn),如人機(jī)接口方面的鍵盤驅(qū)動(dòng)實(shí)驗(yàn)、LCD控制實(shí)驗(yàn)和觸摸屏數(shù)據(jù)采集與控制實(shí)驗(yàn),應(yīng)用方面的多線程應(yīng)用實(shí)驗(yàn)等。由于涉及到嵌入式實(shí)驗(yàn)板的開(kāi)發(fā),我們?cè)谥皩?shí)驗(yàn)基礎(chǔ)上自己動(dòng)手編寫了程序,對(duì)算法和開(kāi)發(fā)環(huán)境有了更深入的掌握,在自我與互相學(xué)習(xí)中解決了許多問(wèn)題,受益匪淺。整個(gè)實(shí)驗(yàn)讓我了解了一套完整的嵌入式系統(tǒng)驅(qū)動(dòng)程序開(kāi)發(fā)的全過(guò)程,學(xué)到的內(nèi)容非常豐富,相信在學(xué)習(xí)了這些內(nèi)容后,在今后的學(xué)習(xí)工作中接觸到類似內(nèi)容,我不會(huì)感到無(wú)從下手,而是能夠有條不紊。感謝老師的辛勤指導(dǎo)!第三篇:北郵
點(diǎn)擊復(fù)制文檔內(nèi)容
合同協(xié)議相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1