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

正文內(nèi)容

小型移動(dòng)機(jī)器人遠(yuǎn)程控制系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)-閱讀頁

2024-08-15 13:52本頁面
  

【正文】 一段代碼,主要用于完成由硬件啟動(dòng)到操作系統(tǒng)啟動(dòng)的過渡,從而為操作系統(tǒng)提供基本的運(yùn)行環(huán)境,如初始化CPU、 堆棧、存儲器系統(tǒng)等。由于Bootloader和CPU及電路板的配置情況有關(guān),因此不可能有通用的Bootloader ,開發(fā)時(shí)需要用戶根據(jù)具體情況進(jìn)行移植。其中,uboot是souceforge網(wǎng)站上的一個(gè)開放源代碼的項(xiàng)目[40]。uboot 最初是由Denx開發(fā)的PPCboot發(fā)展而來的,它對PowerPC系列處理器的支持最完善,對Linux操作系統(tǒng)的支持最好。本系統(tǒng)使用的引導(dǎo)裝載程序也是基于uboot來實(shí)現(xiàn)。依賴于CPU體系結(jié)構(gòu)的代碼(如設(shè)備初始化代碼等)都放在stage1,用匯編語言來實(shí)現(xiàn),而stage2則用C語言來實(shí)現(xiàn),這樣可以實(shí)現(xiàn)復(fù)雜的功能,而且有更好的可讀性和移植性。一個(gè)可執(zhí)行的Image必須有一個(gè)入口點(diǎn),并且只能有一個(gè)全局入口,通常這個(gè)入口放在ROM(FLASH)的0x00000000地址處,因此,必須通知編譯器以使其知道這個(gè)入口,該工作可通過修改連接器腳本來完成。(3) 設(shè)置CPU的速度、時(shí)鐘頻率及中斷控制寄存器。(5) 將ROM中的程序復(fù)制到RAM中。(7) 轉(zhuǎn)到RAM中執(zhí)行,該工作可使用指令LDR PC來完成。(2) 初始化FLASH設(shè)備。(4) 如果目標(biāo)系統(tǒng)擁有NAND設(shè)備,則初始化NAND設(shè)備。(6) 初始化相關(guān)網(wǎng)絡(luò)設(shè)備,填寫IP、MAC地址等。 uboot的移植 與移植相關(guān)的文件和目錄uboot源代碼可以在。在arm920t子目錄中包括有makefile、以及s3c24x0、at91rm9200等文件夾。(2) board開發(fā)板的相關(guān)文件,其中的子目錄都是以uboot已經(jīng)支持的開發(fā)板為名,比如有子目錄smdk24ep731evb4510等。其中,;;;。其中,;。主要的移植步驟如下:1. 在board目錄下新建myboard目錄,并將board/smdk2410/目錄下的文件全部復(fù)制到board/myboard目錄下。2. 。4. 在/include/configs/,修改“define CONFIG_SMDK2410 1”為“define CONFIG_myboard 1”;設(shè)置FLASH和SDRAM的大小、起始地址等。6. 實(shí)現(xiàn)對FLASH的支持,需要修改/board/myboard/、以及/mon/。在對該芯片的支持中,必須在底層完成對FLASH的擦除以及寫處理函數(shù)供上層調(diào)用,具體實(shí)現(xiàn)與存儲芯片的一套機(jī)制相關(guān)。8. 執(zhí)行make distclean;make myboard_config;make。圖33 uboot啟動(dòng)信息 Linux內(nèi)核的引導(dǎo)當(dāng)uboot在開發(fā)板上的移植完成以后,剩下就是要實(shí)現(xiàn)對Linux內(nèi)核的引導(dǎo)。具體有以下幾個(gè)步驟:1. 從 Flash 上拷貝內(nèi)核和文件系統(tǒng)。2. 設(shè)置內(nèi)核的啟動(dòng)參數(shù)。啟動(dòng)參數(shù)標(biāo)記列表以標(biāo)記 ATAG_CORE 開始,以標(biāo)記 ATAG_NONE 結(jié)束。數(shù)據(jù)結(jié)構(gòu) tag 和 tag_header 定義在 Linux 內(nèi)核源碼的include/asm/ 頭文件中。Linux 內(nèi)核在啟動(dòng)時(shí)可以用命令行參數(shù)的形式來接收信息,利用這一點(diǎn)我們可以向內(nèi)核提供那些內(nèi)核不能自己檢測的硬件參數(shù)信息,或者重載(override)內(nèi)核自己檢測到的信息。4. 調(diào)用內(nèi)核。但在執(zhí)行內(nèi)核調(diào)用前需要做好以下準(zhǔn)備:CPU 寄存器的R0=0,R1=193(機(jī)器類型的ID,可以參見 linux/arch/arm/tools/machtypes),R2=0x30000100(啟動(dòng)參數(shù)標(biāo)記列表在 RAM 中起始基地址);CPU要工作在管理模式,關(guān)閉中斷和MMU;關(guān)閉數(shù)據(jù)Cache和指令Cache。對于任何平臺,都必須包含以下幾個(gè)目錄:(1) /arch包含了所有硬件結(jié)構(gòu)特定的內(nèi)核代碼。boot:包括啟動(dòng)內(nèi)核所使用的部分或全部平臺特有代碼;kernel:存放支持體系結(jié)構(gòu)特有的(如信號處理和SMP)特征的實(shí)現(xiàn);lib:存放高速體系結(jié)構(gòu)特有的(如strlen和memcpy)公用函數(shù);mm:存放體系結(jié)構(gòu)特有的內(nèi)存管理程序的實(shí)現(xiàn)。(3) /fs包含了所有的文件系統(tǒng)的代碼。該目錄也包含了不同平臺需要的庫文件。(5) /init包含了內(nèi)核的初始化代碼,內(nèi)核從此處開始工作,但不是系統(tǒng)的引導(dǎo)代碼。(6) /ipc包含了進(jìn)程間通信代碼。(8) /mm包含了所有內(nèi)存管理代碼。在移植過程中,定時(shí)器、中斷、CACHE管理、MMU等和硬件密切相關(guān)的地方都是要相關(guān)平臺的底層代碼支持的,要特別注意。ARMLinux已被成功運(yùn)行在超過500種的機(jī)器平臺上,包括網(wǎng)絡(luò)計(jì)算設(shè)備、手持設(shè)備和各種評估板等。由于本文在移植時(shí)就是基于ARMLinux來進(jìn)行的。對每一個(gè)配置來說,內(nèi)核生成以后包括4個(gè)文件:沒有壓縮的內(nèi)核鏡像(zImage或bzImage),壓縮的內(nèi)核鏡像(vmlinux),內(nèi)核符號映射文件()以及配置文件(config)。圖34 Linux系統(tǒng)啟動(dòng)信息 無線網(wǎng)卡與攝像頭設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序在Linux內(nèi)核中扮演著特殊的角色,它們是一個(gè)個(gè)獨(dú)立的“黑盒子”,使某個(gè)特定硬件響應(yīng)一個(gè)定義良好的內(nèi)部編程接口[43]。用戶的操作通過一組標(biāo)準(zhǔn)化的調(diào)用執(zhí)行,而這些調(diào)用獨(dú)立于特定的驅(qū)動(dòng)程序。這個(gè)編程接口能夠使得驅(qū)動(dòng)程序獨(dú)立于內(nèi)核的其它部分而建立,必要的情況下可在運(yùn)行時(shí)“插入”內(nèi)核。Linux把設(shè)備分為三大類,即字符設(shè)備(char device)、塊設(shè)備(block device)和網(wǎng)絡(luò)設(shè)備(network device)。塊設(shè)備是主要針對磁盤等慢速設(shè)備的,以免耗費(fèi)過多地CPU時(shí)間來等待。USB設(shè)備驅(qū)動(dòng)程序完全符合通用設(shè)備驅(qū)動(dòng)的準(zhǔn)則,不同的是內(nèi)核提供了一些特別的API函數(shù),方便驅(qū)動(dòng)注冊、銷毀自己,例如usb_resister( )和usb_deresister( );2.4版的內(nèi)核還提供了對于hotplug的支持。(2) USB驅(qū)動(dòng)(USBD):是整個(gè)USB主機(jī)驅(qū)動(dòng)的核心,其主要實(shí)現(xiàn)的功能有:USB總線管理、USB總線設(shè)備、USB總線帶寬管理、USB的4種類型數(shù)據(jù)傳輸、USB HUB驅(qū)動(dòng)、為USB設(shè)備類驅(qū)動(dòng)提供相關(guān)接口、提供應(yīng)用程序訪問的USB系統(tǒng)的文件接口等。應(yīng)用程序首先通過文件系統(tǒng)(POSIX)接口來訪問相應(yīng)的USB設(shè)備類驅(qū)動(dòng)程序和USBD;USB設(shè)備類驅(qū)動(dòng)程序則通過USBD提供的相關(guān)接口將數(shù)據(jù)請求包傳遞給USBD;USBD通過HCD提供的接口,進(jìn)一步將數(shù)據(jù)包傳遞給HCD;HCD最終將數(shù)據(jù)發(fā)送到USB總線上。統(tǒng)一的URB(Universal Request Block)結(jié)構(gòu)為usb主機(jī)驅(qū)動(dòng)程序的開發(fā)帶來了很大方便。在實(shí)現(xiàn)其驅(qū)動(dòng)的過程中,筆者充分利用了開源社區(qū)的資源,體現(xiàn)開源Linux的優(yōu)勢。 2. linuxwlanng[45]linuxwlanng是專門為解決嵌入式Linux系統(tǒng)下無線網(wǎng)卡驅(qū)動(dòng)的問題而成立的一個(gè)開源項(xiàng)目。本系統(tǒng)采用的是第二種方法,選用的USB無線網(wǎng)卡是NETGEAR公司提供的基于Prism3芯片的MA111。在編譯的過程中,會(huì)有錯(cuò)誤出現(xiàn),部分錯(cuò)誤和使用的編譯器有關(guān),也有些錯(cuò)誤是代碼編寫者的筆誤造成,根據(jù)編譯器的提示,進(jìn)行簡單的修改可以將錯(cuò)誤消除;(3) 編譯通過后還需將驅(qū)動(dòng)加載到內(nèi)核中,并進(jìn)行一些簡單的配置,才能讓無線網(wǎng)卡真正在Linux系統(tǒng)下運(yùn)行起來。2) 在主控制板的控制臺中執(zhí)行“insmod /application/”和“insmod /application/”來動(dòng)態(tài)加載驅(qū)動(dòng)程序模塊。4)執(zhí)行“wlanctlng wlan0 lnxreq_autojoin ssid=sensorrobot authtype=opensystem” 。5) 執(zhí)行“ifconfig wlan0 ”。至此,無線網(wǎng)卡就可以工作了。圖35是系統(tǒng)啟動(dòng)后,無線網(wǎng)卡開始工作的畫面。同時(shí)因其靈活、方便的特性,易于被集成到嵌入式系統(tǒng)中。在目前的Linux核心中,視頻部分的標(biāo)準(zhǔn)是Video for Linux(簡稱V4L)。目前的V4L涵蓋了視、音頻流捕捉及處理等內(nèi)容,USB攝像頭也屬于它支持的范疇。在開源社區(qū)中,有一個(gè)專門針對在Linux系統(tǒng)下USB攝像頭驅(qū)動(dòng)的項(xiàng)目 spca5xx USB Camera[46],該項(xiàng)目目前已經(jīng)支持很多芯片,包括在市場上應(yīng)用最廣泛的采用中星微公司生產(chǎn)的zc301芯片的攝像頭。本系統(tǒng)使用的即是基于中星微Zc301P芯片的普通USB攝像頭。執(zhí)行“patch p1 ”。這些被拒絕的修改會(huì)自動(dòng)記載到相應(yīng)的“.rej”文件中。2) 重新配置和編譯內(nèi)核。3) ,。圖36 攝像頭驅(qū)動(dòng)加載信息 本章小結(jié)本章著重介紹了在構(gòu)建機(jī)器人控制系統(tǒng)系統(tǒng)平臺的過程中,在軟件方面的幾點(diǎn)工作,包括引導(dǎo)裝載程序uboot的移植、Linux內(nèi)核的移植、USB無線網(wǎng)卡驅(qū)動(dòng)的移植和USB攝像頭驅(qū)動(dòng)的移植。70第4章 機(jī)器人運(yùn)動(dòng)控制和傳感信息采集機(jī)器人運(yùn)動(dòng)控制與傳感信息采集主要完成對移動(dòng)機(jī)器人各個(gè)電機(jī)的控制及配備的各式傳感器信息的獲取,如攝像頭、超聲波傳感器、電子羅盤和光敏傳感器等。為適應(yīng)小型移動(dòng)機(jī)器人的特殊要求,本系統(tǒng)在實(shí)現(xiàn)過程中,將一部分傳感器信息的采集和機(jī)器人運(yùn)動(dòng)控制合成在一塊控制板上,這樣不但可以滿足一般的運(yùn)動(dòng)控制和傳感信息采集,還可以將一些簡單的行為控制(如轉(zhuǎn)向、尋光等)放到該塊控制板上完成,提高了機(jī)器人控制的靈活性,減少了對上層控制器資源的占用。 機(jī)器人運(yùn)動(dòng)控制與內(nèi)部傳感器信息采集 與上位機(jī)命令接口的定義與實(shí)現(xiàn)機(jī)器人運(yùn)動(dòng)控制與內(nèi)部傳感器信息采集單元與上位機(jī)(主控制板)間,采用串口進(jìn)行通訊??紤]到PIC18F8520串口可以單字節(jié)收發(fā)的特性,為減少不必要的數(shù)據(jù)傳輸,命令采用兩級的方式定義,第一級命令只有一個(gè)字節(jié),如表41所示:表41 一級命令說明cmd高級控制0x61繼續(xù)運(yùn)行0x62暫停運(yùn)行0x63狀態(tài)信息查詢0x64 目前,只有高級控制這個(gè)一級命令擁有二級的命令,二級命令有3個(gè)字節(jié),如表42所示:表42 二級命令說明cmd_ucmd_hcmd_l啟動(dòng)電機(jī)0x01通道號速度值前行0x03速度值持續(xù)時(shí)間(為0則一直前行)左轉(zhuǎn)指定角度0x04無轉(zhuǎn)動(dòng)角度值右轉(zhuǎn)指定角度0x05無轉(zhuǎn)動(dòng)角度值后退0x06速度值持續(xù)時(shí)間(為0則一直后退)轉(zhuǎn)動(dòng)到指定方位0x08角度值(高位)角度值(低位)尋光0x0a無無……………………PIC18F8520上的串口采用中斷方式接收數(shù)據(jù),接口命令的解析主要在串口中斷中進(jìn)行。 機(jī)器人運(yùn)動(dòng)控制的實(shí)現(xiàn)本系統(tǒng)選用的調(diào)速電機(jī)采用以20ms為周期的方波來驅(qū)動(dòng)。該功能的實(shí)現(xiàn)使用了一個(gè)定時(shí)器和8個(gè)普通I/O口,通過在一個(gè)周期內(nèi)分段輸出8個(gè)電機(jī)的控制信號來完成對各個(gè)電機(jī)的同步控制。當(dāng)上位機(jī)發(fā)出啟動(dòng)電機(jī)、前進(jìn)或轉(zhuǎn)向等命令時(shí),就會(huì)調(diào)用電機(jī)控制函數(shù)。在定時(shí)器3的中斷處理例程中,首先要清除定時(shí)器3的中斷標(biāo)志位,再判斷通道計(jì)數(shù)器speedbufpoint的值,若其小于8,則代表目前要進(jìn)行的是本周期內(nèi)某個(gè)通道波形的輸出;若其等于8,則代表輸出的是第8通道的波形,此時(shí)則需要定本周期剩余的時(shí)間值,輸出本周期的結(jié)束標(biāo)志;若其大于8,則表示本周期的所有波形已經(jīng)輸出完畢,需要開始進(jìn)行下一周期的波形輸出。speedbufpoint++結(jié) 束初 始 化設(shè)置通道和轉(zhuǎn)速度motorflag= =1?否是定時(shí)器參數(shù)設(shè)置結(jié) 束中斷標(biāo)志位清零speedbufpoint9=1?定時(shí)器中斷處理程序輸出第1段波形否準(zhǔn)備下一周期輸出第1段波形是speedbufpoint= =8=1?是否定本周期剩余時(shí)間輸出對應(yīng)段的波形圖41 電機(jī)控制流程圖 內(nèi)部傳感器信息采集這里所講的內(nèi)部傳感器是相對攝像頭和無線傳感網(wǎng)絡(luò)而言,專指前文所述的與機(jī)器人運(yùn)動(dòng)控制部分集成在一起的那些傳感器的信息采集,如電子羅盤、光敏傳感器、超聲波傳感器、碰撞開關(guān)等,共有13個(gè)傳感器接口。039。139。在具體實(shí)現(xiàn)過程中,采用了一個(gè)void sensor (unsigned char mand_h , unsigned char mand_l) 函數(shù)來進(jìn)行調(diào)度。該函數(shù)根據(jù)傳感器的類型來調(diào)用不同的傳感信息采集函數(shù),并將采集的數(shù)據(jù)保存到機(jī)器人的狀態(tài)信息緩沖區(qū)的相應(yīng)位置。在本系統(tǒng)中,將一部分的傳感器信息檢測與機(jī)器人運(yùn)動(dòng)控制集成在了一塊控制板上,使得該控制板可以不依賴于其它部件,來獨(dú)立完成一些簡單的行為,如右轉(zhuǎn)指定角度、避障和尋光等。if(turnangle0) { sensor(6,13)。 destangle=currentangle+turnangle。 currentangle =sensor_buf[13]。amp。 if(currentangle (destangle2)) { if(currentangle (destangle20)) //高速右轉(zhuǎn) { motor(2,170)。 } el
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1