《嵌入式系統(tǒng)開發(fā)》實(shí)驗(yàn)課教學(xué)指導(dǎo)書_第1頁(yè)
《嵌入式系統(tǒng)開發(fā)》實(shí)驗(yàn)課教學(xué)指導(dǎo)書_第2頁(yè)
《嵌入式系統(tǒng)開發(fā)》實(shí)驗(yàn)課教學(xué)指導(dǎo)書_第3頁(yè)
《嵌入式系統(tǒng)開發(fā)》實(shí)驗(yàn)課教學(xué)指導(dǎo)書_第4頁(yè)
《嵌入式系統(tǒng)開發(fā)》實(shí)驗(yàn)課教學(xué)指導(dǎo)書_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《嵌入式系統(tǒng)開發(fā)》實(shí)驗(yàn)課教學(xué)指導(dǎo)書前言《嵌入式系統(tǒng)開發(fā)》是本專業(yè)的專業(yè)素質(zhì)拓展課程,是實(shí)踐性較強(qiáng)的一門課程。通過(guò)本課程的教學(xué),掌握ARM體系結(jié)構(gòu),了解ARM匯編,能夠熟練使用ARM開發(fā)工具,設(shè)計(jì)ARM啟動(dòng)代碼。掌握操作系統(tǒng)基本原理,完成操作系統(tǒng)的移植,達(dá)到熟練掌握C語(yǔ)言的目的;掌握Linux原理的開發(fā)工具GCC與GDB的使用,通過(guò)在Linux下編程的實(shí)踐,達(dá)到熟練掌握Linux下C編程的目的;掌握Linux下設(shè)備驅(qū)動(dòng)設(shè)計(jì)方法,通過(guò)在Linux編寫驅(qū)動(dòng)程序的實(shí)踐,達(dá)到熟練掌握Linux下驅(qū)動(dòng)編程的目的;掌握嵌入式工程師職業(yè)素養(yǎng)和軟硬件設(shè)計(jì)規(guī)范,了解嵌入式產(chǎn)品開發(fā)流程,為后續(xù)項(xiàng)目實(shí)踐奠定基礎(chǔ)。為了高效地利用有限的機(jī)時(shí),提高上機(jī)效率,保證實(shí)驗(yàn)效果,根據(jù)以往教學(xué)經(jīng)驗(yàn),特自己編寫這門課的實(shí)驗(yàn)指導(dǎo)書。本實(shí)驗(yàn)手冊(cè)是我校嵌入式系統(tǒng)開發(fā)課程上機(jī)實(shí)驗(yàn)指導(dǎo)的主要依據(jù)。根據(jù)實(shí)驗(yàn)大綱要求,共包含7個(gè)實(shí)驗(yàn)。

