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

正文內(nèi)容

北郵嵌入式實驗報告-文庫吧資料

2024-10-19 18:16本頁面
  

【正文】 。if(ret)}補充代碼9 static void __exit cleanup_AD_ctl(void){} DA驅(qū)動實驗通過本實驗的操作,我們使用示波器看到了通過DA轉(zhuǎn)換而輸出的波形。printk(“initn”)。read: ioctl: adctl_read, adctl_ioctl, write: adctl_write, open: adctl_open, release:adctl_release,ADCTL_MAJOR, 0, S_IFCHR, amp。printk(“fail %dn”,ret)。ad_ucb=ucb1x00_get()。adctl_ops)。ifdef OURS_HELLO_DEBUG int ret =ENODEV。補充代碼7 //INITstaticint __initHW_AD_CTL_init(void){return ret。endif return count。return count。endif return 0。endif} 補充代碼4 //OPENssize_tadctl_open(structinode * inode ,struct file * file){ifdef OURS_HELLO_DEBUG printk(“openn”)。} struct ucb1x00 *ad_ucb。為了更加清楚地理解 AD 轉(zhuǎn)換器的工作過程,請您再編寫一個測試程序,將 UCB_ADC_INP_AD0 換成其他通道,來觀察其他 AD 通道情況。// sleep second r=rbuf[1]=~r。printf(“buf[0],buf[1]: [%x,%x]n”,buf[0],buf[1])。j} r = 1。buf[1]=~r。// column結(jié)果顯示作業(yè)二,豎向掃描:for(i=1。usleep(200000)。c = cwrite(fd,buf,2)。// row for(j=1。ibuf[0]=c。devfs_unregister_chrdev(SIMPLE_LED_MAJOR, “l(fā)ed_ary_ctl”)。作業(yè)一,隔行掃描:printk(“cleanup_LED_ctl [kernel]n”)。} 補充代碼6 static void __exit cleanup_LED_ctl(void){ifdef OURS_LED_DEBUGendif} ①要求您再編寫一個測試程序,實現(xiàn)按橫的方向隔行順序掃描 LED 點陣數(shù)碼管。printk(“SIMPLE_LED_ioctl [kernel]n”)。if(ret)return ret。printk(“pxa270_LED_CTL_init [kernel]n”)。} 補充代碼3 //IOCTLssize_tSIMPLE_LED_ioctl(structinode * inode ,struct file * file, unsigned intcmd, long data){endif} 補充代碼4 //structfile_operationsLED_ctl_ops ={ open: SIMPLE_LED_open, read:SIMPLE_LED_read, write: SIMPLE_LED_write, ioctl: SIMPLE_LED_ioctl, release:SIMPLE_LED_release, }。} 補充代碼2 //READssize_tSIMPLE_LED_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){ ifdef OURS_LED_DEBUGendif return count。printk(“t %s tn”, VERSION)。 LED點陣驅(qū)動程序設(shè)計通過本實驗的操作,我們將 8X8 的點陣 LED 驅(qū)動起來并通過編寫測試程序,使其能夠按照您的意圖進(jìn)行顯示。sleep(1)。count// 更改顯數(shù)順序{ data[0] = buf[count]。printk(“cleanup_SERIAL_LED [kernel]n”)。sleep(1)。count)} } 結(jié)果顯示// 倒序顯示數(shù)字{ data[0] = buf[count]。由于在測試程序中定義了數(shù)組buf[10]分別存儲了09是個數(shù),因此上述功能的實現(xiàn)方法是,分別對測試程序做如下修改:原測試程序: while(1){ for(count=0。實驗作業(yè)要求在上述基礎(chǔ)上,分別實現(xiàn)一下兩個功能:①要求您再編寫一個測試程序,實現(xiàn) PXA270EP 目標(biāo)板上的 LED 數(shù)碼管循環(huán)顯示的數(shù)字90。module_exit(cleanup_SERIAL_LED)。MODULE_LICENSE(“GPL”)。} 補充代碼10 static void __exit cleanup_SERIAL_LED(void){ ifdef OURS_HELLO_DEBUG ifdef OURS_HELLO_DEBUGendif }補充代碼11 MODULE_DESCRIPTION(“serial_led driver module”)。if(ret)return ret。printk(“pxa270_SERIAL_LED_init [kernel]n”)。return ret。printk(“ pxa270 serial_led_driver register success!![kernel]n”)。showversion()。ret =devfs_register_chrdev(SERIAL_LED_MAJOR, amp。} 補充代碼7 //structfile_operationsSERIAL_LED_ops ={ open: SERIAL_LED_open,read: SERIAL_LED_read,write:SERIAL_LED_write,ioctl:SERIAL_LED_ioctl,release:SERIAL_LED_release, }。endif MOD_DEC_USE_COUNT。printk(“SERIAL_LED_write [kernel]n”)。return count。return 0。} MOD_INC_USE_COUNT。printk(“SERIAL_LED_read [kernel]n”)。printk(“*********************************************nn”)。補充代碼1 voidshowversion(void){ printk(“*********************************************n”)。通過此實驗,我了解了硬件中斷管腳與中斷號的對應(yīng)關(guān)系,以及中斷號與中斷處理程序的對應(yīng)關(guān)系,對于今后編寫更為復(fù)雜的中斷程序打下基礎(chǔ)。printk(“SIMPL_INT_write [kernel]n”)。printk(“SIMPLE_INT_read [kernel]n”)。} static intSimpleINT_temp_count = 0。printk(“t %s tn”, VERSION)。在PXA270系統(tǒng)里,中斷控制器分外部設(shè)備和 PXA270X 處理器設(shè)備產(chǎn)生的兩個層次的中斷,前者是初級的中斷源,后者是次級中斷源,大量的次級中斷源通常被映射為一個初級中斷源。}// 休眠1秒ioctl(fd,LED_ON)。sleep(7)。while(1){ ioctl(fd,LED_OFF)。sleep(1)。}補充代碼(3)//structfile_operationsGPIO_LED_ctl_ops ={ open:SIMPLE_GPIO_LED_open, read:SIMPLE_GPIO_LED_read, write:SIMPLE_GPIO_LED_write, ioctl:SIMPLE_GPIO_LED_ioctl, release:SIMPLE_GPIO_LED_release, }。endifMOD_INC_USE_COUNT。endifreturn count。我們使用自己編寫的驅(qū)動程序與應(yīng)用程序控制 GPIO96的電平,通過 LED 的亮滅來判斷,是否 CPU 做出了正確的響應(yīng)。我們知道,凡是操作系統(tǒng)控制外部設(shè)備,即使是最簡單的硬件電路,也是需要驅(qū)動的。因此,看懂本實驗的源代碼,學(xué)習(xí)并模仿其編寫方法,對于后續(xù)實驗有著非常重要的意義??紤]到我們初次接觸驅(qū)動程序的編寫,對此還十分陌生,因此指導(dǎo)書中提供了本次實驗所要用到的程序源代碼。在這些實驗中,我們學(xué)習(xí)如何編寫設(shè)備驅(qū)動程序,及如何用測試程序檢驗驅(qū)動程序是否正確,并通過改寫測試程序正常地對驅(qū)動程序進(jìn)行相關(guān)操作。(8)測試該設(shè)備,編寫應(yīng)用程序,對驅(qū)動程序進(jìn)行測試。(6)實現(xiàn)中斷服務(wù),并用request_irq向內(nèi)核注冊,中斷并不是每個設(shè)備驅(qū)動所必需的。(4)設(shè)計所要實現(xiàn)的文件操作,定義file_operations結(jié)構(gòu)。(3)實現(xiàn)初始化函數(shù)。主設(shè)備號惟一標(biāo)識了設(shè)備類型,即設(shè)備驅(qū)動程序類型,它是塊設(shè)備表或字符設(shè)備表中設(shè)備表項的索引。(2)定義設(shè)備號。(1)查看原理圖,理解設(shè)備的工作原理??梢栽谟布a(chǎn)廠家或者Internet上尋找驅(qū)動程序,也可以根據(jù)相近的硬件驅(qū)動程序來改寫,這樣可以加快開發(fā)速度。除非系統(tǒng)不使用操作系統(tǒng),程序直接操縱硬件。由于嵌入式設(shè)備由于硬件種類非常豐富,在默認(rèn)的內(nèi)核發(fā)布版中不一定包括所有驅(qū)動程序。其中__init是必不可少的,在系統(tǒng)啟動時會由內(nèi)核調(diào)用chr_driver_init,完成驅(qū)動程序的初始化。這些資源不用時,應(yīng)該釋放,以利于資源的共享。(5)其他初始化工作。(4)注冊中斷。(3)在內(nèi)核注冊設(shè)備。一般說來,每個設(shè)備都要定義一個設(shè)備變量,用以保存設(shè)備相關(guān)的參數(shù)。比如,設(shè)置中斷掩碼,設(shè)置串口的工作方式、并口的數(shù)據(jù)方向等。(1)對驅(qū)動程序管理的硬件進(jìn)行必要的初始化。unregister_chrdev()的定義為:intunregister_chrdev(unsigned int major, const char *name)。當(dāng)設(shè)備驅(qū)動模塊從Linux內(nèi)核中卸載,對應(yīng)的主設(shè)備號必須被釋放。注冊以后,Linux將設(shè)備名與主、次設(shè)備號聯(lián)系起來。如果register_chrdev()操作成功,設(shè)備名就會出現(xiàn)在/proc/dvices文件中。此函數(shù)返回0時表示成功;返回EINVAL,表示申請的主設(shè)備號非法,主要原因是主設(shè)備號大于系統(tǒng)所允許的最大設(shè)備號;返回EBUSY,表示所申請的主設(shè)備號正在被其他設(shè)備程序使用。其中,major是為設(shè)備驅(qū)動程序向系統(tǒng)申請的主設(shè)備號,如果為0,則系統(tǒng)為此驅(qū)動程序動態(tài)分配一個主設(shè)備號。設(shè)備的驅(qū)動程序在加載的時候首先需要調(diào)用入口函數(shù)init_module(),該函數(shù)最重要的一個工作就是向內(nèi)核注冊該設(shè)備,對于字符設(shè)備調(diào)用register_chrdev()完成注冊。檢查設(shè)備,看數(shù)據(jù)是否可讀或設(shè)備是否可用于寫數(shù)據(jù)。執(zhí)行讀、寫之外的操作。對字符設(shè)備文件進(jìn)行寫操作將調(diào)用write子程序。往設(shè)備上寫數(shù)據(jù)。對字符設(shè)備文件進(jìn)行讀操作將調(diào)用read子程序。從設(shè)備上讀數(shù)據(jù)。獨占設(shè)備必須標(biāo)記設(shè)備方可再次使用。關(guān)閉一個設(shè)備。如果設(shè)備是獨占的,即同一時刻只能有一個程序訪問此設(shè)備,則open子程序必須設(shè)置一些標(biāo)志以表示設(shè)備處于忙狀態(tài)。對字符設(shè)備文件進(jìn)行打開操作,都會調(diào)用設(shè)備的open入口點。字符型設(shè)備驅(qū)動程序提供如下幾個入口點:?open入口點。應(yīng)用程序發(fā)出系統(tǒng)調(diào)用命令后,會從用戶態(tài)轉(zhuǎn)到核心態(tài),通過內(nèi)核將open()這樣的系統(tǒng)調(diào)用轉(zhuǎn)換成對物理設(shè)備的操作。其中類型和主設(shè)備號結(jié)合在一起惟一地確定了設(shè)備文件驅(qū)動程序及其界面,而次設(shè)備號則說明目標(biāo)設(shè)備是同類設(shè)備中的第幾個。?打開了代表著目標(biāo)設(shè)備的文件,即建立起與設(shè)備的連接后,可以通過read()、write()、ioctl()等常規(guī)的文件操作對目標(biāo)設(shè)備進(jìn)行操作。這意味著:?由于每一個設(shè)備至少由文件系統(tǒng)的一個文件代表,因而都有一個“文件名”。Linux操作系統(tǒng)將所有的設(shè)備全部看成文件,并通過文件的操作界面進(jìn)行操作。9)重新打開第 7 步最小化的開有mini的終端窗口,即到 PXA270RP 目標(biāo)板的mnt目錄下,請您輸入下列 3 條命令,運行HelloWorld編譯成功的HelloWorld目標(biāo)程序:① cd home/HW/*回到mini中目標(biāo)板的/mnt/home/HW目錄下*/ ②ls ③./ HelloWorld/*此時會看到如下圖*/四、驅(qū)動程序設(shè)備驅(qū)動程序?qū)嶋H是處理和操作硬件控制器的軟件,從本質(zhì)上講,是內(nèi)核中具有最高特權(quán)級的、駐留內(nèi)存的、可共享的底層硬件處理例程。如果此步出現(xiàn)錯誤信息,請查看錯誤信息,并且重新編輯原來的 C文件,修改錯誤。當(dāng)輸入程序完畢后,單擊鍵盤 Esc 鍵,然后按“:”(冒號)此時左下角會出現(xiàn)冒號然后輸入“wq”最后按“Enter”確認(rèn)存盤退出 vi 編輯器,如下圖。在 vi 里面先單擊鍵盤 A 鍵,然后左下角會變成—INSER。7)宿主機上打開一個終端窗口(Terminal),點擊【紅帽/System Tools/Terminal】啟動終端窗口,輸入下列 4 條命令: ① c
點擊復(fù)制文檔內(nèi)容
合同協(xié)議相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1