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

正文內(nèi)容

基于嵌入式linux的銀行排隊(duì)系統(tǒng)-資料下載頁(yè)

2024-12-06 01:14本頁(yè)面

【導(dǎo)讀】不含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫(xiě)過(guò)的作品成果。的研究做出重要貢獻(xiàn)的個(gè)人和集體均已在文中以明確方式標(biāo)明。本人完全意識(shí)到本聲明的法律結(jié)果由本人承擔(dān)。

  

【正文】 定的窗口 辦理業(yè)務(wù)。在初始化程序界面的同時(shí)通過(guò) initSock( )函數(shù)初始化 socket 并連接服務(wù)器端 ,并向服務(wù)器端發(fā)送連接請(qǐng)求。另外有一個(gè)單獨(dú)的線程負(fù)責(zé)接收服務(wù)器端返回的信息,并友好的展示在大屏幕上面。 圖 是 MiniGui 客戶端 (主顯示屏) 的 流程 圖: 開(kāi) 始初 始 化 主 顯 示 屏 界 面創(chuàng) 建 套 接 字創(chuàng) 建 線 程進(jìn) 入 消 息 循 環(huán)判 斷 消 息關(guān) 閉 套 接 字結(jié) 束關(guān) 閉 主 顯 示 屏接 收 服 務(wù) 器 反 饋顯 示 反 饋 內(nèi) 容等 待 服 務(wù) 器 反 饋進(jìn) 入 執(zhí) 行 函 數(shù)關(guān) 閉 顯 示 屏 圖 主顯示屏流程 圖 27 makefike:實(shí)現(xiàn)文件的自動(dòng)編譯,采用的編譯器是 armlinuxgcc。 服務(wù)端與客戶端 通信 設(shè)計(jì)與實(shí)現(xiàn) 本系統(tǒng)中涉及 許多數(shù)據(jù)通信及處理 , 因?yàn)閷?duì)信息的完整性要求并 不高,所以適合 采 用 UDP 技術(shù)實(shí)現(xiàn)。 UDP 既用戶數(shù)據(jù)報(bào)協(xié)議,是一個(gè)面向無(wú)連接的協(xié)議。 UDP 服務(wù)端的設(shè)計(jì)與實(shí)現(xiàn) 基于 UDP 的 socket 編程服務(wù)器端程序的一般步驟分為四步,首先是創(chuàng)建套接字,服務(wù)器端創(chuàng)建套接字的代碼如下: /********服務(wù)器端創(chuàng)建套接字 ***********/ sockfd = socket(AF_INET, SOCK_DGRAM, 0)。 if(sockfd 0) { printf(Socket Error!)。 fprintf(stderr, Socket Error:%s\n, strerror(errno))。 exit(1)。 } 其次便是要將套接字綁定到一個(gè)本地地址和端口上,綁定套接字的目的是使客戶端程序能夠有目的的向服務(wù)器端發(fā)送請(qǐng)求。服務(wù)器端綁定套接字的代碼如下: /********服務(wù)器端綁定套接字 ***********/ bzero(amp。addr, sizeof(struct sockaddr_in))。 = AF_INET。 =INADDR_ANY。 = htons(SERVER_PORT)。 if(bind(sockfd, (struct sockaddr*)amp。addr, sizeof(struct sockaddr_in)) 0) { printf(Bind Error!)。 fprintf(stderr, Bind Error:%s\n, strerror(errno))。 exit(1)。 } 28 然后服務(wù)器端便可以等待接收來(lái)自客戶端的請(qǐng)求了,因?yàn)榉?wù)器在等待接收數(shù)據(jù)的時(shí)候,會(huì)陷入一 個(gè)阻塞的狀態(tài),所以要把接收客戶端請(qǐng)求并處理請(qǐng)求的代碼寫(xiě)進(jìn)一個(gè)單獨(dú)的線程里面,創(chuàng)建線程的代碼為: /********服務(wù)器端創(chuàng)建接收數(shù)據(jù)的線程 ***********/ int ret。 ret = pthread_create(amp。id, NULL, (void*)receiver, NULL)。 if(ret != 0){ printf(Create pthread error!\n)。 exit(1)。 } 每一個(gè)線程會(huì)有一個(gè)執(zhí)行函數(shù), 可以將接收客戶端請(qǐng)求的代碼寫(xiě)進(jìn)線程的執(zhí)行函數(shù)里面,服務(wù)器端的線程執(zhí)行函數(shù)如下: /********服務(wù)器端接收線程的執(zhí)行函數(shù) ***********/ void receiver(void) { int n, addrlen。 addrlen = sizeof(struct sockaddr_in)。 printf(等待接收數(shù)據(jù) ...\n)。 while(1) { n = recvfrom(sockfd, msg, MAX_MSG_SIZE, 0, (struct sockaddr*)amp。addr_remote, amp。addrlen)。 msg[n] = 0。 fprintf(stdout, 收到數(shù)據(jù) : %s\n, msg)。 /** 處理接收到的數(shù)據(jù)并處理 **/ fflush(stdout)。 } } 29 最后在程序結(jié)束之前務(wù)必要關(guān)閉套接字: close(sockfd)。 UDP 客戶端的設(shè)計(jì)與實(shí)現(xiàn) 基于 UDP 的 socket 編程客戶端程序的一般步驟分為三步,首先也是創(chuàng)建套接字,客戶端創(chuàng)建套接字的代碼 如下: /********客戶端創(chuàng)建套接字 ***********/ void initSock() { sockfd = socket(AF_INET, SOCK_DGRAM, 0)。 if(sockfd 0) { fprintf(stderr, Socket Error:%s \n, strerror(errno))。 exit(1)。 } bzero(amp。addr, sizeof(struct sockaddr_in))。 = AF_INET。 = htons(SERVER_PORT)。 i_aton(, )。 } 然后便是向服務(wù)器端發(fā)送請(qǐng)求,和接收來(lái)自服務(wù)器端的反饋,客戶端發(fā)送請(qǐng)求以取號(hào)機(jī)為例,窗口及大屏幕代碼類(lèi)似,代碼如下: /********取號(hào)機(jī)向服務(wù)器端發(fā)送請(qǐng)求 ***********/ bzero(buffer, MAX_BUF_SIZE)。 strcpy(buffer, order,)。 strncat(buffer, vip, 3)。 sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr*)amp。addr, sizeof(struct sockaddr))。 為了將接收來(lái)自服務(wù)器端的反饋與發(fā)送請(qǐng)求的操作分離開(kāi)來(lái),需要將接收發(fā)聵的操作寫(xiě)在一個(gè)單獨(dú)的線程里面,該線程的執(zhí)行函數(shù)如下: 30 /***********取號(hào)機(jī)的線程執(zhí)行函數(shù) ********************/ void receiver(void *hwnd) { int n。 while(1) { bzero(buffer, MAX_BUF_SIZE)。 n=recvfrom(sockfd, buffer, MAX_BUF_SIZE, 0, NULL, NULL)。 buffer[n] = 0。 SetDlgItemText((HWND)hwnd, IDC_STATIC, buffer)。 printf(%s\n, buffer)。 fflush(stdout)。 } } /***********窗口的線程執(zhí)行函數(shù) ********************/ void receiver(void *hwnd) { int n。 while(1) { bzero(buffer, MAX_BUF_SIZE)。 n = recvfrom(sockfd, buffer, MAX_BUF_SIZE, 0, NULL, NULL)。 buffer[n] = 0。 if(strstr(buffer, vip) != 0){ SetDlgItemText((HWND)hwnd, IDC_LABEL_VIP, buffer)。 } else if(strstr(buffer, normal) != 0){ SetDlgItemText((HWND)hwnd, IDC_LABEL_NORMAL, buffer)。 } else{ 31 SetDlgItemText((HWND)hwnd, IDC_LABEL_OTHER, buffer)。 } printf(%s\n, buffer)。 fflush(stdout)。 } } /***********大屏幕的線程執(zhí)行函數(shù) ********************/ void receiver(void *hwnd) { int n。 while(1) { bzero(buffer, MAX_BUF_SIZE)。 n = recvfrom(sockfd, buffer, MAX_BUF_SIZE, 0, NULL, NULL)。 buffer[n] = 0。 SetDlgItemText((HWND)hwnd, IDC_STATIC, buffer)。 printf(%s\n, buffer)。 fflush(stdout)。 } } 最后在客戶端程序退出之前務(wù)必也要關(guān)閉套接字: close(sockfd)。 32 6 系統(tǒng)用戶使用指南 因?yàn)榉N種原因,本文所開(kāi)發(fā)的系統(tǒng)并沒(méi)有達(dá)到實(shí)際使用的要求,只是實(shí)現(xiàn)了一個(gè)系統(tǒng)的 核心原型 。本節(jié)介紹該原型的使用方法。 服務(wù)器可運(yùn)行在一臺(tái) PC 機(jī)上 , 由于服務(wù)器暫時(shí)沒(méi)有圖形界面,可以直接運(yùn)行。 命令如下: $ ./QueueServer 在 客戶端目標(biāo)板上,系統(tǒng)加電,燒寫(xiě)根文件系統(tǒng) 和內(nèi)核映像zImage 到目標(biāo)板,再啟動(dòng)系統(tǒng) go 30008000。進(jìn)入 命令界面后運(yùn)行程序即可 運(yùn)行各客戶端 。 運(yùn)行界面如 下 圖所示。 圖 取號(hào)機(jī) 程序運(yùn)行界面 33 圖 營(yíng)業(yè)窗口 程序運(yùn)行界面 圖 主顯示屏 程序運(yùn)行界面 34 結(jié)論 : 本論文分析了創(chuàng)維特 JXARM924101 開(kāi)發(fā)平臺(tái),并以此為基礎(chǔ),進(jìn)行了 Linux 內(nèi)核裁剪,制定了根文件系統(tǒng) ramdisk,建立了 MiniGUI 運(yùn)行環(huán)境,最終設(shè)計(jì)實(shí)現(xiàn)了一個(gè) 銀行排 隊(duì)系統(tǒng)的原型。該系統(tǒng)涉及到嵌入式開(kāi)發(fā)的多個(gè)方面,如 BootLoader、嵌入式操作系統(tǒng)改造、應(yīng)用程序開(kāi)發(fā)等,初步實(shí)現(xiàn)了 銀行排隊(duì) 所需的功能。 這個(gè) 排隊(duì)系統(tǒng) 界面簡(jiǎn)單,操作方便,但與實(shí)用的目標(biāo)還有一段距離。首先開(kāi)發(fā)板的硬件不足,網(wǎng)絡(luò)通信采用的是有線網(wǎng)絡(luò),這樣會(huì)影響美觀。其次,當(dāng)前的系統(tǒng)功能還有所缺陷,沒(méi)有實(shí)現(xiàn) 控制客戶的流量 ,沒(méi)有 將客戶排隊(duì)號(hào) 打印 出來(lái) , 銀行后臺(tái)的宏觀控制也沒(méi)有實(shí)現(xiàn) ,另外叫號(hào)服務(wù)也未能實(shí)現(xiàn) 。 理想的銀行排隊(duì)系統(tǒng)應(yīng)該考慮使用語(yǔ)音提示客戶到指定窗口辦理業(yè)務(wù),由于本次畢業(yè)設(shè)計(jì)時(shí)間有限,并沒(méi)有考慮 MP3 讀的功能 ,希望以后有機(jī)會(huì)能完善該功能。 其他還沒(méi)考慮到的問(wèn)題可能還有很多,只能以后逐步升級(jí)完善。 針對(duì)以上幾個(gè)方面的不足,可以對(duì)其進(jìn)行改進(jìn)。在硬件方面,網(wǎng)絡(luò)通信應(yīng)該采用無(wú)線技術(shù),這樣可以隨意移動(dòng)。在功能上,主要是要改進(jìn)服務(wù) 器 端 ,可以考慮為服務(wù)器端增加圖形界面 。 在服務(wù)器端還可以設(shè)計(jì)客戶流量的統(tǒng)計(jì),對(duì)隊(duì)列大小的宏觀控制,另外還應(yīng)該把每天的客戶記錄保存到一個(gè)日志文件中,這樣方便故障的排除。客戶端應(yīng)該考慮美化界面,以及增加 MP3 讀的功能,這樣便可以使用語(yǔ)音來(lái)提醒客戶到指定窗口辦理業(yè)務(wù)了。 但是,進(jìn)行上述的改進(jìn)需要大量的時(shí)間等資 源。 參考文獻(xiàn) : [ 1] 陳賾,秦貴中,徐華中,王磊. ARM9 嵌入式技術(shù)及 Linux 高級(jí)試驗(yàn)教程 [M].北京:北京航空航天大學(xué)出版社, 2021: 2291. [ 2] 徐虹,何嘉,張鐘澍.操作系統(tǒng)試驗(yàn)指導(dǎo) ——基于 Linux 內(nèi)核 [M].北京:清華大學(xué)出版社, 2021: 165189. [ 3]魏忠明. MiniGUI A crossoperatingsystem graphics user interface support system for embedded[ EB/OL]. 20211031 [ 4] David . Hughes Technologies : The home of Mini SQL[ EB/OL]. 2021803 [ 5] 趙炯. Linux 內(nèi)核完全注釋 [M].北京:機(jī)械工業(yè)出版社, 2021: 239325. 35 [ 6] 華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心.嵌入式 Linux C 語(yǔ)言應(yīng)用程序設(shè)計(jì) [M].北京:人民郵電出版社, 2021: 334367. [ 7] 冼進(jìn),許振山,劉崢嶸,張智超.嵌入 式 Linux 應(yīng)用開(kāi)發(fā)詳解 [M].北京:電子工業(yè)出版社, 2021: 387432. [ 8] 孫紀(jì)坤,張小全.嵌入式 Linux 系統(tǒng)開(kāi)發(fā)技術(shù)詳解 ——基于 ARM [M].北京:人民郵電出版社, 2021: 73260. [ 9] 周立功. ARM 嵌入式 MiniGUI 初步與應(yīng)用開(kāi)發(fā)范例 [M].北京:航空航天大學(xué)出版社, 2021: 7137. [ 10] Doug Abbott. Linux for Embedded and RealTime Applications
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1