目錄實(shí)驗(yàn)一嵌入式系統(tǒng)實(shí)驗(yàn)平臺(tái)簡(jiǎn)介 1實(shí)驗(yàn)?zāi)康?1實(shí)驗(yàn)內(nèi)容 1預(yù)備知識(shí) 1實(shí)驗(yàn)設(shè)備及工具(包括軟件調(diào)試工具) 1實(shí)驗(yàn)內(nèi)容介紹 1實(shí)驗(yàn)二Linux的安裝和基本操作實(shí)驗(yàn) 8實(shí)驗(yàn)?zāi)康?8實(shí)驗(yàn)內(nèi)容 8實(shí)驗(yàn)三交叉編譯環(huán)境的建立和bootloader的使用 11實(shí)驗(yàn)?zāi)康?11實(shí)驗(yàn)內(nèi)容 11開發(fā)工具軟件的安裝與配置 12實(shí)驗(yàn)四多線程應(yīng)用程序設(shè)計(jì) 23實(shí)驗(yàn)?zāi)康模?23實(shí)驗(yàn)內(nèi)容: 23預(yù)備知識(shí): 23實(shí)驗(yàn)設(shè)備及工具 23實(shí)驗(yàn)原理及代碼分析 23實(shí)驗(yàn)步驟 33思考題 35實(shí)驗(yàn)五A/D接口實(shí)驗(yàn) 36實(shí)驗(yàn)?zāi)康?36實(shí)驗(yàn)內(nèi)容 36實(shí)驗(yàn)設(shè)備及工具 36實(shí)驗(yàn)原理 36程序分析 41實(shí)驗(yàn)步驟 44思考題 45實(shí)驗(yàn)六在2410-S上的移植 46實(shí)驗(yàn)?zāi)康?46實(shí)驗(yàn)內(nèi)容 46預(yù)備知識(shí) 46實(shí)驗(yàn)設(shè)備及工具 46實(shí)驗(yàn)原理 46思考題 49實(shí)驗(yàn)七無(wú)線通訊實(shí)驗(yàn) 50實(shí)驗(yàn)?zāi)康?50實(shí)驗(yàn)內(nèi)容 50預(yù)備知識(shí) 50實(shí)驗(yàn)設(shè)備及工具 50實(shí)驗(yàn)原理 50實(shí)驗(yàn)步驟 54思考題 55附錄一實(shí)驗(yàn)要求 56附錄二實(shí)驗(yàn)成績(jī)的考核與評(píng)定辦法 57附錄三實(shí)驗(yàn)項(xiàng)目設(shè)置與內(nèi)容 58實(shí)驗(yàn)一嵌入式系統(tǒng)實(shí)驗(yàn)平臺(tái)簡(jiǎn)介實(shí)驗(yàn)?zāi)康?.熟悉嵌入式系統(tǒng)實(shí)驗(yàn)平臺(tái)組成。2.了解嵌入式系統(tǒng)實(shí)驗(yàn)平臺(tái)安裝、使用方法。實(shí)驗(yàn)內(nèi)容用給定的嵌入式系統(tǒng)實(shí)驗(yàn)平臺(tái),演示常用功能。預(yù)備知識(shí)C語(yǔ)言的基礎(chǔ)知識(shí)、linux開發(fā)基礎(chǔ)知識(shí)。實(shí)驗(yàn)設(shè)備及工具(包括軟件調(diào)試工具)硬件:ARM9嵌入式開發(fā)板、JTAG仿真器、PC機(jī)Pentiumn4,512MB以上內(nèi)存。軟件:PC機(jī)操作系統(tǒng)winxp、linux集成開發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序、實(shí)驗(yàn)內(nèi)容介紹Linux價(jià)格低廉、功能強(qiáng)大,可以運(yùn)行在X86,Alpha,Sparc,MIPS,MOTOROLA,PPC,NEC,ARM等硬件平臺(tái)上,而且開放源代碼,可以定制。我們所介紹的硬件平臺(tái)是基于ARM體系結(jié)構(gòu),由北京博創(chuàng)興業(yè)科技開發(fā)的UP-NetARM3000和UP-NetARM2410-S實(shí)驗(yàn)儀器。UP-NetARM3000的CPU為ARM7TDMI內(nèi)核的三星S3C44B0X01芯片,由于沒(méi)有MMU(內(nèi)存管理單元)只能運(yùn)行uClinux,UP-NetARM2410-S的CPU為ARM920T內(nèi)核的三星S3c2410芯片,由于有MMU可以運(yùn)行標(biāo)準(zhǔn)的ARM-LINUX內(nèi)核。通過(guò)這兩個(gè)平臺(tái),我們可以學(xué)習(xí)嵌入式LINUX中的針對(duì)有MMU和無(wú)MMU的不同開發(fā)過(guò)程。UP-NetARM3000及相關(guān)產(chǎn)品的資料可以訪問(wèn)博創(chuàng)公司的網(wǎng)站up-tech獲得。本書以UP-NetARM2410-S為例,詳細(xì)介紹嵌入式Linux的開發(fā)過(guò)程。UP-NetARM2410-S實(shí)驗(yàn)儀器介紹硬件配置UP-NetARM2410-S的硬件配置如表1所示,實(shí)物如圖1-1所示:配置名稱型號(hào)說(shuō)明CPUARM920T結(jié)構(gòu)芯片三星S3c2410X工作頻率203MHzFLASHSAMSUNGK9F120864MNANDSDRAMHY57V561620AT-H32M×2=64MEtherNet網(wǎng)卡AX88796兩片,10/100M自適應(yīng)LCDLQ080V3DG018寸16bitTFT觸摸屏SX-080-W4R-FBFM7843驅(qū)動(dòng)LEDZLG7290四個(gè)共陰極LEDUSB接口4個(gè)HOST/1個(gè)DEVICE由AT43301構(gòu)成USBHUBUART/IrDA2個(gè)RS232,1個(gè)RS485,1個(gè)IrDA從處理器的UART2引出AD由S3C2410芯片引出3個(gè)電位器控制輸入AUDIOIIS總線,UDA1341芯片44.1KHz音頻擴(kuò)展卡插槽168PinEXPORT總線直接擴(kuò)展GPS_GPRS擴(kuò)展板SIMCOM的SIM100-E模塊支持雙道語(yǔ)音通信IDE/CF卡插座筆記本硬盤,CF卡PCMCIA和SD卡插座PCMCIA型號(hào)為DWL-650PS2PC鍵盤和鼠標(biāo)由ATMEGA8單片機(jī)控制IC卡座AT24CXX系列由ATMEGA8單片機(jī)控制DC/STEP電機(jī)DC由PWM控制,STEP由74HC573控制CANBUS由MCP2510和TJA1050構(gòu)成DoubleDAMAX504兩個(gè)10位DAC端口調(diào)試接口JTAG14針、20針表1-1UP-NetARM2410-S的硬件配置圖1-1UP-NetARM2410-SS3c2410芯片介紹S3c2410X芯片集成了大量的功能單元,包括:1.內(nèi)部,存儲(chǔ)器,外部,16KB數(shù)據(jù)CACH,16KB指令CACH,MMU;2.內(nèi)置外部存儲(chǔ)器控制器(SDRAM控制和芯片選擇邏輯);3.LCD控制器(最高4K色STN和256K彩色TFT),一個(gè)LCD專用DMA;4.4路帶外部請(qǐng)求線的DMA;5.三個(gè)通用異步串行端口(IrDA1.0,16-ByteTxFIFO,and16-ByteRxFIFO),2通道SPI;6.一個(gè)多主IIC總線,一個(gè)IIS總線控制器;7.SD主接口版本1.0和多媒體卡協(xié)議版本2.11兼容;8.2個(gè)USBHOST,一個(gè)USBDEVICE();9.4個(gè)PWM定時(shí)器和一個(gè)內(nèi)部定時(shí)器;10.看門狗定時(shí)器;11.117個(gè)通用IO;12.24個(gè)外部中斷;13.電源控制模式:標(biāo)準(zhǔn)、慢速、休眠、掉電;14.8通道10位ADC和觸摸屏接口;15.帶日歷功能的實(shí)時(shí)時(shí)鐘;16.芯片內(nèi)置PLL;17.設(shè)計(jì)用于手持設(shè)備和通用嵌入式系統(tǒng);18.16/32位RISC體系結(jié)構(gòu),使用ARM920TCPU核的強(qiáng)大指令集;19.ARM帶MMU的先進(jìn)的體系結(jié)構(gòu)支持WINCE、EPOC32、LINUX;20.指令緩存(catch)、數(shù)據(jù)緩沖、寫緩沖和物理地址TAGRAM,減小了對(duì)主存儲(chǔ)器帶寬和性能的影響;21.ARM920TCPU核支持ARM調(diào)試的體系結(jié)構(gòu);22.內(nèi)部先進(jìn)的位控制器總線(AMBA2.0,AHB/APB).其結(jié)構(gòu)圖如圖1-2所示:圖1-2S3c2410X芯片系統(tǒng)管理:1.小端/大端支持;2.地址空間:每個(gè)BANK128MB(全部1G字節(jié));3.每個(gè)BANK可編程為8/16/32位數(shù)據(jù)總線;4.bank0到bank6為固定起始地址;5.bank7可編程BANK起始地址和大??;6.一共8個(gè)存儲(chǔ)器BANK;7.6個(gè)存儲(chǔ)器BANK用于ROM,SRAM和其他;8.2個(gè)存儲(chǔ)器BANK用于ROM,SRAM和同步DRAM;9.每個(gè)存儲(chǔ)器BANK可編程存取周期;10.支持等待信號(hào)用以擴(kuò)展總線周期;11.支持SDRAM掉電模式下的自刷新;12.支持不同類型的ROM用于啟動(dòng)NOR/NANDFlash,EEPROM和其他。芯片封裝:272-FBGA封裝圖如圖1-3所示:圖1-3272-FBGA封裝嵌入式Linux開發(fā)流程嵌入式linux開發(fā),根據(jù)應(yīng)用需求的不同有不同的配置開發(fā)方法,但是一般都要經(jīng)過(guò)以下過(guò)程:建立開發(fā)環(huán)境。操作系統(tǒng)一般使用REDHAT-LINUX,版本7到9都可以,選擇定制安裝或全部安裝,通過(guò)網(wǎng)絡(luò)下載相應(yīng)的GCC交叉編譯器進(jìn)行安裝(比如arm-linux-gcc、arm-uclibc-gcc),或者安裝產(chǎn)品廠家提供的交叉編譯器。配置開發(fā)主機(jī)。配置MINICOM,一般參數(shù)為波特率115200,數(shù)據(jù)位8位,停止位1,無(wú)奇偶校驗(yàn),軟硬件控制流設(shè)為無(wú)。在WINDOWS下的超級(jí)終端的配置也是這樣。MINICOM軟件的作用是作為調(diào)試嵌入式開發(fā)板信息輸出的監(jiān)視器和鍵盤輸入的工具;配置網(wǎng)絡(luò),主要是配置NFS網(wǎng)絡(luò)文件系統(tǒng),需要關(guān)閉防火墻,簡(jiǎn)化嵌入式網(wǎng)絡(luò)調(diào)試環(huán)境設(shè)置過(guò)程。建立引導(dǎo)裝載程序BOOTLOADER,從網(wǎng)絡(luò)上下載一些公開源代碼的BOOTLOADER,如U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根據(jù)自己具體芯片進(jìn)行移植修改。有些芯片沒(méi)有內(nèi)置引導(dǎo)裝載程序,比如三星的ARM7、ARM9系列芯片,這樣就需要編寫燒寫開發(fā)板上flash的燒寫程序,網(wǎng)絡(luò)上有免費(fèi)下載的WINDOWS下通過(guò)JTAG并口簡(jiǎn)易仿真器燒寫ARM外圍flash芯片的程序。也有LINUX下公開源代碼的J-FLASH程序。如果不能燒寫自己的開發(fā)板,就需要根據(jù)自己的具體電路進(jìn)行源代碼修改。這是讓系統(tǒng)可以正常運(yùn)行的第一步。如果你購(gòu)買了廠家的仿真器當(dāng)然比較容易燒寫flash了,但是其中的核心技術(shù)是無(wú)法了解的。這對(duì)于需要迅速開發(fā)應(yīng)用的人來(lái)說(shuō)可以極大地提高開發(fā)速度。下載別人已經(jīng)移植好的LINUX操作系統(tǒng),如UCLINUX、ARM-LINUX、PPC-LINUX等,如果有專門針對(duì)你所使用的CPU移植好的LINUX操作系統(tǒng)那是再好不過(guò),下載后再添加自己的特定硬件的驅(qū)動(dòng)程序,進(jìn)行調(diào)試修改,對(duì)于帶MMU的CPU可以使用模塊方式調(diào)試驅(qū)動(dòng),對(duì)于UCLINUX這樣的系統(tǒng)好像只能編譯進(jìn)內(nèi)核進(jìn)行調(diào)試。建立根文件系統(tǒng),從下載使用BUSYBOX軟件進(jìn)行功能裁減,產(chǎn)生一個(gè)最基本的根文件系統(tǒng),再根據(jù)自己的應(yīng)用需要添加其他的程序。默認(rèn)的啟動(dòng)腳本一般都不會(huì)符合應(yīng)用的需要,所以就要修改根文件系統(tǒng)中的啟動(dòng)腳本,它的存放位置位于/etc目錄下,包括:、/etc/profile、/etc/.profile等,自動(dòng)掛裝文件系統(tǒng)的配置文件/etc/fstab,具體情況會(huì)隨系統(tǒng)不同而不同。根文件系統(tǒng)在嵌入式系統(tǒng)中一般設(shè)為只讀,需要使用mkcramfs、genromfs等工具產(chǎn)生燒寫映象文件。建立應(yīng)用程序的flash磁盤分區(qū),一般使用JFFS2或YAFFS文件系統(tǒng),這需要在內(nèi)核中提供這些文件系統(tǒng)的驅(qū)動(dòng),有的系統(tǒng)使用一個(gè)線性flash(NOR型)512K-32M,有的系統(tǒng)使用非線性flash(NAND型)8-512M,有的兩個(gè)同時(shí)使用,需要根據(jù)應(yīng)用規(guī)劃flash的分區(qū)方案。開發(fā)應(yīng)用程序,可以下載到根文件系統(tǒng)中,也可以放入YAFFS、JFFS2文件系統(tǒng)中,有的應(yīng)用程序不使用根文件系統(tǒng),而是直接將應(yīng)用程序和內(nèi)核設(shè)計(jì)在一起,這有點(diǎn)類似于UCOS-II的方式。燒寫內(nèi)核、根文件系統(tǒng)、應(yīng)用程序。發(fā)布產(chǎn)品。實(shí)驗(yàn)二Linux的安裝和基本操作實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康?.在PC機(jī)上安裝Linux(Redhat9.0版本)操作系統(tǒng)2.熟悉簡(jiǎn)單的Linux指令和操作實(shí)驗(yàn)內(nèi)容1.進(jìn)行硬盤分區(qū):如果使用單獨(dú)硬盤安裝RedHatLinux,可以在安裝時(shí)使用它自帶的圖形界面分區(qū)工具——DiskDruid來(lái)進(jìn)行分區(qū),在下文中我們將介紹使用方法。如果在硬盤里已經(jīng)安裝了Windows操作系統(tǒng),如何在保留原有操作系統(tǒng)的前提下,再安裝一套Linux呢?我們建議使用PartitionMagic(分區(qū)大師)先分出一個(gè)空閑區(qū),以備在安裝RedHatLinux時(shí),再使用DiskDruid來(lái)建立Linux分區(qū)使用。請(qǐng)注意:建議該分區(qū)的大小為10G。2.光盤安裝:RedHatLinux提供了網(wǎng)絡(luò)安裝、硬盤安裝以及光盤安裝等多種安裝方式,我們使用光盤安裝。在光驅(qū)中放入光盤,并將BIOS里的電腦啟動(dòng)方式改為光盤啟動(dòng)方式保存退出,重啟電腦。此時(shí),光盤會(huì)自動(dòng)啟動(dòng)Linux的安裝程序,隨即顯示歡迎信息,此時(shí)按下回車鍵開始安裝。(1)語(yǔ)言、鍵盤以及鼠標(biāo)RedHatLinux支持包括法語(yǔ)、德語(yǔ)、西班牙語(yǔ)以及日語(yǔ)在內(nèi)的世界大多數(shù)語(yǔ)言,并支持中文,所以我們?cè)谶@里選擇中文。接下來(lái)就是鍵盤和鼠標(biāo)的選擇,安裝程序都能夠自動(dòng)識(shí)別鍵盤的類型,不需用戶更改鍵盤的類型。一般的PS/2或串口鼠標(biāo)不需要進(jìn)行額外設(shè)置。(2)安裝模式RedHatLinux提供了Workstation(工作站)、Server(服務(wù)器)、Laptop(筆記本電腦)、Custom(用戶自定義)以及UpgradeExisting(從RedHatLinux老版本升級(jí))5種安裝模式,我們建議初學(xué)用戶選擇Custom(用戶自定義)安裝模式,同時(shí)以下的安裝步驟我們也將以用戶自定義安裝模式來(lái)說(shuō)明。(3)硬盤分區(qū)RedHatLinux提供了三種分區(qū)方式:自動(dòng)分區(qū)、文本界面(Fdisk)、圖形分區(qū)(DiskDruid)。這里要提醒大家,謹(jǐn)慎使用自動(dòng)分區(qū)模式,自動(dòng)分區(qū)如果使用不當(dāng),就會(huì)破壞硬盤中所有的數(shù)據(jù)。我們建議用戶使用圖形界面分區(qū)工具DiskDruid,在DiskDruid界面中點(diǎn)擊“Add(增加)”按鈕,會(huì)出現(xiàn)一個(gè)對(duì)話框,在這里需要進(jìn)行一些設(shè)置。先設(shè)置這個(gè)分區(qū)的安裝點(diǎn)(mountpoint),如果創(chuàng)建的是根文件系統(tǒng),應(yīng)該加載為“/”;如果創(chuàng)建的是交換分區(qū)(swap),就不需要選擇安裝點(diǎn);如果創(chuàng)建的是除根文件系統(tǒng)和交換分區(qū)以外的分區(qū),應(yīng)該根據(jù)實(shí)際的情況選擇安裝點(diǎn)。接下來(lái)設(shè)置分區(qū)的大小,交換分區(qū)的大小應(yīng)該為物理內(nèi)存的兩倍。根文件系統(tǒng)分區(qū)是系統(tǒng)安裝所在的分區(qū),如果你需要完全安裝RedHatLinux,根文件系統(tǒng)分區(qū)就需要較大的空間(建議>9G)。隨后還要為分區(qū)選擇適當(dāng)?shù)姆謪^(qū)類型。最后如果對(duì)分區(qū)設(shè)置滿意,點(diǎn)擊OK按鈕完成創(chuàng)建分區(qū)。(這里建議只創(chuàng)建“/”和swap兩個(gè)分區(qū))(4)配置啟動(dòng)引導(dǎo)程序LILO有兩種方法來(lái)配置LILO(注:RedHatLinux默認(rèn)的引導(dǎo)程序是GRUB),分別是安裝在系統(tǒng)的主引導(dǎo)記錄(MBR)或者Linux根分區(qū)的第一個(gè)扇區(qū)中(例如:/dev/hda1)。我們建議把LILO安裝在主引導(dǎo)記錄中,即選擇MasterBootRecord(MBR)選項(xiàng)。這樣在系統(tǒng)啟動(dòng)過(guò)程中,會(huì)顯示“boot:”提示符,在提示符下輸入要啟動(dòng)的操作系統(tǒng),回車后即可進(jìn)入該操作系統(tǒng)。(5)網(wǎng)絡(luò)設(shè)置、防火墻設(shè)置、時(shí)區(qū)設(shè)置如果讀者沒(méi)有安裝網(wǎng)卡設(shè)備就不會(huì)出現(xiàn)網(wǎng)絡(luò)配置界面,也不會(huì)出現(xiàn)防火墻配置界面,此時(shí)可直接跳到時(shí)區(qū)設(shè)置界面。如果你是局域網(wǎng)用戶,可以從網(wǎng)絡(luò)管理員那里獲得網(wǎng)卡參數(shù)、主機(jī)名稱以及DNS主機(jī)信息等,在本實(shí)驗(yàn)中,我們直接啟用DHCP。對(duì)于一般用戶,防火墻設(shè)置直接使用默認(rèn)就可以了。然后,RedHatLinux會(huì)讓你選擇所在的時(shí)區(qū),我們可以選擇上海。(6)賬號(hào)配置root口令非常重要,口令長(zhǎng)度至少為六個(gè)字符。好的口令包括數(shù)字和大小寫字母,特別需要注意的是口令是大小寫區(qū)分的。(7)軟件包選擇在這一步我們將選擇所需要的軟件包,RedHatLinux提供流行的桌面環(huán)境GNOME和KDE,它們各自都有獨(dú)特之處,建議初級(jí)用戶選擇全部軟件包(everything);或者除缺省安裝的組件外,在SelectPackage時(shí)添加上KernelDevelopment、SoftwareDevelopment、Emacs、Utilities。(8)X環(huán)境的設(shè)置X環(huán)境的設(shè)置包括兩部分,第一部分是顯卡設(shè)置,大多數(shù)顯卡Linux都能自動(dòng)識(shí)別并安裝驅(qū)動(dòng)程序。第二部分是顯示器設(shè)置,如果Linux不能認(rèn)出你的顯示器,在定制顯示器時(shí)要特別注意,不能擴(kuò)大顯卡的顯存、水平和垂直刷新頻率。如果你不能確定你的顯卡和顯示器是否支持設(shè)定的分辨率,可以點(diǎn)擊“TestSetting”按鈕對(duì)XWindow進(jìn)行測(cè)試。(9)制作啟動(dòng)盤在安裝過(guò)程中會(huì)提示用戶制作啟動(dòng)盤,我們強(qiáng)烈建議用戶創(chuàng)建一個(gè)Linux引導(dǎo)盤。如果你先安裝Linux,后安裝或者以后重裝Windows9x/2k/xp,都會(huì)破壞GRUB或LILO。以后計(jì)算機(jī)每次啟動(dòng),就直接進(jìn)入windows,而不能引導(dǎo)Linux。這時(shí)候你創(chuàng)建的Linux啟動(dòng)盤就派上用場(chǎng)了。經(jīng)過(guò)以上步驟,安裝工作已經(jīng)全部完成。你可以取出光驅(qū)中的RedHatLinux安裝光盤和軟驅(qū)中的軟盤,重新引導(dǎo)系統(tǒng),選擇進(jìn)入Linux系統(tǒng),熟悉系統(tǒng)環(huán)境。開啟終端,參照附錄,練習(xí)Linux常用基本指令的使用。

