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

正文內(nèi)容

鄺堅(jiān)_北郵嵌入式實(shí)驗(yàn)報(bào)告(存儲(chǔ)版)

2024-10-31 23:39上一頁面

下一頁面
  

【正文】 ,并且配置好ARM Linux的開發(fā)環(huán)境三、基礎(chǔ)實(shí)驗(yàn)(實(shí)驗(yàn)一~實(shí)驗(yàn)七)實(shí)驗(yàn)一到六為基礎(chǔ)實(shí)驗(yàn),主要是為了在熟悉實(shí)驗(yàn)操作平臺(tái)的同時(shí)為后續(xù)實(shí)驗(yàn)搭建好軟、硬件環(huán)境,配置好相關(guān)的協(xié)議、服務(wù)。除此之外,我認(rèn)為很多基礎(chǔ)知識(shí)對實(shí)驗(yàn)的進(jìn)行也起著非常大的作用,例如數(shù)碼管的顯示原理。七、實(shí)驗(yàn)總結(jié)及心得本學(xué)期的所有實(shí)驗(yàn)均在宿主PC機(jī)與PXA270EP目標(biāo)板上進(jìn)行。MODULE_AUTHOR(“l(fā)iduo”)。printk(“ pxa270: init_module failed with %dn [kernel]”, ret)。MOD_INC_USE_COUNT。補(bǔ)充代碼3 //READssize_tSIMPLE_DA_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){ ifdef OURS_DA_DEBUG} 補(bǔ)充代碼4 //WRITEssize_tSIMPLE_DA_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops){printk(“SIMPLE_DA_write[kernel]n”)。ifdef OURS_HELLO_DEBUG printk(“cleanupn”)。return 0。}補(bǔ)充代碼8 staticint __init pxa270_AD_CTL_init(void){ int ret =ENODEV。endif}補(bǔ)充代碼5 //RELEASE/CLOSEssize_tadctl_release(structinode *inode ,struct file * file){ifdef OURS_HELLO_DEBUG printk(“releasen”)。usleep(200000)。// sleep second r=rbuf[1]=~r。for(i=1。ifdef OURS_LED_DEBUG return 0。printk(“*********************************************nn”)。實(shí)現(xiàn)功能②: while(1){ for(count=0。②要求您再編寫一個(gè)測試程序,實(shí)現(xiàn) PXA270EP 目標(biāo)板上的 LED 數(shù)碼管循環(huán)顯示的數(shù)字02468。return 0。if(ret 0)“serial_led_ctl”,} {} else { } return ret。補(bǔ)充代碼6 //RELEASE/CLOSEssize_tSERIAL_LED_release(structinode *inode ,struct file * file){ ifdef OURS_HELLO_DEBUGprintk(“SERIAL_LED_release [kernel]n”)。endif { ifdef OURS_HELLO_DEBUG} 補(bǔ)充代碼4 //IOCTLssize_tSERIAL_LED_ioctl(structinode * inode ,struct file * file, unsigned intcmd, long data){ ifdef OURS_HELLO_DEBUGendif} 補(bǔ)充代碼5 //OPENssize_tSERIAL_LED_open(structinode * inode ,struct file * file){ ifdef OURS_HELLO_DEBUGendifreturn 0。write:SIMPLE_INT_write, ioctl:SIMPLE_INT_ioctl, release:SIMPLE_INT_release, }。補(bǔ)充代碼1 voidshowversion(void){ printk(“*********************************************n”)。sleep(1)。補(bǔ)充代碼(1)//WRITEssize_tSIMPLE_GPIO_LED_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops){ ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_write [kernel]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)程序中實(shí)現(xiàn)驅(qū)動(dòng)的注冊和卸載。實(shí)現(xiàn)一個(gè)嵌入式Linux設(shè)備驅(qū)動(dòng)的大致流程如下。若驅(qū)動(dòng)程序是內(nèi)核的一部分,初始化函數(shù)則要按如下方式聲明: int __initchr_driver_init(void)。在這一步驟里對設(shè)備變量中的項(xiàng)進(jìn)行初始化。字符設(shè)備在cleanup_ module()函數(shù)中調(diào)用unregister_chrdev()來完成設(shè)備的注銷。name是設(shè)備名,fops是對各個(gè)調(diào)用的入口點(diǎn)說明。?ioctl入口點(diǎn)。?read入口點(diǎn)。打開設(shè)備準(zhǔn)備I/O操作。?應(yīng)用程序通常可以通過系統(tǒng)調(diào)用open()打開設(shè)備文件,建立起與目標(biāo)設(shè)備的連接。8)在上面同一個(gè)終端窗口中,輸入下列 2 , 目標(biāo)文件,如圖 710,圖711: ①armlinuxgcc– ②ls 等到再次出現(xiàn)提示符,代表程序已經(jīng)正確編譯。進(jìn)入RedHat 圖形界面后,打開一個(gè)終端窗(Terminal)。實(shí)驗(yàn)六為宿主PC機(jī)配置了NFS服務(wù)。學(xué)習(xí)LINUX開發(fā)環(huán)境的搭建,通訊配置等。define MAX_MSG_LEN sizeof(MESSAGE*)MESSAGE* rxMsg。/*長度大于16小于256時(shí),分配長度為256的內(nèi)存空間*/ exhausted n”)。/*改變下poolHeadPtravailable。/* 求下一首個(gè)可用塊地(sizeof(blockHead)+16))。i} return(pool*)mem。poolHeadPtravailable = 16。/*初始化可用塊數(shù)32*/ poolHeadPtrblockSize = 16。poolHead* poolHeadPtr。FOREVER { } /*client(id)向服務(wù)器任務(wù)發(fā)請求消息*/ STATUS client(int id){ ……semTake(semSynStart,WAIT_FOREVER)。for(id = 0。} /* manager()管理進(jìn)程,實(shí)現(xiàn)task同步*/ STATUS manager(){ int id。return(ERROR)。semFree = semBCreate(SEM_Q_PRIORITY,SEM_FULL)。id++){ tidClient[id] = 0。/* 用來區(qū)分不同的定時(shí)器或者客戶任務(wù) */ mallocPtr=amp。txMsgmSendId = MID_TIMER(id)。/* 消息中傳遞的數(shù)據(jù) */ }MESSAGE。環(huán)境:VxWorks 的VxSim 仿真環(huán)境或2440(ARM920T)內(nèi)容: 必選功能: 統(tǒng)一框架,包含統(tǒng)一消息格式定義及使用規(guī)范; ; 啟動(dòng)同步功能;,最大限度降低外部碎片對系統(tǒng)可靠性的威脅。/*創(chuàng)建一個(gè)定時(shí),用于提醒發(fā)送者任務(wù)定時(shí)發(fā)送消息*/ tick=sysClkRateGet()。printf(“tTimer%d send message to tClient%d!n”,id,id)。return(OK)。id++){} /* 創(chuàng)建消息隊(duì)列 */ msgQIdServer = msgQCreate(MAX_MSGS, MAX_MSG_LEN, MSG_Q_FIFO|MSG_Q_EVENTSEND_ERR_NOTIFY)。id NUM_CLIENT。} for(id = 0。id NUM_TIMER。sprintf(tempName, “tTimer%d”, id)。靜態(tài)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)為單鏈表,采用頭插法,申請內(nèi)存時(shí),修改firstavailable另其指向第二塊,將firstavailable指向的頭塊取出,回收內(nèi)存時(shí),將回收的塊的frontBlock指向第一塊,修改firstavailable另其指向回收的塊,將回收的塊作為第一塊,數(shù)據(jù)結(jié)構(gòu)如下所示: …… ……} return(OK)。/*分配6000B內(nèi)存作為內(nèi)存池*//*初始化pool*/ poolPtr =(pool*)mem。/*初始化第一塊可用塊的地址*/ poolHeadPtrnext=(poolHead*)((char*)poolHeadPtr + sizeof(poolHeadPtr)/*+ 32*(sizeof(blockHead)+16))。poolHeadPtrfirstavailable = blockHeadPtr。poolHeadPtrfirstavailable = blockHeadPtr。blockHead* blockHeadPtr。/*分配內(nèi)存時(shí)加入塊頭開銷*/ } else if((Size next)available!= 0)){} else{ printf(“n[Warning] : Too large for blocks or the blocks are /*其他情況用系統(tǒng)的內(nèi)存分配函數(shù)malloc分配*/ blockHeadPtr =(poolHeadPtrnext)firstavailable。blockHead* blockHeadPtr。rxMsg,MAX_MSG_LEN,WAIT_FOREVER);msgQSend(msgQIdClient[mSendId],(char*)amp。二、實(shí)驗(yàn)設(shè)備,并且配置好ARM Linux的開發(fā)環(huán)境三、基礎(chǔ)實(shí)驗(yàn)(實(shí)驗(yàn)一~實(shí)驗(yàn)七)實(shí)驗(yàn)一~七為基礎(chǔ)實(shí)驗(yàn),目的是為后續(xù)實(shí)驗(yàn)搭建好軟、硬件環(huán)境,配置好相關(guān)的協(xié)議、服務(wù),并通過編寫最簡單的HelloWorld程序進(jìn)行測試。每次重啟宿主PC機(jī)時(shí),都須先輸入命令:service nfs restart,以啟動(dòng)nfs服務(wù)。7)宿主機(jī)上打開一個(gè)終端窗口(Terminal),點(diǎn)擊【紅帽/System Tools/Terminal】啟動(dòng)終端窗口,輸入下列 4 條命令: ① cd /home②mkdir HW③ cd HW④ vi/*請您輸入程序 程序清單*/此時(shí)會(huì)顯示一個(gè)空白的屏幕,這條命令的含義是,使用 Vi 編輯器,我們看到的空白窗口是對文件進(jìn)行編輯的窗口,如下圖。9)重新打開第 7 步最小化的開有mini的終端窗口,即到 PXA270RP 目標(biāo)板的mnt目錄下,請您輸入下列 3 條命令,運(yùn)行HelloWorld編譯成功的HelloWorld目標(biāo)程序:① cd home/HW/*回到mini中目標(biāo)板的/mnt/home/HW目錄下*/ ②ls ③./ HelloWorld/*此時(shí)會(huì)看到如下圖*/四、驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序?qū)嶋H是處理和操作硬件控制器的軟件,從本質(zhì)上講,是內(nèi)核中具有最高特權(quán)級(jí)的、駐留內(nèi)存的、可共享的底層硬件處理例程。其中類型和主設(shè)備號(hào)結(jié)合在一起惟一地確定了設(shè)備文件驅(qū)動(dòng)程序及其界面,而次設(shè)備號(hào)則說明目標(biāo)設(shè)備是同類設(shè)備中的第幾個(gè)。如果設(shè)備是獨(dú)占的,即同一時(shí)刻只能有一個(gè)程序訪問此設(shè)備,則open子程序必須設(shè)置一些標(biāo)志以表示設(shè)備處于忙狀態(tài)。對字符設(shè)備文件進(jìn)行讀操作將調(diào)用read子程序。檢查設(shè)備,看數(shù)據(jù)是否可讀或設(shè)備是否可用于寫數(shù)據(jù)。如果register_chrdev()操作成功,設(shè)備名就會(huì)出現(xiàn)在/proc/dvices文件中。(1)對驅(qū)動(dòng)程序管理的硬件進(jìn)行必要的初始化。(4)注冊中斷。由于嵌入式設(shè)備由于硬件種類非常豐富,在默認(rèn)的內(nèi)核發(fā)布版中不一定包括所有驅(qū)動(dòng)程序。(2)定義設(shè)備號(hào)。(6)實(shí)現(xiàn)中斷服務(wù),并用request_irq向內(nèi)核注冊,中斷并不是每個(gè)設(shè)備驅(qū)動(dòng)所必需的。因此,看懂本實(shí)驗(yàn)的源代碼,學(xué)習(xí)并模仿其編寫方法,對于后續(xù)實(shí)驗(yàn)有著非常重要的意義。endifMOD_INC_USE_COUNT。sleep(7)。} static intSimpleINT_temp_count = 0。補(bǔ)充代碼1 voidshowversion(void){ printk(“*********************************************n”)。return 0。} 補(bǔ)充代碼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, }。return ret。MODULE_LICENSE(“GPL”)。count)} } 結(jié)果顯示// 倒序顯示數(shù)字{ data[0] = buf[count]。sleep(1)。} 補(bǔ)充代碼3 //IOCTLssize_tSIMPLE_LED_ioctl
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1