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

正文內(nèi)容

畢業(yè)設(shè)計論文-基于arm的智能公交車載終端的設(shè)計-資料下載頁

2024-11-07 20:51本頁面

【導讀】近年來,隨著我國經(jīng)濟的快速發(fā)展,我國城市人口規(guī)模不斷擴大,汽車保有量也逐步增長。由此引發(fā)的城市交通問題越來越突出,如交通擁擠、交通堵塞、噪音污染、廢氣污染等,嚴重影響城市的可持續(xù)發(fā)展和居民的正常生活。大力發(fā)展城市公共交通勢在必行。智能公交系統(tǒng)是現(xiàn)代控制技術(shù)、定位技術(shù)和無線通信技術(shù)等多種技術(shù)的有機結(jié)合,它的建設(shè)可以改善公交公司的企業(yè)管理方式,提高公交系統(tǒng)的運營效率和服務(wù)水平,是旨在解決城市交通問題的一項根本性方案。本論文在研究國內(nèi)外智能公交現(xiàn)狀和現(xiàn)有GPS、GPRS等技術(shù)的基礎(chǔ)上,提出了基于ARM的公交智能車載終端的設(shè)計與實現(xiàn)方法,包括終端總體設(shè)計方案、關(guān)鍵技術(shù)的研究、軟件的設(shè)計、產(chǎn)品實現(xiàn)等內(nèi)容。

  