實(shí)驗(yàn)三交叉編譯環(huán)境的建立和bootloader的使用實(shí)驗(yàn)?zāi)康?.建立嵌入式軟件的交叉編譯環(huán)境。2.下載和使用bootloader。實(shí)驗(yàn)內(nèi)容1.安裝串口支持文件。2.安裝編譯器。3.安裝bootloader。4.下載內(nèi)核并運(yùn)行。嵌入式LINUX開發(fā)環(huán)境有幾個(gè)方案:1.基于PC機(jī)WINDOWS操作系統(tǒng)下的CYGWIN;2.在WINDOWS下安裝虛擬機(jī)后,再在虛擬機(jī)中安裝LINXUX操作系統(tǒng);3.直接安裝LINUX操作系統(tǒng)?;赪INDOWS的環(huán)境要么有兼容性問(wèn)題,要么速度有影響,所以我推薦大家使用純LINUX操作系統(tǒng)開發(fā)環(huán)境。我們實(shí)際的開發(fā)環(huán)境為REDHAT9,它已經(jīng)支持中文,并且包含了絕大部分的開發(fā)工具,不用擔(dān)心裝了LINUX就不能使用WINDOWS的問(wèn)題。一般的情況都是用戶已經(jīng)有了WINDOWS操作系統(tǒng),再安裝LINUX,LINUX會(huì)自動(dòng)安裝一個(gè)叫作GRUB的啟動(dòng)引導(dǎo)軟件,可以選擇引導(dǎo)多個(gè)操作系統(tǒng)。絕大多數(shù)Linux軟件開發(fā)都是以native方式進(jìn)行的,即本機(jī)(HOST)開發(fā)、調(diào)試,本機(jī)運(yùn)行的方式。這種方式通常不適合于嵌入式系統(tǒng)的軟件開發(fā),因?yàn)閷?duì)于嵌入式系統(tǒng)的開發(fā),沒(méi)有足夠的資源在本機(jī)(即板子上系統(tǒng))運(yùn)行開發(fā)工具和調(diào)試工具。通常的嵌入式系統(tǒng)的軟件開發(fā)采用一種交叉編譯調(diào)試的方式。交叉編譯調(diào)試環(huán)境建立在宿主機(jī)(即一臺(tái)PC機(jī))上,對(duì)應(yīng)的開發(fā)板叫做目標(biāo)板。運(yùn)行Linux的PC【宿主機(jī)】開發(fā)時(shí)使用宿主機(jī)上的交叉編譯、匯編及連接工具形成可執(zhí)行的二進(jìn)制代碼(這種可執(zhí)行代碼并不能在宿主機(jī)上執(zhí)行,而只能在目標(biāo)板上執(zhí)行),然后把可執(zhí)行文件下載到目標(biāo)機(jī)上運(yùn)行。調(diào)試時(shí)的方法很多,可以使用串口,以太網(wǎng)口等,具體使用哪種調(diào)試方法可以根據(jù)目標(biāo)機(jī)處理器提供的支持做出選擇。宿主機(jī)和目標(biāo)板的處理器一般不相同,宿主機(jī)為Intel處理器,而目標(biāo)板如UP-NetARM2410-S開發(fā)板為三星S3c2410.GNU編譯器提供這樣的功能,在編譯器編譯時(shí)可以選擇開發(fā)所需的宿主機(jī)和目標(biāo)機(jī)從而建立開發(fā)環(huán)境。所以在進(jìn)行嵌入式開發(fā)前第一步的工作就是要安裝一臺(tái)裝有指定操作系統(tǒng)的PC機(jī)作宿主開發(fā)機(jī),對(duì)于嵌入式LINUX,宿主機(jī)上的操作系統(tǒng)一般要求為REDHATLINUX。嵌入式開發(fā)通常要求宿主機(jī)配置有網(wǎng)絡(luò),支持NFS(為交叉開發(fā)時(shí)mount所用)。然后要在宿主機(jī)上建立交叉編譯調(diào)試的開發(fā)環(huán)境。環(huán)境的建立需要許多的軟件模塊協(xié)同工作,這將是一個(gè)比較繁雜的工作,但現(xiàn)在已通過(guò)博創(chuàng)嵌入式教學(xué)套件中光盤的安裝而自動(dòng)完成了。對(duì)開發(fā)PC機(jī)的性能要求由于Redhat9.0安裝后占用空間約為-5G之間,還要安裝ARM-LINUX開發(fā)軟件,因此對(duì)開發(fā)計(jì)算機(jī)的硬盤空間要求較大。硬件要求:CPU:高于奔騰500M,推薦高于賽揚(yáng);內(nèi)存:大于128M,推薦256M;硬盤:大于10G,推薦高于40G。開發(fā)工具軟件的安裝與配置1.REDHATLINUX9.0的安裝在一臺(tái)PC上安裝,選擇Custom定制安裝,在選擇軟件Package時(shí)最好將所有包都安裝,需要空間約,如果選擇最后一項(xiàng):everything,即完全安裝,將安裝3張光盤的全部軟件,需要磁盤空間大約5G。因此建議提前為REDHATLINUX的安裝預(yù)留大約5-15G的空間,具體視用戶的硬盤空間大小來(lái)確定,在安裝完Redhat后還要安裝Linux的編譯器和開發(fā)庫(kù)以及ARM-Linux的所有源代碼,這些包安裝后的總共需要空間大約為800M。2.開發(fā)工具軟件的安裝將博創(chuàng)興業(yè)科技提供的附帶開發(fā)工具光盤插入CDROM,然后執(zhí)行以下命令:若系統(tǒng)不識(shí)別/dev/cdrom的話,可以用如下命令,假設(shè)CDROM為從盤,即為/dev/hdb,則:安裝腳本程序?qū)⒆詣?dòng)建立/arm2410s目錄,并將所有開發(fā)軟件包安裝到/arm2410s目錄下,同時(shí)自動(dòng)配置編譯環(huán)境,建立合適的符號(hào)連接。注意:安裝完成后看一下主編譯器Armv4l-unknown-linux-gcc是否在/opt/host/armv4l/bin/,如果不是這個(gè)路徑,請(qǐng)使用vi修改/root/.bash_profile文件中PATH變量為PATH=$PATH:$HOME/bin:/opt/host/armv4l/bin/,存盤后執(zhí)行:source/root/.bash_profile,則以后armv4l-unknown-linux-gcc會(huì)自動(dòng)搜索到,可以在終端上輸入armv,然后按tab鍵,會(huì)自動(dòng)顯示armv4l-unknown-linux-3.開發(fā)環(huán)境配置配置網(wǎng)絡(luò),包括配置IP地址、NFS服務(wù)、防火墻。網(wǎng)絡(luò)配置主要是要安裝好以太網(wǎng)卡,對(duì)于一般常見的RTL8139網(wǎng)卡,REDHAT9.0可以自動(dòng)識(shí)別并自動(dòng)安裝好,完全不要用戶參與,因此建議使用該網(wǎng)卡。然后配置宿主機(jī)IP為。如果是在有多臺(tái)計(jì)算機(jī)使用的局域網(wǎng)環(huán)境使用此開發(fā)設(shè)備,IP地址可以根據(jù)具體情況設(shè)置。如圖3-1所示:圖3-1網(wǎng)絡(luò)配置雙擊設(shè)備eth0的藍(lán)色區(qū)域,進(jìn)入以太網(wǎng)設(shè)置界面,如圖3-2,3-3所示:圖3-2以太網(wǎng)常規(guī)設(shè)置界面圖3-3以太網(wǎng)路由設(shè)置界面對(duì)于,它默認(rèn)的是打開了防火墻,因此對(duì)于外來(lái)的IP訪問(wèn)它全部拒絕,這樣其它網(wǎng)絡(luò)設(shè)備根本無(wú)法訪問(wèn)它,即無(wú)法用NFSmount它,許多網(wǎng)絡(luò)功能都將無(wú)法使用。因此網(wǎng)絡(luò)安裝完畢后,應(yīng)立即關(guān)閉防火墻。操作如下:點(diǎn)擊紅帽子開始菜單,選擇安全級(jí)別設(shè)置,選中無(wú)防火墻。如圖3-4所示:圖3-4安全級(jí)別設(shè)置在系統(tǒng)設(shè)置菜單中選擇服務(wù)器設(shè)置菜單,再選中服務(wù)菜單,將iptables服務(wù)的勾去掉,并確保nfs選項(xiàng)選中。配置NFS:點(diǎn)擊主菜單運(yùn)行系統(tǒng)設(shè)置->服務(wù)器設(shè)置->NFS服務(wù)器(英文為:SETUP->SYSTEMSERVICE->NFS),點(diǎn)擊增加出現(xiàn)如下在界面,在目錄(Drictory):中填入需要共享的路徑,在主機(jī)(Hosts):中填入允許進(jìn)行連接的主機(jī)IP地址。并選擇允許客戶對(duì)共享目錄的操作為只讀(Read-only)或讀寫(Read/write)。如圖3-5所示:圖3-5NFS基本設(shè)置圖3-6是對(duì)客戶端存取服務(wù)器的一些其他設(shè)置,一般不需要設(shè)置,取默認(rèn)值。圖3-6NFS用戶訪問(wèn)設(shè)置當(dāng)將遠(yuǎn)程根用戶當(dāng)作本地根用戶時(shí),對(duì)于操作比較方便,但是安全性較差。最后退出時(shí)則完成NFS配置。配置好后,界面應(yīng)顯示如圖3-7所示:圖3-7遠(yuǎn)程根用戶當(dāng)作本地根用戶圖3-8配置好的NFS我們也可以手工編寫/etc/exports文件,其格式如下:共享目錄可以連接的主機(jī)(讀寫權(quán)限,其他參數(shù))例如:表示將本機(jī)的/arm2410s目錄共享給ip地址為-的所有計(jì)算機(jī),可以讀取和寫入。配置完成后,可用如下辦法簡(jiǎn)單測(cè)試一下NFS是否配置好了:在宿主機(jī)上自己mount自己,看是否成功就可以判斷NFS是否配好了。例如在宿主機(jī)/目錄下執(zhí)行:其中應(yīng)為主機(jī)的IP地址。然后到/mnt/目錄下看是否可以列出/arm2410s目錄下的所有文件和目錄,可以則說(shuō)明mount成功,NFS配置成功。配置MINICOM:1.在linux操作系統(tǒng)Xwindow界面下建立終端(在桌面上點(diǎn)擊右鍵——>新建終端),在終端的命令行提示符后輸入minicom,回車,你就會(huì)看到minicom的啟動(dòng)畫面(見圖3-9)。若沒(méi)有啟動(dòng)Xwindow則在命令行提示符后直接輸入minicom即可。圖3-9minicom啟動(dòng)畫面2.minicom啟動(dòng)后,先按Ctrl+A鍵,再按Z鍵(注意不是連續(xù)按,Ctrl+A松開后才按Z),進(jìn)入主配置界面(見圖3-10)。圖3-10主配置界面按“O”進(jìn)入配置界面,如圖3-11配置界面圖3-11配置界面按上下鍵選擇Serialportsetup,進(jìn)入端口設(shè)置界面,這里有幾個(gè)重要選項(xiàng)改為如下值(見圖):(在Changewhichsetting后按哪個(gè)字母就進(jìn)入哪項(xiàng)的配置,如按A進(jìn)行端口號(hào)配置。)A————SerialDevice:/dev/ttyS0(端口號(hào)使用串口1)E————BPS/par/bits:/1152008N1(波特率)F,E硬件流,軟件流都改為NO,若要使用PC機(jī)的串口2來(lái)接板子的串口1做監(jiān)控,改為:/dev/ttyS1即可。3.選好后按ESC鍵退出到圖3-11所示畫面,選擇Savesetupasdf1保存退出,以后只要啟動(dòng)minicom就是該配置,無(wú)需再做改動(dòng)。4.配置完成后,用串口線連接好pc機(jī)和2410-S,啟動(dòng)2410-S,即可在minicom上看到啟動(dòng)信息,并可以執(zhí)行操作控制。圖3-12端口設(shè)置界面Linux開發(fā)軟件的安裝目錄結(jié)構(gòu)表格3-1均以/arm2410s目錄為起點(diǎn):表3-1/arm2410s下的文件說(shuō)明目錄名說(shuō)明busybox-1.00-pre10Busybox-1.00源代碼docarm2410-Slinux使用說(shuō)明書QtQt應(yīng)用程序和庫(kù)的源代碼insight-6.0Linux下源代碼查看器root2410-S平臺(tái)根文件系統(tǒng)kernel-2410s2410-S平臺(tái)linux內(nèi)核源代碼demos所有實(shí)驗(yàn)演示程序imgvivi系統(tǒng)引導(dǎo)程序zImageARMLINUX-2.4內(nèi)核壓縮映象文件root.cramfs根文件系統(tǒng)映象文件yaffs.tar.bz2demos演示程序的壓縮文件exp實(shí)驗(yàn)例程源碼shmount-dos.shlinux下掛裝windows的分區(qū)示例腳本mnt_udisk.shMOUNTU盤mkroot.sh制作根文件系統(tǒng)的腳本編譯器安裝路徑說(shuō)明如表3-2所示:表3-2編譯器安裝路徑說(shuō)明編譯器安裝目錄說(shuō)明arm-elf-gcc-2.95.3/opt/host/armv4l應(yīng)用開發(fā)庫(kù)和頭文件Armv4l-unknown-linux-gcc/opt/host/armv4l/bin主編譯器上述諸多程序的源代碼都在光盤中提供.在安裝完成LINUX后,就是對(duì)LINUX的網(wǎng)絡(luò)環(huán)境的配置,最主要是配置NFS服務(wù)器。

實(shí)驗(yàn)四多線程應(yīng)用程序設(shè)計(jì)實(shí)驗(yàn)?zāi)康模?.了解多線程應(yīng)用程序設(shè)計(jì)的基本原理。2.學(xué)習(xí)pthread庫(kù)函數(shù)的使用。實(shí)驗(yàn)內(nèi)容:的源代碼,熟悉幾個(gè)重要的PTHREAD庫(kù)函數(shù)的使用。2.掌握共享鎖和信號(hào)量的使用方法。/arm2410s/exp/basic/02_pthread目錄,運(yùn)行make產(chǎn)生pthread程序,使用NFS方式連接開發(fā)主機(jī)進(jìn)行運(yùn)行實(shí)驗(yàn)。預(yù)備知識(shí):C語(yǔ)言基礎(chǔ)Linux下常用編輯器的使用Makefile的編寫和使用Linux下的程序編譯與交叉編譯過(guò)程實(shí)驗(yàn)設(shè)備及工具硬件:UP-NETARM2410-S嵌入式實(shí)驗(yàn)平臺(tái),PC機(jī)Pentium500以上,硬盤40G以上,內(nèi)存大于128M。軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+MINICOM+ARM-LINUX開發(fā)環(huán)境實(shí)驗(yàn)原理及代碼分析1.多線程程序的優(yōu)缺點(diǎn)多線程程序作為一種多任務(wù)、并發(fā)的工作方式,有以下的優(yōu)點(diǎn):1)提高應(yīng)用程序響應(yīng)。這對(duì)圖形界面的程序尤其有意義,當(dāng)一個(gè)操作耗時(shí)很長(zhǎng)時(shí),整個(gè)系統(tǒng)都會(huì)等待這個(gè)操作,此時(shí)程序不會(huì)響應(yīng)鍵盤、鼠標(biāo)、菜單的操作,而使用多線程技術(shù),將耗時(shí)長(zhǎng)的操作(timeconsuming)置于一個(gè)新的線程,可以避免這種尷尬的情況。2)使多CPU系統(tǒng)更加有效。操作系統(tǒng)會(huì)保證當(dāng)線程數(shù)不大于CPU數(shù)目時(shí),不同的線程運(yùn)行于不同的CPU上。3)改善程序結(jié)構(gòu)。一個(gè)既長(zhǎng)又復(fù)雜的進(jìn)程可以考慮分為多個(gè)線程,成為幾個(gè)獨(dú)立或半獨(dú)立的運(yùn)行部分,這樣的程序會(huì)利于理解和修改。LIBC中的pthread庫(kù)提供了大量的API函數(shù),為用戶編寫應(yīng)用程序提供支持。2.實(shí)驗(yàn)源代碼與結(jié)構(gòu)流程圖本實(shí)驗(yàn)為著名的生產(chǎn)者-消費(fèi)者問(wèn)題模型的實(shí)現(xiàn),主程序中分別啟動(dòng)生產(chǎn)者線程和消費(fèi)者線程。生產(chǎn)者線程不斷順序地將0到1000的數(shù)字寫入共享的循環(huán)緩沖區(qū),同時(shí)消費(fèi)者線程不斷地從共享的循環(huán)緩沖區(qū)讀取數(shù)據(jù)。流程圖如圖4-1所示:圖4-1生產(chǎn)者-消費(fèi)者實(shí)驗(yàn)源代碼結(jié)構(gòu)流程圖本實(shí)驗(yàn)具體代碼如下:3.主要函數(shù)分析:下面我們來(lái)看一下,生產(chǎn)者寫入緩沖區(qū)和消費(fèi)者從緩沖區(qū)讀數(shù)的具體流程,生產(chǎn)者首先要獲得互斥鎖,并且判斷寫指針+1后是否等于讀指針,如果相等則進(jìn)入等待狀態(tài),等候條件變量notfull;如果不等則向緩沖區(qū)中寫一個(gè)整數(shù),并且設(shè)置條件變量為notempty,最后釋放互斥鎖。消費(fèi)者線程與生產(chǎn)者線程類似,這里就不再過(guò)多介紹了。流程圖如下:圖4-2生產(chǎn)消費(fèi)流程圖生產(chǎn)者寫入共享的循環(huán)緩沖區(qū)函數(shù)PUT消費(fèi)者讀取共享的循環(huán)緩沖區(qū)函數(shù)GET4.主要的多線程API在本程序的代碼中大量的使用了線程函數(shù),如pthread_cond_signal、pthread_mutex_init、pthread_mutex_lock等等,這些函數(shù)的作用是什么,在哪里定義的,我們將在下面的內(nèi)容中為大家做一個(gè)簡(jiǎn)單的介紹,并且為其中比較重要的函數(shù)做一些詳細(xì)的說(shuō)明。?線程創(chuàng)建函數(shù):獲得父進(jìn)程ID:?測(cè)試兩個(gè)線程號(hào)是否相同:?線程退出:?等待指定的線程結(jié)束:?互斥量初始化:銷毀互斥量:?再試一次獲得對(duì)互斥量的鎖定(非阻塞):?鎖定互斥量(阻塞):?解鎖互斥量:?條件變量初始化:銷毀條件變量COND:?喚醒線程等待條件變量:?等待條件變量(阻塞):?在指定的時(shí)間到達(dá)前等待條件變量:PTHREAD庫(kù)中還有大量的API函數(shù),用戶可以參考其他相關(guān)書籍。下面我們對(duì)幾個(gè)比較重要的函數(shù)做一下詳細(xì)的說(shuō)明:pthread_create線程創(chuàng)建函數(shù)線程創(chuàng)建函數(shù)第一個(gè)參數(shù)為指向線程標(biāo)識(shí)符的指針,第二個(gè)參數(shù)用來(lái)設(shè)置線程屬性,第三個(gè)參數(shù)是線程運(yùn)行函數(shù)的起始地址,最后一個(gè)參數(shù)是運(yùn)行函數(shù)的參數(shù)。這里,我們的函數(shù)thread不需要參數(shù),所以最后一個(gè)參數(shù)設(shè)為空指針。第二個(gè)參數(shù)我們也設(shè)為空指針,這樣將生成默認(rèn)屬性的線程。當(dāng)創(chuàng)建線程成功時(shí),函數(shù)返回0,若不為0則說(shuō)明創(chuàng)建線程失敗,常見的錯(cuò)誤返回代碼為EAGAIN和EINVAL。前者表示系統(tǒng)限制創(chuàng)建新的線程,例如線程數(shù)目過(guò)多了;后者表示第二個(gè)參數(shù)代表的線程屬性值非法。創(chuàng)建線程成功后,新創(chuàng)建的線程則運(yùn)行參數(shù)三和參數(shù)四確定的函數(shù),原來(lái)的線程則繼續(xù)運(yùn)行下一行代碼。pthread_join函數(shù)用來(lái)等待一個(gè)線程的結(jié)束。函數(shù)原型為:第一個(gè)參數(shù)為被等待的線程標(biāo)識(shí)符,第二個(gè)參數(shù)為一個(gè)用戶定義的指針,它可以用來(lái)存儲(chǔ)被等待線程的返回值。這個(gè)函數(shù)是一個(gè)線程阻塞的函數(shù),調(diào)用它的函數(shù)將一直等待到被等待的線程結(jié)束為止,當(dāng)函數(shù)返回時(shí),被等待線程的資源被收回。pthread_exit函數(shù)一個(gè)線程的結(jié)束有兩種途徑,一種是象我們上面的例子一樣,函數(shù)結(jié)束了,調(diào)用它的線程也就結(jié)束了;另一種方式是通過(guò)函數(shù)pthread_exit來(lái)實(shí)現(xiàn)。它的函數(shù)原型為:唯一的參數(shù)是函數(shù)的返回代碼,只要pthread_join中的第二個(gè)參數(shù)thread_return不是NULL,這個(gè)值將被傳遞給thread_return。最后要說(shuō)明的是,一個(gè)線程不能被多個(gè)線程等待,否則第一個(gè)接收到信號(hào)的線程成功返回,其余調(diào)用pthread_join的線程則返回錯(cuò)誤代碼ESRCH。下面我們來(lái)介紹有關(guān)條件變量的內(nèi)容。使用互斥鎖來(lái)可實(shí)現(xiàn)線程間數(shù)據(jù)的共享和通信,互斥鎖一個(gè)明顯的缺點(diǎn)是它只有兩種狀態(tài):鎖定和非鎖定。而條件變量通過(guò)允許線程阻塞和等待另一個(gè)線程發(fā)送信號(hào)的方法彌補(bǔ)了互斥鎖的不足,它常和互斥鎖一起使用。使用時(shí),條件變量被用來(lái)阻塞一個(gè)線程,當(dāng)條件不滿足時(shí),線程往往解開相應(yīng)的互斥鎖并等待條件發(fā)生變化。一旦其它的某個(gè)線程改變了條件變量,它將通知相應(yīng)的條件變量喚醒一個(gè)或多個(gè)正被此條件變量阻塞的線程。這些線程將重新鎖定互斥鎖并重新測(cè)試條件是否滿足。一般說(shuō)來(lái),條件變量被用來(lái)進(jìn)行線線程間的同步。pthread_cond_init函數(shù)條件變量的結(jié)構(gòu)為pthread_cond_t,函數(shù)pthread_cond_init()被用來(lái)初始化一個(gè)條件變量。它的原型為:其中cond是一個(gè)指向結(jié)構(gòu)pthread_cond_t的指針,cond_attr是一個(gè)指向結(jié)構(gòu)pthread_condattr_t的指針。結(jié)構(gòu)pthread_condattr_t是條件變量的屬性結(jié)構(gòu),和互斥鎖一樣我們可以用它來(lái)設(shè)置條件變量是進(jìn)程內(nèi)可用還是進(jìn)程間可用,默認(rèn)值是PTHREAD_PROCESS_PRIVATE,即此條件變量被同一進(jìn)程內(nèi)的各個(gè)線程使用。注意初始化條件變量只有未被使用時(shí)才能重新初始化或被釋放。釋放一個(gè)條件變量的函數(shù)為pthread_cond_destroy(pthread_cond_tcond)。pthread_cond_wait函數(shù)使線程阻塞在一個(gè)條件變量上。它的函數(shù)原型為:線程解開mutex指向的鎖并被條件變量cond阻塞。線程可以被函數(shù)pthread_cond_signal和函數(shù)pthread_cond_broadcast喚醒,但是要注意的是,條件變量只是起阻塞和喚醒線程的作用,具體的判斷條件還需用戶給出,例如一個(gè)變量是否為0等等,這一點(diǎn)我們從后面的例子中可以看到。線程被喚醒后,它將重新檢查判斷條件是否滿足,如果還不滿足,一般說(shuō)來(lái)線程應(yīng)該仍阻塞在這里,被等待被下一次喚醒。這個(gè)過(guò)程一般用while語(yǔ)句實(shí)現(xiàn)。pthread_cond_timedwait函數(shù)另一個(gè)用來(lái)阻塞線程的函數(shù)是pthread_cond_timedwait(),它的原型為:它比函數(shù)pthread_cond_wait()多了一個(gè)時(shí)間參數(shù),經(jīng)歷abstime段時(shí)間后,即使條件變量不滿足,阻塞也被解除。pthread_cond_signal函數(shù)它的函數(shù)原型為:它用來(lái)釋放被阻塞在條件變量cond上的一個(gè)線程。多個(gè)線程阻塞在此條件變量上時(shí),哪一個(gè)線程被喚醒是由線程的調(diào)度策略所決定的。要注意的是,必須用保護(hù)條件變量的互斥鎖來(lái)保護(hù)這個(gè)函數(shù),否則條件滿足信號(hào)又可能在測(cè)試條件和調(diào)用pthread_cond_wait函數(shù)之間被發(fā)出,從而造成無(wú)限制的等待。實(shí)驗(yàn)步驟1.閱讀源代碼及編譯應(yīng)用程序進(jìn)入exp/basic/02_pthread目錄,使用vi編輯器或其他編輯器閱讀理解源代碼。運(yùn)行make產(chǎn)生pthread可執(zhí)行文件。2.下載和調(diào)試切換到minicom終端窗口,使用NFSmount開發(fā)主機(jī)的/arm2410s到/host目錄。進(jìn)入/host/exp/basic/pthread目錄,運(yùn)行pthread,觀察運(yùn)行結(jié)果的正確性。運(yùn)行程序最后一部分結(jié)果如下:思考題 加入一個(gè)新的線程用于處理鍵盤的輸入,并在按鍵為ESC時(shí)終止所有線程。線程的優(yōu)先級(jí)的控制。