【正文】 D__gthR_posix_h去掉,重新安裝一遍gcc ,至此交叉編譯環(huán)境就建立好了。 配置編譯內(nèi)核內(nèi)核,是一個操作系統(tǒng)的核心,它負責管理系統(tǒng)的進程、內(nèi)存、設(shè)備驅(qū)動程序、文件和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。由于Linux 的源程序是完全公開的,任何人只要遵循GPL,就可以對內(nèi)核加以修改并發(fā)布給他人使用。在嵌入式linux 設(shè)計與應(yīng)用中,或許你不需要經(jīng)常升級你的內(nèi)核,但是為了使你的目標板能夠支持更多的外設(shè),你將不得不自己設(shè)計驅(qū)動程序,或者有時你需要重新設(shè)定內(nèi)核中的某些模塊。所有這些工作,重新編譯內(nèi)核將使你更熟悉自己定制的系統(tǒng)。 內(nèi)核源碼的下載及安裝內(nèi)核源碼可以到ftp://,Linux的內(nèi)核都是以Linux ,下載完內(nèi)核以后還需要下載一個針對ARM的補丁,可以到ftp://,一定要下載與內(nèi)核版本號相對應(yīng)的補丁,否則有可能編譯不了。在ARM內(nèi)核的樹形圖中在版本號加上了一個后綴,rmkN,或–vrsN,這里39。N39。指的是補丁號。舉個例子,這表示需要用到的ARM內(nèi)核的補丁號。(注意: 或vrs 補丁,因為些版本的ARM內(nèi)核已將這些補丁集成了。)。這兩個文件都下載了以后還需要下載一個針對AT91RM9200 的補丁, 這個文件可以到,下載的補丁也要與linux的版本號一致。當這些文件都下載以后就可以在宿主機上安裝linux內(nèi)核了,并為內(nèi)核打上相應(yīng)的補丁。 配置內(nèi)核進入解壓后的內(nèi)核源碼目錄,修改主目錄下的Makefile文件,找到ARCH :=$(shell uname m | sed –es /*/arm/es/sa110/arm)和CROSS_COMPILE= 這兩項, 修改為ARCH ?= arm 和CROSS_COMPILE ?=/usr/local/bin/arm linux 。要注意的是將某種功能編譯為模塊方式會比編譯到內(nèi)核的方式速度要慢一些,不必要的驅(qū)動越多,內(nèi)核就越大,不僅運行速度慢、.占用內(nèi)存多,在少數(shù)情況卜、還會引發(fā)其他問題。確認當前的 shell 為bash,運行make menuconfig 就可以對內(nèi)核進行配置了。 編譯內(nèi)核配置好內(nèi)核以后運行make dep生成文件的依賴關(guān)系,然后就可以編譯內(nèi)核了,編譯內(nèi)核有兩種方式,分別是壓縮方式和非壓縮方式。 非壓縮方式: 該方式下,內(nèi)核在RAM中運行,需要先通過bootloader將內(nèi)核的執(zhí)行映象文件下載到指定位置,然后再跳轉(zhuǎn)到下載地址處執(zhí)行,一般內(nèi)核大小會超過512K。這種方式使用make vmlinux來編譯內(nèi)核,或者直接運行make命令。壓縮方式:該方式下,內(nèi)核從rom中啟動,將被壓縮的內(nèi)核解壓到ram,然后執(zhí)行內(nèi)核。其優(yōu)點是可以將內(nèi)核燒到flash中,而無需手工下載,同時壓縮的內(nèi)核也非常小,大概在200k至300k左右。這種方式用make bzImage來編譯內(nèi)核。編譯成功后會在arch/arm/boot目錄中生成內(nèi)核的鏡像,此鏡像下載到flash中就可以通過bootloader引導了。 嵌入式引導程序移植所謂引導程序(BootLader),即系統(tǒng)加電后運行的第一段軟件代碼,嵌入式系統(tǒng)的引導程序負責家在整個啟動任務(wù),整個過程包括硬件設(shè)備初始化、建立內(nèi)存空間的映射圖、配置合適的軟硬件環(huán)境,以便能夠調(diào)用操作系統(tǒng)的內(nèi)核。BootLader的主要運行任務(wù)就是將內(nèi)核映像從硬盤上讀到RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點去運行,這樣操作系統(tǒng)就開始啟動。Bootloader可以從SAMSUNG公司官方網(wǎng)站下載,經(jīng)過交叉編譯生成Bin文件,下載到ARM開發(fā)板上。 應(yīng)用軟件的設(shè)計因為這個車載 GPS 系統(tǒng)用的是ARMLinux 做的操作系統(tǒng),所以所有的應(yīng)用程序都是在Linux 操作系統(tǒng)下編寫的,然后通過交叉編譯生成可以在ARMLinux 系統(tǒng)中直接運行的程序。整個軟件涉及到 Linux 下的串口編程、Linux 下的網(wǎng)絡(luò)編程和Linux 下的多線程編程三個方面,下面將分別予以介紹。 Linux 下的串口編程Linux 操作系統(tǒng)從一開始就對串行口提供了很好的支持,Linux對所有各類設(shè)備文件的輸入輸出操作看上去就像對普通文件的輸入輸出一樣,所以Linux 對串口的操作也是通過設(shè)備文件訪問的。為了訪問串口,只需打開相應(yīng)的設(shè)備文件即可,在Linux下默認串行口COM1和COM2對應(yīng)的設(shè)備分別為/dev/ttyS0和/dev/ttyS1。一個簡單的串口初始化程序如下:InitCom{struct termios options。 /*定義一個termios 類型的結(jié)構(gòu)體options*/int fd2。fd2=open(/dev/tts/1, O_RDWR | O_NOCTTY )。 /*打開串口*/tcgetattr(fd2, amp。options)。cfsetispeed(amp。options, B4800)。 /*設(shè)置波特率*/cfsetospeed(amp。options, B4800)。 /*設(shè)置波特率*/ |= CS8 |CREAD | CLOCAL。 /*設(shè)置串口屬性*/ |= IGNPAR |ICRNL。 /*設(shè)置串口屬性*/ = 0。 /*設(shè)置串口屬性*/ = 0。 /*設(shè)置串口屬性*/[VMIN]=254。 /*設(shè)置串口接收的最少字節(jié)樹*/[VTIME]=0。 /*設(shè)置字符輸入間隔時間*/tcflush(fd2,TCIFLUSH)。 /*清空數(shù)據(jù)線,啟動新的串口設(shè)置*/tcsetattr(fd2, TCSANOW, amp。options)。}其中 c_cc[VTIME]和c_cc[VTIME]這兩個參數(shù)比較重要,c_cc[VTIME] 設(shè)定字符輸入間隔時間的計時器,而 c_cc[VMIN] 設(shè)置滿足讀取函數(shù)的最少字節(jié)數(shù)。他們的不同組合將影響串口輸入的結(jié)果。當 MIN0, TIME=0 時讀取函數(shù)在讀到了 MIN 值的字符數(shù)后返回。MIN=0, TIME0 : TIME 決定了超時值,讀取函數(shù)在讀到一個字節(jié)的字符,或者等待讀取時間超過 TIME(t = TIME * )以后返回,也就是說,即使沒有從串口中讀到數(shù)據(jù),讀取函數(shù)也會在 TIME 時間后返回。 MIN0, TIME0 : 讀取函數(shù)會在收到了 MIN 字節(jié)的數(shù)據(jù)后,或者超過 TIME時間沒收到數(shù)據(jù)后返回。此計時器會在每次收到字符的時候重新計時,也只會在收到第一個字節(jié)后才啟動。 MIN=0, TIME=0 : 讀取函數(shù)會立即返回。實際讀取到的字符數(shù),或者要讀到的字符數(shù),會作為返回值返回。這兩個參數(shù)要根據(jù)具體的情況來配置,初始化了的串口就可以直接用 read()和write()函數(shù)從串口接受或者發(fā)送數(shù)據(jù)了。 Linux 下的網(wǎng)絡(luò)編程車載終端可以通過 TCP 或UDP 的方式與上位機進行連接。而TCP/UDP 程序的設(shè)計采用的是套接字的方式[46]。套接字是進行程序間通信的一種方法,在客戶/服務(wù)器通信模型中,一個套接字就是通信的一端,因此可使不同主機間進程實現(xiàn)雙向通信。套接字主要有三種類型。流式套接字是最常用的套接字類型,在TCP 協(xié)議中使用此類接口,提供面向連接的,無差錯的,發(fā)送順序一致的,包長度不限和非重復(fù)的網(wǎng)絡(luò)信息包的傳輸。數(shù)據(jù)報套接字在UDP 協(xié)議中使用,提供無連接的服務(wù),以獨立的數(shù)據(jù)報進行網(wǎng)絡(luò)傳輸,數(shù)據(jù)報的最大長度為32KB,傳輸不保證順序性,可靠性和無重復(fù)性,通常用于單個報文傳輸或者對于可靠性要求不高的場合。還有一類稱為原始報套接字,提供對網(wǎng)絡(luò)下層通信協(xié)議的直接訪問。原始套接字主要用于開發(fā)新的協(xié)議或用于提取協(xié)議比較隱蔽的功能。對于車載系統(tǒng)而言無論是用 TCP 還是UDP 方式與上位機通信,都只用開發(fā)客戶端的程序就可以了。因為本系統(tǒng)用的是UDP 方式進行連接的所以詳細介紹一下UDP方式的程序設(shè)計。UDP 是個面向數(shù)據(jù)報的簡單傳輸層協(xié)議。它為應(yīng)用程序發(fā)送和接收數(shù)據(jù)報。一個數(shù)據(jù)報是指從發(fā)送方傳輸?shù)浇邮辗降囊粋€信息單元,這個單元大小一般由發(fā)送方?jīng)Q定。它是—種無連接協(xié)議,即,它不像TCP 那樣需要建立服務(wù)器與客戶端的連接才可以工作,因此它不能及時地返回數(shù)據(jù)傳輸狀態(tài),因此不能保證數(shù)據(jù)可以可靠地傳輸?shù)饺盏牡亍? Linux 下的多線程編程線程技術(shù)早在60 年代就被提出,但真正應(yīng)用多線程到操作系統(tǒng)中去,是在80年代中期,同進程相比線程彼此之間使用相同的地址空間,共享大部分數(shù)據(jù),啟動一個線程所花費的空間遠遠小于啟動一個進程所花費的空間,由于同一進程下的線程之間共享數(shù)據(jù)空間,所以一個線程的數(shù)據(jù)可以直接為其它線程所用,這不僅快捷,而且方便。多線程程序作為一種多任務(wù)、并發(fā)的工作方式,具有以下的優(yōu)點:提高應(yīng)用程序響應(yīng)。這對圖形界面的程序尤其有意義,當一個操作耗時很長時,整個系統(tǒng)都會等待這個操作,此時程序不會響應(yīng)鍵盤、鼠標、菜單的操作,而使用多線程技術(shù),將耗時長的操作置于一個新的線程,可以避免這種尷尬的情況。使多CPU 系統(tǒng)更加有效。操作系統(tǒng)會保證當線程數(shù)不大于CPU 數(shù)目時,不同的線程運行于不同的CPU 上。改善程序結(jié)構(gòu)。一個既長又復(fù)雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利于理解和修改。正是由于多線程程序由以上的優(yōu)點所以整個車載終端的程序會按照多線程的方式進行編寫。Linux 系統(tǒng)下的多線程遵循POSIX[48]線程接口,稱為pthread。編寫Linux 下的多線程程序。創(chuàng)建一個線程的函數(shù)是extern int pthread_create __P ((pthread_t *__thread,__const pthread_attr_t *__attr,void*(*__start_routine) (void *),void *__arg));第一個參數(shù)為指向線程標識符的指針,第二個參數(shù)用來設(shè)置線程屬性,第三個參數(shù)是線程運行函數(shù)的起始地址,最后一個參數(shù)是運行函數(shù)的參數(shù)。函數(shù)pthread_join 用來等待一個線程的結(jié)束。函數(shù)原型為:extern int pthread_join __P((pthread_t __th, void **__thread_return))。 第一個參數(shù)為被等待的線程標識符,第二個參數(shù)為一個用戶定義的指針,它可以用來存儲被等待線程的返回值。這個函數(shù)是一個線程阻塞的函數(shù),調(diào)用它的函數(shù)將一直等待到被等待的線程結(jié)束為止,當函數(shù)返回時,被等待線程的資源被收回。當線程創(chuàng)建了以后就要考慮互斥和同步的問題。互斥,就是對某段代碼或某個變量修改的時候只能有一個線程在執(zhí)行,其它線程不能同時進入該段代碼或同時修改變量。Linux 下可以通過pthread_mutex_t 定義互斥鎖完成多線程的互斥操作。pthread_mutex_t定義互斥鎖變量,用于保護臨界區(qū),互斥鎖有l(wèi)ocked,un locked 兩種狀態(tài)。pthread_mutex_init 用于對互斥鎖變量初始化;pthread_mutex_lock 用于對互斥體進行加鎖操作(互斥鎖被置為locked) ,若互斥鎖原來就為locked,則當前線程被阻塞;pthread_mutex_unlock用于用于對互斥體進行解鎖操作(互斥鎖被置為unlocked) ,喚醒被鎖定的線程?;コ怄i一個明顯的缺點是它只有兩種狀態(tài):鎖定和非鎖定。而條件變量通過允許線程阻塞和等待另一個線程發(fā)送信號的方法彌補了互斥鎖的不足。使用時,條件變量被用來阻塞一個線程,當條件不滿足時,線程往往解開相應(yīng)的互斥鎖并等待條件發(fā)生變化。一旦其它的某個線程改變了條件變量,它將通知相應(yīng)的條件變量喚醒正被此條件變量阻塞的線程。這些線程將重新鎖定互斥鎖并重新測試條件是否滿足。一般說來,條件變量被用來進行線程間的同步。pthread_cond_t用于定義條件變量,pthread_cond_init函數(shù)用于初始化一個條件變量,pthread_cond_wait函數(shù)使線程阻塞在一個條件變量上,并同時可以解開互斥鎖,因此可以避免死鎖的產(chǎn)生,pthread_cond_signal 用來釋放被阻塞在條件變量cond 上的一個線程,pthread_cond_destroy 函數(shù)用于釋放一個條件變量。 應(yīng)用程序介紹智能車載終端系統(tǒng)的應(yīng)用程序在功能上可以分為7個功能模塊,即初始化模塊,控制模塊,GPS數(shù)據(jù)獲取模塊,上行數(shù)據(jù)轉(zhuǎn)換模塊,用戶界面模塊,通信模塊和下行數(shù)據(jù)處理模塊。初始化模塊控制模塊GPS數(shù)據(jù)獲取模塊上行數(shù)據(jù)轉(zhuǎn)換模塊下行數(shù)據(jù)轉(zhuǎn)換模塊用戶界面模塊通信模塊初始化模塊通信模塊用戶界面模塊上行數(shù)據(jù)轉(zhuǎn)換模塊下行數(shù)據(jù)轉(zhuǎn)換模塊GPS數(shù)據(jù)獲 取模塊控制模塊 主程序各模塊協(xié)作示意圖6 總結(jié)本車載定位終端融合了 GPS 全球定位技術(shù),GPRS 無線通信技術(shù),ARM 嵌入式技術(shù)以及嵌入式Linux 系統(tǒng)的移植于編程,屬于一個交叉學科的工程項目。尤其是采用GPRS 通信網(wǎng)絡(luò)進行無線通信代替了傳統(tǒng)的GSM 短信息通信模式,不僅節(jié)約了整個系統(tǒng)的運行成本,而且提高了數(shù)據(jù)的傳輸速度和可靠性。同時選用了工業(yè)級的帶有內(nèi)存管理功能的ARM9 芯片S3C2440作為處理器,并圍繞它進行電路設(shè)計,使得該終端有很高的可靠性,并且能夠適應(yīng)比較惡劣的環(huán)境,因為選用了帶內(nèi)存管理功能的ARM9 芯片,所以可以移植ARMLinux 操作系統(tǒng),該操作系統(tǒng)自帶的資源十分豐富,使得應(yīng)用程序的功能更加強大,同時也增加了軟件的擴展性。本文的重點即車載定位終端的設(shè)計,主要從硬件設(shè)計和軟件設(shè)計兩個方面進行了闡述。硬件設(shè)計主要包括各個模塊的選型及格模塊的實際硬件電路。軟件部分主要闡述了Linux操作系統(tǒng),幾個關(guān)鍵技術(shù)如Linux 下的串口編程、Linxu 下的網(wǎng)絡(luò)編程、Linux 下的多線程編程,然后把應(yīng)用程序分成了初始化模塊,控制模塊,GPS 數(shù)據(jù)獲取模塊,上行數(shù)據(jù)轉(zhuǎn)換模塊,用戶界面模塊,通信模塊和下行數(shù)據(jù)處理模塊這七個模塊予以介紹。但限于本人水平和時間有限,還有許多地方需要完善,尤其是軟件設(shè)計這一塊。
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1