實(shí)驗(yàn)五A/D接口實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康牧私庠趌inux環(huán)境下對(duì)S3C2410芯片的8通道10位A/D的操作與控制。實(shí)驗(yàn)內(nèi)容A/D接口原理,了解實(shí)現(xiàn)A/D系統(tǒng)對(duì)于系統(tǒng)的軟件和硬件要求。ARM芯片文檔,掌握ARM的A/D相關(guān)寄存器的功能,熟悉ARM系統(tǒng)硬件的A/D相關(guān)接口。ARM循環(huán)采集全部前4路通道,并且在超級(jí)終端上顯示。預(yù)備知識(shí)C語(yǔ)言基礎(chǔ)。Linux下常用編輯器的使用。Makefile的編寫和使用。Linux下的程序編譯與交叉編譯過(guò)程。實(shí)驗(yàn)設(shè)備及工具硬件:UP-NETARM2410-S嵌入式實(shí)驗(yàn)平臺(tái)、PC機(jī)Pentium500以上,硬盤10G以上。軟件:PC機(jī)操作系統(tǒng)+MINICOM+ARM-LINUX開發(fā)環(huán)境實(shí)驗(yàn)原理1.A/D轉(zhuǎn)換器A/D轉(zhuǎn)換器是模擬信號(hào)源和CPU之間聯(lián)系的接口,它的任務(wù)是將連續(xù)變化的模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),以便計(jì)算機(jī)和數(shù)字系統(tǒng)進(jìn)行處理、存儲(chǔ)、控制和顯示。在工業(yè)控制和數(shù)據(jù)采集及許多其他領(lǐng)域中,A/D轉(zhuǎn)換是不可缺少的。A/D轉(zhuǎn)換器有以下類型:逐位比較型、積分型、計(jì)數(shù)型、并行比較型、電壓-頻率型,主要應(yīng)根據(jù)使用場(chǎng)合的具體要求,按照轉(zhuǎn)換速度、精度、價(jià)格、功能以及接口條件等因素來(lái)決定選擇何種類型。常用的有以下兩種:雙積分型的A/D轉(zhuǎn)換器雙積分式也稱二重積分式,其實(shí)質(zhì)是測(cè)量和比較兩個(gè)積分的時(shí)間,一個(gè)是對(duì)模擬輸入電壓積分的時(shí)間T0,此時(shí)間往往是固定的;另一個(gè)是以充電后的電壓為初值,對(duì)參考電源Vref反向積分,積分電容被放電至零所需的時(shí)間T1。模擬輸入電壓Vi與參考電壓VRef之比,等于上述兩個(gè)時(shí)間之比。由于VRef、T0固定,而放電時(shí)間T1可以測(cè)出,因而可計(jì)算出模擬輸入電壓的大小(VRef與Vi符號(hào)相反)。由于T0、VRef為已知的固定常數(shù),因此反向積分時(shí)間T1與輸入模擬電壓Vi在T0時(shí)間內(nèi)的平均值成正比。輸入電壓Vi愈高,VA愈大,T1就愈長(zhǎng)。在T1開始時(shí)刻,控制邏輯同時(shí)打開計(jì)數(shù)器的控制門開始計(jì)數(shù),直到積分器恢復(fù)到零電平時(shí),計(jì)數(shù)停止。則計(jì)數(shù)器所計(jì)出的數(shù)字即正比于輸入電壓Vi在T0時(shí)間內(nèi)的平均值,于是完成了一次A/D轉(zhuǎn)換。由于雙積分型A/D轉(zhuǎn)換是測(cè)量輸入電壓Vi在T0時(shí)間內(nèi)的平均值,所以對(duì)常態(tài)干擾(串摸干擾)有很強(qiáng)的抑制作用,尤其對(duì)正負(fù)波形對(duì)稱的干擾信號(hào),抑制效果更好。雙積分型的A/D轉(zhuǎn)換器電路簡(jiǎn)單,抗干擾能力強(qiáng),精度高,這是突出的優(yōu)點(diǎn)。但轉(zhuǎn)換速度比較慢,常用的A/D轉(zhuǎn)換芯片的轉(zhuǎn)換時(shí)間為毫秒級(jí)。例如12位的積分型A/D芯片ADCETl2BC,其轉(zhuǎn)換時(shí)間為lms。因此適用于模擬信號(hào)變化緩慢,采樣速率要求較低,而對(duì)精度要求較高,或現(xiàn)場(chǎng)干擾較嚴(yán)重的場(chǎng)合。例如在數(shù)字電壓表中常被采用。逐次逼近型的A/D轉(zhuǎn)換器逐次逼近型(也稱逐位比較式)的A/D轉(zhuǎn)換器,應(yīng)用比積分型更為廣泛,其原理框圖如圖5-1所示,主要由逐次逼近寄存器SAR、D/A轉(zhuǎn)換器、比較器以及時(shí)序和控制邏輯等部分組成。它的實(shí)質(zhì)是逐次把設(shè)定的SAR寄存器中的數(shù)字量經(jīng)D/A轉(zhuǎn)換后得到電壓Vc與待轉(zhuǎn)換模擬電壓V。進(jìn)行比較。比較時(shí),先從SAR的最高位開始,逐次確定各位的數(shù)碼應(yīng)是“1”還是“0”,其工作過(guò)程如下:轉(zhuǎn)換前,先將SAR寄存器各位清零。轉(zhuǎn)換開始時(shí),控制邏輯電路先設(shè)定SAR寄存器的最高位為“1”,其余位為“0”,此試探值經(jīng)D/A轉(zhuǎn)換成電壓Vc,然后將Vc與模擬輸入電壓Vx比較。如果Vx≥Vc,說(shuō)明SAR最高位的“1”應(yīng)予保留;如果Vx<Vc,說(shuō)明SAR該位應(yīng)予清零。然后再對(duì)SAR寄存器的次高位置“1”,依上述方法進(jìn)行D/A轉(zhuǎn)換和比較。如此重復(fù)上述過(guò)程,直至確定SAR寄存器的最低位為止。過(guò)程結(jié)束后,狀態(tài)線改變狀態(tài),表明已完成一次轉(zhuǎn)換。最后,逐次逼近寄存器SAR中的內(nèi)容就是與輸入模擬量V相對(duì)應(yīng)的二進(jìn)制數(shù)字量。顯然A/D轉(zhuǎn)換器的位數(shù)N決定于SAR的位數(shù)和D/A的位數(shù)。圖(b)表示四位A/D轉(zhuǎn)換器的逐次逼近過(guò)程。轉(zhuǎn)換結(jié)果能否準(zhǔn)確逼近模擬信號(hào),主要取決于SAR和D/A的位數(shù)。位數(shù)越多,越能準(zhǔn)確逼近模擬量,但轉(zhuǎn)換所需的時(shí)間也越長(zhǎng)。逐次逼近式的A/D轉(zhuǎn)換器的主要特點(diǎn)是:轉(zhuǎn)換速度較快,在1—100/μs以內(nèi),分辨率可以達(dá)18位,特別適用于工業(yè)控制系統(tǒng)。轉(zhuǎn)換時(shí)間固定,不隨輸入信號(hào)的變化而變化??垢蓴_能力相對(duì)積分型的差。例如,對(duì)模擬輸入信號(hào)采樣過(guò)程中,若在采樣時(shí)刻有一個(gè)干擾脈沖迭加在模擬信號(hào)上,則采樣時(shí),包括干擾信號(hào)在內(nèi),都被采樣和轉(zhuǎn)換為數(shù)字量,這就會(huì)造成較大的誤差,所以有必要采取適當(dāng)?shù)臑V波措施。圖5-1逐次逼近式A/D轉(zhuǎn)換器2.A/D轉(zhuǎn)換的重要指標(biāo)1、分辨率(Resolution)分辨率反映A/D轉(zhuǎn)換器對(duì)輸入微小變化響應(yīng)的能力,通常用數(shù)字輸出最低位(LSB)所對(duì)應(yīng)的模擬輸入的電平值表示。n位A/D能反應(yīng)1/2n滿量程的模擬輸入電平。由于分辨率直接與轉(zhuǎn)換器的位數(shù)有關(guān),所以一般也可簡(jiǎn)單地用數(shù)字量的位數(shù)來(lái)表示分辨率,即n位二進(jìn)制數(shù),最低位所具有的權(quán)值,就是它的分辨率。值得注意的是,分辨率與精度是兩個(gè)不同的概念,不要把兩者相混淆。即使分辨率很高,也可能由于溫度漂移、線性度等原因,而使其精度不夠高。2、精度(Accuracy)精度有絕對(duì)精度(AbsoluteAccuracy)和相對(duì)精度(RelativeAccuracy)兩種表示方法。絕對(duì)誤差:在一個(gè)轉(zhuǎn)換器中,對(duì)應(yīng)于一個(gè)數(shù)字量的實(shí)際模擬輸入電壓和理想的模擬輸入電壓之差并非是一個(gè)常數(shù)。我們把它們之間的差的最大值,定義為“絕對(duì)誤差”。通常以數(shù)字量的最小有效位(LSB)的分?jǐn)?shù)值來(lái)表示絕對(duì)誤差,例如:±1LSB等。絕對(duì)誤差包括量化誤差和其它所有誤差。相對(duì)誤差是指整個(gè)轉(zhuǎn)換范圍內(nèi),任一數(shù)字量所對(duì)應(yīng)的模擬輸入量的實(shí)際值與理論值之差,用模擬電壓滿量程的百分比表示。例如,滿量程為10V,10位A/D芯片,若其絕對(duì)精度為±1/2LSB,則其最小有效位的量化單位:,其絕對(duì)精度為=,其相對(duì)精度為0.048%。3、轉(zhuǎn)換時(shí)間(ConversionTime)轉(zhuǎn)換時(shí)間是指完成一次A/D轉(zhuǎn)換所需的時(shí)間,即由發(fā)出啟動(dòng)轉(zhuǎn)換命令信號(hào)到轉(zhuǎn)換結(jié)束信號(hào)開始有效的時(shí)間間隔。轉(zhuǎn)換時(shí)間的倒數(shù)稱為轉(zhuǎn)換速率。例如AD570的轉(zhuǎn)換時(shí)間為25us,其轉(zhuǎn)換速率為40KHz。4、電源靈敏度(powersupplysensitivity)電源靈敏度是指A/D轉(zhuǎn)換芯片的供電電源的電壓發(fā)生變化時(shí),產(chǎn)生的轉(zhuǎn)換誤差。一般用電源電壓變化1%時(shí)相當(dāng)?shù)哪M量變化的百分?jǐn)?shù)來(lái)表示。5、量程量程是指所能轉(zhuǎn)換的模擬輸入電壓范圍,分單極性、雙極性兩種類型。例如,單極性量程為0~+5V,0~+10V,0~+20V;雙極性量程為-5~+5V,-10~+10V。6、輸出邏輯電平多數(shù)A/D轉(zhuǎn)換器的輸出邏輯電平與TTL電平兼容。在考慮數(shù)字量輸出與微處理的數(shù)據(jù)總線接口時(shí),應(yīng)注意是否要三態(tài)邏輯輸出,是否要對(duì)數(shù)據(jù)進(jìn)行鎖存等。7、工作溫度范圍由于溫度會(huì)對(duì)比較器、運(yùn)算放大器、電阻網(wǎng)絡(luò)等產(chǎn)生影響,故只在一定的溫度范圍內(nèi)才能保證額定精度指標(biāo)。一般A/D轉(zhuǎn)換器的工作溫度范圍為(0~700C),軍用品的工作溫度范圍為(-55~+1250C)ARM自帶的十位A/D轉(zhuǎn)換器ARMS3C2410芯片自帶一個(gè)8路10位A/D轉(zhuǎn)換器,并且支持觸摸屏功能。ARM2410開發(fā)板只用作3路A/D轉(zhuǎn)換器,其最大轉(zhuǎn)換率為500K,非線性度為正負(fù)1.5位,其轉(zhuǎn)換時(shí)間可以通過(guò)下式計(jì)算:如果系統(tǒng)時(shí)鐘為50MHz,比例值為49,則為A/D轉(zhuǎn)換器頻率=50MHz/(49+1)=1MHz轉(zhuǎn)換時(shí)間=1/(1MHz/5cycles)=1/200kHz(相當(dāng)于5us)=5us表5-1采樣控制寄存器的設(shè)置寄存器地址讀/寫描述復(fù)位值A(chǔ)DCCON0x58000000R/WADC控制寄存器0x3FC4表5-2采樣控制寄存器的位描述ADCCON位描述初始設(shè)置ECFLG[15]Endofconversionflag(readonly).0=A/Dconversioninprocess1=EndofA/Dconversion0PRSCEN[14]A/Dconverterprescalerenable.0=Disable1=Enable0PRSCVL[13:6]A/Dconverterprescalervalue.Datavalue:1~255Notethatdivisionfactoris(N+1)whentheprescalervalueisN.0xFFSEL_MUX[5:3]Analoginputchannelselect.000=AIN0001=AIN1010=AIN2011=AIN3100=AIN4101=AIN5110=AIN6111=AIN7(XP)0STDBM[2]Standbymodeselect.0=Normaloperationmode1=Standbymode1READ_START[1]A/Dconversionstartbyread.0=Disablestartbyreadoperation1=Enablestartbyreadoperation0ENABLE_START[0]A/Dconversionstartsbysettingthisbit.IfREAD_STARTisenabled,thisvalueisnotvalid.0=Nooperation1=A/Dconversionstartsandthisbitisclearedafterthestart-up.0該寄存器的0位是轉(zhuǎn)換使能位,寫1表示轉(zhuǎn)換開始。1位是讀操作使能轉(zhuǎn)換,寫1表示轉(zhuǎn)換在讀操作時(shí)開始。3、4、5位是通道號(hào)。[13:6]位為AD轉(zhuǎn)換比例因子。14位為比例因子有效位,15位為轉(zhuǎn)換標(biāo)志位(只讀)。表5-3寄存器地址讀/寫描述復(fù)位值A(chǔ)DCDAT00x5800000CRADC轉(zhuǎn)換數(shù)據(jù)寄存器-ADCDAT0:轉(zhuǎn)換結(jié)果數(shù)據(jù)寄存器。該寄存器的十位表示轉(zhuǎn)換后的結(jié)果,全為1時(shí)為滿量程伏。A/D轉(zhuǎn)換器在擴(kuò)展板的連接A/D轉(zhuǎn)換器在擴(kuò)展板的接法如圖5-2所示,前三路通過(guò)電位器接到電源上。圖5-2A/D轉(zhuǎn)換器在擴(kuò)展板上的接法程序分析1.關(guān)鍵代碼分析由于編譯開發(fā)板內(nèi)核時(shí)直接把a(bǔ)d驅(qū)動(dòng)加入到內(nèi)核里面,對(duì)用戶的只是下面的一個(gè)文件結(jié)構(gòu)。在用戶程序里只需要用到open、read、write、release等內(nèi)核函數(shù)即可。下面我們對(duì)驅(qū)動(dòng)部分重要函數(shù)進(jìn)行說(shuō)明。ad驅(qū)動(dòng)在內(nèi)核里的代碼我們放到了本次實(shí)驗(yàn)的src文件下,s3c里為arm2410頭文件s3c初始化ADC的部分。所有代碼也可以到內(nèi)核里面去閱讀。關(guān)于驅(qū)動(dòng)知識(shí)的基本介紹請(qǐng)見第4章第一小節(jié),本節(jié)只作為應(yīng)用實(shí)驗(yàn)的簡(jiǎn)單例子。的代碼如下:實(shí)驗(yàn)步驟1.閱讀理解源碼進(jìn)入/arm2410s/exp/basic/04_ad目錄,使用vi編輯器或其他編輯器閱讀理解源代碼。2.編譯應(yīng)用程序運(yùn)行make產(chǎn)生ad可執(zhí)行文件[root@zxt/]#cd/arm2410s/exp/basic/04_ad/[root@zxt04_ad]#makearmv4l-unknown-linux-gcc-c-omain.omain.carmv4l-unknown-linux-gcc-o../bin/admain.o-lpthreadarmv4l-unknown-linux-gcc-oadmain.o-lpthread[root@zxt04_ad]#lsadhardware.hmain.oMakefile.baks3c2410-adc.hbinmain.cMakefilesrc3.下載調(diào)試換到minicom終端窗口,使用NFSmount開發(fā)主機(jī)的/arm2410s到/host目錄。[root@zxtroot]#minicom[/mnt/yaffs]mount-tnfs-onolock6:/arm2410s/host[/mnt/yaffs]cd/host/exp/basic/04_ad/[/host/exp/basic/04_ad]./adPressEnterkeyexit!a0=0.0032a1=3.2968a2=3.2968我們可以通過(guò)調(diào)節(jié)開發(fā)板上的三個(gè)黃色的電位器,來(lái)查看a0、a1、a2的變化。思考題1.逐次逼近型的A/D轉(zhuǎn)換器原理是什么?2.A/D轉(zhuǎn)換的重要指標(biāo)包括哪些?3.ARM的A/D功能的相關(guān)寄存器有哪幾個(gè),對(duì)應(yīng)的地址是什么?4.如何啟動(dòng)ARM開始轉(zhuǎn)換A/D,有幾種方式?轉(zhuǎn)換開始時(shí)ARM是如何知道轉(zhuǎn)換哪路通道的?如何判斷轉(zhuǎn)換結(jié)束?

實(shí)驗(yàn)六Qtopia在2410-S上的移植實(shí)驗(yàn)?zāi)康?.將Qtopia移植到2410-S板所使用的linux-上。2.了解如何在pc機(jī)(x86)上為xscale(arm)編譯、移植應(yīng)用程序。實(shí)驗(yàn)內(nèi)容1.了解Qtopia在2410-s上的移植過(guò)程。2.交叉編譯Qtopia所需要的資源文件和環(huán)境,交叉編譯Qtopia源代碼。3.下載生成的Qtopia系統(tǒng)到開發(fā)板。4.在Linux下編譯和使用Qtopia平臺(tái)。5.在Qtopia平臺(tái)上發(fā)布一個(gè)簡(jiǎn)單程序。預(yù)備知識(shí)1.有C語(yǔ)言基礎(chǔ)。2.會(huì)使用LINUX下常用的編輯器。3.掌握Makefile的編寫和使用。4.了解Linux下的編譯程序與交叉編譯的過(guò)程。實(shí)驗(yàn)設(shè)備及工具硬件:UP-NETARM2410-S嵌入式開發(fā)板、PC機(jī)Pentumn500以上,硬盤10G以上軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+MINICOM+ARM-LINUX開發(fā)環(huán)境實(shí)驗(yàn)原理Qtopia概述Qtopia是Trolltech面向嵌入式Linux的綜合應(yīng)用平臺(tái)。Qtopia包含完整的應(yīng)用層、靈活的用戶界面、窗口操作系統(tǒng)、應(yīng)用程序啟動(dòng)程序以及開發(fā)框架。Qtopia的組件:表6-1窗口操作系統(tǒng)游戲和多媒體工作輔助應(yīng)用程序同步框架PIM應(yīng)用程序Internet應(yīng)用程序開發(fā)環(huán)境輸入法Java集成本地化支持個(gè)性化選項(xiàng)無(wú)線支持目前在sitsnag平臺(tái)上使用的qtopia版本為free,是面向PDA的一個(gè)版本,當(dāng)然它也有面向的版本。QtopiaPDA版是一個(gè)強(qiáng)大的平臺(tái),專用于基于Linux操作系統(tǒng)的PDA(個(gè)人數(shù)字助理設(shè)備)。許多PDA都已采用了Qtopia,QtopiaPDA版已經(jīng)成了事實(shí)上的Linux標(biāo)準(zhǔn),它代表了可行的“第三種”PDA設(shè)計(jì)方案。QtopiaPDA版具有可定制的用戶界面,支持更大的屏幕尺寸以及橫向和縱向布局。實(shí)驗(yàn)步驟1.實(shí)驗(yàn)可以分為以下幾個(gè)步驟進(jìn)行:(1)在裝有l(wèi)inux的pc機(jī)上安裝交叉編譯環(huán)境。安裝光盤時(shí)所安裝的編譯器版本較低,不能正常編譯QT程序,所以編譯前需要安裝Qt/tools/arm-linux-gcc-.tar.bz2,并在/root/.bash_profile中修改編譯器搜索路徑。(2)編譯庫(kù)文件:(3)編譯qt-x11-:(4)編譯安裝qt-embedded-(5)編譯安裝QTOPIA(6)將需要拷貝到開發(fā)板上的文件整理到一個(gè)單獨(dú)的文件夾里面在本次實(shí)驗(yàn)中,buildqtopia.sh文件已為大家做好了以上幾步,我們可以直接運(yùn)行該文件進(jìn)圖6-1Qtopia層次結(jié)構(gòu)行編譯。大家可以分析buildqtopia.sh內(nèi)容,掌握編譯的步驟。2.編譯步驟:cdsrc./buildqtopia.sh當(dāng)編譯完成后,在src/qtopia-free-/image/opt/Qtopia下是編譯完成的Qtopia桌面環(huán)境。說(shuō)明:在編譯完成后,src下的各個(gè)目錄對(duì)應(yīng)如下軟件包:e2fsprogs-libs-1.37ext2文件系統(tǒng)工具包,Qtopia用到了其中的libuuide2fs-installext2工具包編譯結(jié)果jpeg-6bjpeg解碼庫(kù)jpeg-installjpeg編譯結(jié)果tslib觸摸屏工具包tslib-install觸摸屏工具包編譯結(jié)果tmake-1.13tmake工具,編譯Qtopia時(shí)需要使用qt-2.Qt/X11-2.3.2及編譯結(jié)果,編譯Qtopiaqt-x11-free-3.Qt/X11-3.3.4及編譯結(jié)果,編譯Qtopiaqt-2.Qt/Embedded2.3.10qtopia-free-Qtopia2.1.1及編譯結(jié)果3.安裝步驟:Qtopiacdqtopia-free-/image/opt/tarcvjf/root/share/qtopia-install.tar.bz2Qtopia將/temp/qtopia-install.tar.bz2下載到目標(biāo)機(jī),并解壓縮到/mnt/yaffs下。相關(guān)文件將src/qtopia.sh下載到目標(biāo)機(jī)的/use/bin目錄下.將src/e2fs-install/lib/libuuid.so*下載到目標(biāo)機(jī)的/lib目錄下將src/jpeg-install/lib/libjpeg.so*下載到目標(biāo)機(jī)的/lib目錄下目標(biāo)機(jī)上的處理在目標(biāo)機(jī)上執(zhí)行:cd/usrln-s/mnt/yaffs/Qtopiaqpe4運(yùn)行:插上USB鼠標(biāo),在目標(biāo)機(jī)上執(zhí)行qtopia.sh即可運(yùn)行qtopia桌面環(huán)境。注意:(1)如果運(yùn)行./qtopia.sh后提示找不到庫(kù)文件,請(qǐng)從編譯器目錄下查找,并拷貝到開發(fā)板/mnt/yaffs/lib中。openframebufferdevice/dev/fb0可以執(zhí)行:ln–sf/dev/fb/0/dev/fb0(2)如果提示:Qt/Embeddeddatadirectoryisnotownedbyuser0:/tmp/qtembedded-0運(yùn)行:chownroot:root/tmp/qtembedded-0(3)如果提示:Qtopiadatadirectoryisnotownedbyuser0:/tmp/qtopia-0運(yùn)行:chownroot:root/tmp/qtopia-0思考題1.請(qǐng)思考Qtopia的framebuffer的機(jī)制。

實(shí)驗(yàn)七無(wú)線通訊實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康?.了解掌握GPS、GPRS、紅外、藍(lán)牙無(wú)線通訊原理。2.學(xué)習(xí)Linux下對(duì)GPS、GPRS、紅外、藍(lán)牙通訊信息采集的編程方法。3.掌握Linux嵌入式開發(fā)平臺(tái)上藍(lán)牙設(shè)備的使用等。實(shí)驗(yàn)內(nèi)容1.學(xué)習(xí)GPS、GPRS、紅外、藍(lán)牙設(shè)備通訊原理,了解GPS、GPRS、藍(lán)牙、紅外通訊的結(jié)構(gòu)。在PC機(jī)與開發(fā)板之間實(shí)現(xiàn)GPS、GPRS、藍(lán)牙、紅外無(wú)線通訊。2.熟練ARM系統(tǒng)硬件的UART使用方法。Linux下配置紅外設(shè)備實(shí)現(xiàn)紅外模塊和pc機(jī)端進(jìn)行通信,并且可以收發(fā)文件。3.掌握在Linux下常用編輯器的使用。掌握Makefile的編寫和使用。掌握Linux下的程序編譯與交叉編譯過(guò)程4.通過(guò)軟件來(lái)設(shè)置模塊的波特率、輸出語(yǔ)句等內(nèi)容。編程實(shí)現(xiàn)對(duì)通訊信息的采集方法,將接收到的數(shù)據(jù)進(jìn)行語(yǔ)義的解析,并在LCD上顯示。學(xué)習(xí)Linux數(shù)據(jù)的解析過(guò)程。預(yù)備知識(shí)1.熟練使用C語(yǔ)言。2.掌握在LINUX下常用編輯器的使用。3.了解GPS通訊原理。實(shí)驗(yàn)設(shè)備及工具硬件:UP-NETARM2410-S嵌入式實(shí)驗(yàn)儀、PC機(jī)Pentumn500以上,硬盤10G以上。軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+MINICOM+ARMLINUX開發(fā)環(huán)境實(shí)驗(yàn)原理1.SIM100-EGPRS模塊硬件ARM嵌入式開發(fā)平臺(tái)的GPRS擴(kuò)展板采用的GPRS模塊型號(hào)為SIM100-E,是SIMCOM公司推出的GSM/GPRS雙頻模塊,主要為語(yǔ)音傳輸、短消息和數(shù)據(jù)業(yè)務(wù)提供無(wú)線接口。SIM100-E集成了完整的射頻電路和GSM的基帶處理器,適合于開發(fā)一些GSM/GPRS的無(wú)線應(yīng)用產(chǎn)品,如移動(dòng)、PCMCIA無(wú)線MODEM卡、無(wú)線POS機(jī)、無(wú)線抄表系統(tǒng)以及無(wú)線數(shù)據(jù)傳輸業(yè)務(wù),應(yīng)用范圍十分廣泛。SIM100-E模塊的詳細(xì)技術(shù)指標(biāo)請(qǐng)參閱擴(kuò)展板說(shuō)明文檔。SIM100-E模塊為用戶提供了功能完備的系統(tǒng)接口。60Pin系統(tǒng)連接器是SIM100-E模塊與應(yīng)用系統(tǒng)的連接接口,主要提供外部電源、RS-232串口、SIM卡接口和音頻接口。SIM100-E模塊使用鋰電池、鎳氫電池或者其他外部直流電源供電,電源電壓范圍為:,電源應(yīng)該具有至少2A的峰值電流輸出能力。注意SIM100-E的下列引腳:VANA為模擬輸出電壓,可提供的電壓和50mA的電流輸出,用于給音頻電路提供電源。VEXT為數(shù)字輸出電壓,可提供的電壓和50mA的電流輸出。VRTC為時(shí)鐘供電輸入,當(dāng)模塊斷電后為內(nèi)部RTC提供電源,可接一個(gè)2.0V的鈕扣充電電池。本擴(kuò)展板需要單獨(dú)的5V2A的直流電源供電,經(jīng)過(guò)芯片MIC29302穩(wěn)壓后得到電壓供給GPRS模塊使用。SIM100-E提供標(biāo)準(zhǔn)的RS-232串行接口,用戶可以通過(guò)串行口使用AT命令完成對(duì)模塊的操作。串行口支持以下通信速率:300,1200,2400,4800,9600,19200,38400,57600,115200(起始默認(rèn))當(dāng)模塊上電啟動(dòng)并報(bào)出RDY后,用戶才可以和模塊進(jìn)行通信,用戶可以首先使用模塊默認(rèn)速率115200與模塊通信,并可通過(guò)AT+IPR=<rate>命令自由切換至其它通信速率。在應(yīng)用設(shè)計(jì)中,當(dāng)MCU需要通過(guò)串口與模塊進(jìn)行通訊時(shí),可以只用三個(gè)引腳:TXD,RXD和GND。其他引腳懸空,建議RTS和DTR置低。本擴(kuò)展板上采用MAX3232芯片完成GPRS模塊的TTL電平到RS232電平的轉(zhuǎn)換,以能和ARM開發(fā)平臺(tái)的RS232串口連接。SIM100-E模塊提供了完整的音頻接口,應(yīng)用設(shè)計(jì)只需增加少量外圍輔助元器件,主要是為MIC提供工作電壓和射頻旁路。音頻分為主通道和輔助通道兩部分??梢酝ㄟ^(guò)AT+CHFA命令切換主副音頻通道。音頻設(shè)計(jì)應(yīng)該盡量遠(yuǎn)離模塊的射頻部分,以降低射頻對(duì)音頻的干擾。本擴(kuò)展板硬件支持兩個(gè)語(yǔ)音通道,主

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論