




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)二 嵌入式 Linux 多線程通信實(shí)驗(yàn)程( thread)是在共享內(nèi)存空間中并發(fā)的多道執(zhí)行路徑,它們共享一個(gè)進(jìn)程的資源,如文件描述和信號(hào)處理。P( S): 將信號(hào)量 S 的值減 1,即 S=S-1; 如果 S0,則該進(jìn)程繼續(xù)執(zhí)行;否則該進(jìn)程狀態(tài)置為阻塞狀態(tài),進(jìn)程 PCB 排入信號(hào)量PCB 隊(duì)列末尾,放棄 CPU,等待 V 操作的執(zhí)行。V( S):1 將信號(hào)量 S 的值加 1,即 S=S+1;2 如果 S0,釋放信號(hào)量隊(duì)列中第一個(gè) PCB 所對(duì)應(yīng)的進(jìn)程,將進(jìn)程狀態(tài)由阻塞態(tài)改為就緒態(tài)。執(zhí)行 V 操作的進(jìn)程繼續(xù)執(zhí)行。#include <stdio.h>#in
2、clude <unistd.h>#include <pthread.h>#include <semaphore.h>#define MAXSIZE 10int stackMAXSIZE;int size=50;int front=-1,rear=0;sem_t avail,full; /avail 表示可用的空緩沖區(qū),full 表示已存放產(chǎn)品的緩沖區(qū)/生產(chǎn)者pthread_t provider,customer,end;void provider_fun(void) /full 表示已存放產(chǎn)品的緩沖區(qū)int i=1;sleep(5);while(i<=
3、size) /生產(chǎn)50 個(gè)產(chǎn)品,需要放入到MAXSIZE 個(gè)緩沖區(qū)中sem_wait(&avail); /avail 信號(hào)量P 操作,表示將可用的空緩沖區(qū)個(gè)數(shù)減1stackrear=i;printf("produce the %d productn",stackrear);rear=(rear+1)%MAXSIZE;i+;sleep(1);sem_post(&full); /full 信號(hào)量V 操作,表示將存放產(chǎn)品的緩沖區(qū)個(gè)數(shù)加1pthread_exit(NULL);/消費(fèi)者void customer_fun(void)int i=1;while(i<
4、=size)sem_wait(&full); /fulll 信號(hào)量P 操作,表示將存放產(chǎn)品的緩沖區(qū)個(gè)數(shù)減1front=(front+1)%MAXSIZE;printf("t consume the%d productn",stackfront);stackfront=0;sleep(2);sem_post(&avail); /avail 信號(hào)量V 操作,表示將可用的空緩沖區(qū)個(gè)數(shù)加1i+;pthread_exit(NULL);void end_fun(void)char ch; scanf("%c",&ch); pthread_ca
5、ncel(provider); pthread_cancel(customer);d pthread_exit(NULL); printf("exit!n");void main()pthread_t provider,customer; /定義生產(chǎn)者線程對(duì)象和消費(fèi)者線程對(duì)象sem_init(&avail,0,MAXSIZE); /將avail 信號(hào)量初始化為MAXSIZEsem_init(&full,0,0); /將full 信號(hào)量初始化為0 pthread_create(&provider, NULL, (void *)provider_fun,
6、 NULL); / 創(chuàng)建生產(chǎn)者線程 pthread_create(&customer, NULL, (void *)customer_fun, NULL);/ 消費(fèi)者線程 pthread_create(&end, NULL, (void *)end_fun, NULL);pthread_join(provider,NULL);pthread_join(customer,NULL);pthread_join(end,NULL);sem_destroy(&avail);sem_destroy(&full);實(shí)驗(yàn)三、嵌入式 Linux 網(wǎng)絡(luò)通信實(shí)驗(yàn)3、TCP套接字通信
7、步驟服務(wù)器端:(1)調(diào)用socket()創(chuàng)建套接字,然后初始化struct sockaddr_in結(jié)構(gòu)體。(2)調(diào)用bind函數(shù)()為套接字綁定一個(gè)IP地址和一個(gè)端口號(hào)。(3)調(diào)用listen()函數(shù)使套接字成為監(jiān)聽套接字,偵聽指定的端口。(4)調(diào)用accept()函數(shù),使服務(wù)器處于阻塞狀態(tài),等待接受客戶端連接請(qǐng)求。一旦建立連接,將產(chǎn)生新的套接字,此時(shí)就有兩個(gè)套接字了,原來的那個(gè)套接字還在監(jiān)聽等待指定的端口,而新產(chǎn)生的套接字則準(zhǔn)備發(fā)送或接受數(shù)據(jù)。(5)利用send/sendto和recv/recvfrom進(jìn)行數(shù)據(jù)傳輸。當(dāng)然也可以調(diào)用write或read.(6)數(shù)據(jù)傳輸完畢,關(guān)閉套接字。請(qǐng)補(bǔ)充s
8、erver.c中代碼/fuwuqi#include <sys/types.h> #include <sys/socket.h>/ 包含套接字函數(shù)庫 #include <stdio.h> #include <netinet/in.h> / 包含AF_INET相關(guān)結(jié)構(gòu) #include <arpa/inet.h> / 包含AF_INET相關(guān)操作的函數(shù) #include <unistd.h> #include <string.h> /bzero()#define MAXDATASIZE 50int main() in
9、t server_sockfd; /服務(wù)器端socket描述符變量,用以監(jiān)聽客戶端的TCP連接int new_sockfd ; /當(dāng)監(jiān)聽到并接受一個(gè)TCP連接時(shí),accept()返回一個(gè)新的socket,用這個(gè)socket接受數(shù)據(jù)struct sockaddr_in server_addr; /服務(wù)器端sockaddr_in的數(shù)據(jù)結(jié)構(gòu)struct sockaddr_in client_addr; /用于accept()存放客戶端的socket數(shù)據(jù)結(jié)構(gòu)int client_addr_len; /用于返回struct sockaddr_in的長(zhǎng)度,作為accept()中的一個(gè)參數(shù)char bufM
10、AXDATASIZE; /創(chuàng)建一個(gè)buf來存放接受的數(shù)據(jù)int numbytes; /用以返回接受到的字節(jié)數(shù) server_sockfd = socket(AF_INET , SOCK_STREAM , 0); /創(chuàng)建一個(gè)TCP套接字,其中協(xié)議族為AF_INET,套接字類型為SOCK_STREAM,第三個(gè)參數(shù)為0server_addr.sin_family = AF_INET; /server_addr.sin_family為AF_INET server_addr.sin_addr.s_addr = inet_addr("10.10.58.130"); /server_ad
11、dr.sin_addr.s_addr為服務(wù)器端IP地址,需經(jīng)inet_addr()轉(zhuǎn)化為網(wǎng)絡(luò)IP字節(jié)序 server_addr.sin_port =htons(1025); /server_addr.sin_port為一個(gè)大于1024的端口號(hào),需經(jīng)htons()轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)序 bind(server_sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr); /將server_sockfd綁定到server_addr指定的IP和端口上 listen(server_sockfd,5); /為server_sockfd創(chuàng)
12、建包含5個(gè)TCP連接的監(jiān)聽隊(duì)列,將其設(shè)置為監(jiān)聽套接字 while (1) client_addr_len = sizeof(struct sockaddr_in); /計(jì)算sockaddr_in的長(zhǎng)度 new_sockfd= accept(server_sockfd,(struct sockaddr *)&client_addr,&numbytes);/等待接受客戶端發(fā)來的TCP連接,若連接成功,返回新的socket numbytes = recv(new_sockfd,buf,20, 0); /將客戶端發(fā)來的數(shù)據(jù)存放在buf中,返回接受到的字節(jié)數(shù) if (numbytes)
13、printf(" %s n",buf); /輸出buf中數(shù)據(jù) sleep(3); send(new_sockfd,"I am server",20, 0); /向客戶端發(fā)送"I am server" close(new_sockfd);if('8'=getchar() break; close(server_sockfd); return 0; 客戶端:(1)調(diào)用socket()創(chuàng)建套接字,然后初始化struct sockaddr_in結(jié)構(gòu)體,注意服務(wù)器端和客戶端的struct sockaddr_in結(jié)構(gòu)體應(yīng)該一致。(
14、2)調(diào)用connection()函數(shù)與服務(wù)器建立連接。(3)利用send/sendto和recv/recvfrom進(jìn)行數(shù)據(jù)傳輸. 當(dāng)然也可以調(diào)用write或read.(4)數(shù)據(jù)傳輸完畢,關(guān)閉套接字。 請(qǐng)補(bǔ)充client.c中代碼/KEHU#include <sys/types.h> #include <sys/socket.h>/ 包含套接字函數(shù)庫 #include <stdio.h> #include <netinet/in.h>/ 包含AF_INET相關(guān)結(jié)構(gòu) #include <arpa/inet.h>/ 包含AF_INET相關(guān)操
15、作的函數(shù) #include <unistd.h> #include <string.h> /bzero()#define MAXDATASIZE 50int main(int argc, char *argv) int sockfd,result; /客戶端socket描述符變量struct sockaddr_in server_addr;/與服務(wù)器端sockaddr_in的數(shù)據(jù)結(jié)構(gòu)一致char bufMAXDATASIZE; /用以接受服務(wù)器端發(fā)送過來的數(shù)據(jù) int numbytes; /用以返回從服務(wù)端發(fā)送過來的數(shù)據(jù)字節(jié)數(shù) sockfd = socket(AF_IN
16、ET,SOCK_STREAM, 0); /創(chuàng)建一個(gè)TCP套接字,其中協(xié)議族為AF_INET,套接字類型為SOCK_STREAM,第三個(gè)參數(shù)為0 server_addr.sin_family =AF_INET;/address_addr_addr.sin_family為AF_INET server_addr.sin_addr.s_addr = inet_addr("10.10.58.130"); /address_addr_addr.sin_addr.s_addr為服務(wù)器端IP地址,需經(jīng)inet_addr()轉(zhuǎn)化為網(wǎng)絡(luò)IP字節(jié)序 server_addr.sin_port =h
17、tons(1025);/address_addr_addr.sin_port為一個(gè)大于1024的端口號(hào),需經(jīng)htons()轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)序 result = connect(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr);/與address_addr_addr指定的服務(wù)器建立連接 send(sockfd,"this is client",20, 0); /向服務(wù)器端發(fā)送"this is client"sleep(3); numbytes = recv(sockfd,bu
18、f,50, 0); /接受服務(wù)器端發(fā)送過來的數(shù)據(jù),保存在buf中 if (numbytes) printf(" %s n",buf); /輸出buf里面的數(shù)據(jù) close(sockfd); return 0;實(shí)驗(yàn)四、嵌入式 Linux 串行端口編程實(shí)驗(yàn)6. 什么是全雙工和半雙工全雙工(Full duplex)是說計(jì)算機(jī)可以同時(shí)接受和發(fā)送數(shù)據(jù)也就是它有兩個(gè)分開的數(shù)據(jù)傳輸通道(一個(gè)傳入,一個(gè)傳出)。半雙工(Half duplex)表示計(jì)算機(jī)不能同時(shí)接受和發(fā)送數(shù)據(jù),而在某一時(shí)刻它只能單一的傳送或者接收。這通常意味著,它只有一個(gè)數(shù)據(jù)通道。半雙工并不是說RS-232的某些信號(hào)不能使用
19、,而是,它通常是使用了有別于RS-232的其他不支持全雙工的標(biāo)準(zhǔn)。#include<stdio.h>/*標(biāo)準(zhǔn)輸入輸出定義*/#include<stdlib.h>/*標(biāo)準(zhǔn)函數(shù)庫定義*/#include<unistd.h>/*Unix 標(biāo)準(zhǔn)函數(shù)定義*/#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>/*文件控制定義*/#include<termios.h>/*PPSIX 終端控制定義*/#include<errno.h>/*錯(cuò)誤號(hào)定義*
20、/#define FALSE -1#define TRUE 0int speed_arr = B38400, B19200, B9600, B4800, B2400, B1200, B300,B38400, B19200, B9600, B4800, B2400, B1200, B300, ;int name_arr = 38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, ;char buffer1024;int Length;/int nByte = write(fd, b
21、uffer ,Length);/讀取串口數(shù)據(jù)代碼:dchar buff1024;int Len;void set_speed(int fd, int speed)int i; int status; struct termios Opt;tcgetattr(fd, &Opt); for ( i= 0; i <sizeof(speed_arr) / sizeof(int); i+) if (speed = name_arri) tcflush(fd, TCIOFLUSH); cfsetispeed(&Opt, speed_arri); cfsetospeed(&Op
22、t, speed_arri); status = tcsetattr(fd, TCSANOW, &Opt); if (status != 0) perror("tcsetattr fd1"); return; tcflush(fd,TCIOFLUSH); int set_Parity(int fd,int databits,int stopbits,int parity) struct termios options; if ( tcgetattr( fd,&options) != 0) perror("SetupSerial 1");
23、return(FALSE); options.c_cflag&= CSIZE; switch (databits) /*設(shè)置數(shù)據(jù)位數(shù)*/ case 7:options.c_cflag |= CS7; break;case 8: options.c_cflag |= CS8;break; default: fprintf(stderr,"Unsupported data sizen"); return (FALSE); switch (parity) case'n':case'N': options.c_cflag&= PARE
24、NB; /* Clear parity enable */options.c_iflag&= INPCK; /* Enable parity checking */break; case'o': case'O': options.c_cflag |= (PARODD | PARENB); /* 設(shè)置為奇效驗(yàn)*/options.c_iflag |= INPCK; /* Disnable parity checking */break; case'e': case'E': options.c_cflag |= PARENB;
25、/* Enable parity */options.c_cflag&= PARODD; /* 轉(zhuǎn)換為偶效驗(yàn)*/options.c_iflag |= INPCK; /* Disnable parity checking */break;case'S': case's': /*as no parity*/options.c_cflag&= PARENB;options.c_cflag&= CSTOPB;break; default: fprintf(stderr,"Unsupported parityn"); retur
26、n (FALSE); /* 設(shè)置停止位*/switch (stopbits) case 1: options.c_cflag&= CSTOPB; break; case 2: options.c_cflag |= CSTOPB; break;default: fprintf(stderr,"Unsupported stop bitsn"); return (FALSE); /* Set input parity option */if (parity != 'n') options.c_iflag |= INPCK; tcflush(fd,TCIFL
27、USH);options.c_ccVTIME = 150; /* 設(shè)置超時(shí)15 seconds*/options.c_ccVMIN = 0; /* Update the options and do it NOW */if (tcsetattr(fd,TCSANOW,&options) != 0) perror("SetupSerial 3"); return (FALSE); return (TRUE); int OpenDev(char *Dev)intfd = open( Dev, O_RDWR ); /| O_NOCTTY | O_NDELAYif (-1
28、= fd) perror("Can't Open Serial Port");return -1;elsereturn fd;int main(int argc, char *argv)int fd;int nread;char buff1024;char *dev = "/dev/ttyUSB0" /串口二fd = OpenDev(dev);set_speed(fd,);if (set_Parity(fd,8,1,'N') = FALSE) printf("Set Parity Errorn");exit (
29、0);while (1) /循環(huán)讀取數(shù)據(jù) memset(buff,0,1024); while(nread = read(fd, buff, 1024)>0) /printf("nLen %dn",nread); buffnread+1 = '0' printf("%s", buff); memset(buff,0,1024); close(fd); exit (0);實(shí)驗(yàn)五、嵌入式 Linux 內(nèi)核編程實(shí)驗(yàn)?zāi)憧梢允褂妙^文件 linux/fs.h中的函數(shù)register_chrdev來實(shí)現(xiàn)注冊(cè)一個(gè)某個(gè)驅(qū)動(dòng)模塊對(duì)應(yīng)的主設(shè)備號(hào)。regi
30、ster_chrdev一般在int device_init()函數(shù)中調(diào)用,即將內(nèi)核驅(qū)動(dòng)模塊加載入內(nèi)核意味著要向內(nèi)核注冊(cè)自己。如果你向函數(shù)register_chrdev傳遞為0的主設(shè)備號(hào),那么返回的就是動(dòng)態(tài)分配的主設(shè)備號(hào)。此時(shí)應(yīng)該通過命令 “cat /proc/devices”命令輸出得到,使用mknod統(tǒng)調(diào)用建立設(shè)備文件。4Linux 的驅(qū)動(dòng)程序編譯方法(1)將其源代碼添加到內(nèi)核源文件中,然后靜態(tài)編譯整個(gè)內(nèi)核,再運(yùn)行新的內(nèi)核來測(cè)試(2)編譯為模塊的形式,單獨(dú)加載運(yùn)行調(diào)試5驅(qū)動(dòng)程序與應(yīng)用程序的區(qū)別(1)應(yīng)用程序一般有一個(gè) main 函數(shù),從頭到尾執(zhí)行一個(gè)任務(wù);驅(qū)動(dòng)程序卻不同,它沒有 main 函
31、數(shù),通過使用宏module_init(初始化函數(shù)名); 將初始化函數(shù)加入內(nèi)核全局初始化函數(shù)列表中,在內(nèi)核初始化時(shí)執(zhí)行驅(qū)動(dòng)的初始化函數(shù),從而完成驅(qū)動(dòng)的初始化和注冊(cè),之后驅(qū)動(dòng)便停止等待被應(yīng)用軟件調(diào)用。驅(qū)動(dòng)程序中有一個(gè)宏moudule_exit(退出處理函數(shù)名)注冊(cè)退出處理函數(shù)。它在驅(qū)動(dòng)退出時(shí)被調(diào)用。(2)應(yīng)用程序可以和 GLIBC 庫連接,因此可以包含標(biāo)準(zhǔn)的頭文件,比如<stdio.h><stdlib.h>, 在驅(qū)動(dòng)程序中是不能使用標(biāo)準(zhǔn) C 庫的,因此不能調(diào)用所有的 C 庫函數(shù),比如輸出打印函數(shù)只能使用內(nèi)核的 printk函數(shù),包含的頭文件只能是內(nèi)核的頭文件,比如: <
32、;linux/module.h>。7字符驅(qū)動(dòng)程序編寫流程(1) 包含字符設(shè)備驅(qū)動(dòng)程序所必需包含的頭文件(2) 定義字符設(shè)備文件名、主設(shè)備號(hào)或由系統(tǒng)動(dòng)態(tài)分配設(shè)備號(hào)(3) 編寫file_operations結(jié)構(gòu)體中功能接口函數(shù),如以上device_read、device_write, device_open(4) 定義file_operations結(jié)構(gòu)變量,建立用戶程序調(diào)用函數(shù)與驅(qū)動(dòng)功能接口的對(duì)應(yīng)關(guān)系。(5) 編寫字符設(shè)備驅(qū)動(dòng)程序加載函數(shù),完成設(shè)備文件注冊(cè)及必要的初始化(6) 編寫字符設(shè)備驅(qū)動(dòng)程序卸載函數(shù),完成注銷及必要的環(huán)境恢復(fù)。(7) 編寫Makefile文件,使用make來編譯Make
33、file,生成*.ko內(nèi)核模塊文件(8) 使用“insmod *.ko”加載設(shè)備驅(qū)動(dòng)程序,并調(diào)用dmesg來查看輸出結(jié)果(9) 使用“cat /proc/devices” 查看獲取主設(shè)備號(hào)(10) 使用“mknod /dev/設(shè)備文件名 主設(shè)備號(hào) 0”來創(chuàng)建設(shè)備文件(11) 編寫用戶應(yīng)用程序,調(diào)用用戶調(diào)用接口對(duì)驅(qū)動(dòng)功能接口進(jìn)行測(cè)試。(12) 使用“rmmod /dev/設(shè)備文件名”卸載驅(qū)動(dòng)模塊,并調(diào)用dmesg查看#include <linux/module.h> /模塊所需的大量符號(hào)和函數(shù)定義#include <linux/fs.h> /文件系統(tǒng)相關(guān)的函數(shù)和頭文件#i
34、nclude <linux/cdev.h> /cdev結(jié)構(gòu)的頭文件#include <asm/uaccess.h> /copy_to_user()/copy_from_user()定義#define DEVICE_NAME "Dev_frame"/定義模塊名,用”cat /proc/devices”命令查看int DEVICE_MAJOR = 0; /如果為0,則由系統(tǒng)自動(dòng)分配主設(shè)備號(hào)#define M_LENGTH 10char core_data0M_LENGTHM_LENGTH;/定義內(nèi)核數(shù)據(jù)矩陣char core_data1M_LENGTHM
35、_LENGTH; /*-*/ int device_open(struct inode *inode, struct file *filp) charc='a'inti,j;printk("user open device.n"); for(i=0;i<M_LENGTH;i+)/初始化數(shù)據(jù)for(j=0;j<M_LENGTH;j+)core_data0ij=c+j;/初始化內(nèi)核數(shù)據(jù)矩陣 return 0; /*-*/ ssize_t device_write(struct file *filp,const char *buffer, size_t
36、 count, loff_t *f_pos) inti,j;printk("user write data to driver.n");/將用戶空間傳遞過來buffer里面的數(shù)據(jù)復(fù)制到內(nèi)核空間core_data1數(shù)組中 copy_from_user(buffer,core_data1,count); for(i=0;i<M_LENGTH;i+)for(j=0;j<M_LENGTH;j+)printk("%c",core_data1i);/使用printk打印內(nèi)核空間core_data1數(shù)組中元素printk("n");re
37、turn count;/*-*/ssize_t device_read(struct file *filp, char *buffer, size_t count, loff_t *f_pos) printk("user read data from driver.n");copy_to_user(buffer,core_data0,count);/將內(nèi)核空間core_data0數(shù)組復(fù)制到用戶空間buffer return count; /*-*/int device_ioctl(struct inode *inode, struct file *file, unsigne
38、d int cmd, unsigned long arg) printk("user ioctl runing.n");switch(cmd)case 1:printk("cmd = %d.n",cmd);break; case 2: printk("cmd = %d.n",cmd);break;case 3: printk("cmd = %d.n",cmd);break;case 4: printk("cmd = %d.n",cmd);break;case 5:printk("cmd
39、 = %d.n",cmd);break; return cmd; /*-*/ int device_release(struct inode *inode, struct file *filp) printk("device releasen"); return 0; /*- device_fops 結(jié)構(gòu)定義文件操作函數(shù)體之后- -*/ struct file_operations device_fops = .owner=THIS_MODULE, .read=device_read,/將用戶接口函數(shù)read與驅(qū)動(dòng)功能函數(shù)device_read對(duì)應(yīng)起來 .unlo
40、cked_ioctl=device_ioctl, /將用戶接口函數(shù)ioctl與驅(qū)動(dòng)功能函數(shù)device_ioctl對(duì)應(yīng)起來 .open=device_open, /將用戶接口函數(shù)open與驅(qū)動(dòng)功能函數(shù)device_open對(duì)應(yīng)起來 .write=device_write,/將用戶接口函數(shù)write與驅(qū)動(dòng)功能函數(shù)device_write對(duì)應(yīng)起來 .release=device_release,/將用戶接口函數(shù)release與驅(qū)動(dòng)功能函數(shù)device_release對(duì)應(yīng)起來;/*-*/ int device_init(void) int ret; /*字符驅(qū)動(dòng)程序注冊(cè):第1個(gè)參數(shù)為0(表示由系統(tǒng)自
41、動(dòng)分配主設(shè)備號(hào)),第2個(gè)參數(shù)為設(shè)備文件名,第3個(gè)參數(shù)為struct file_operations結(jié)構(gòu)體變量指針*/ret=register_chrdev(0,"Demo_device",&device_fops);if(ret<0)printk("register chrdev failure!n");/字符驅(qū)動(dòng)程序注冊(cè)失敗 return ret; elseprintk("register chrdev ok!n");DEVICE_MAJOR=ret;/將系統(tǒng)分配的主設(shè)備號(hào)保存 return 0; void devic
42、e_exit(void) /字符驅(qū)動(dòng)程序注銷,第1個(gè)參數(shù)為主設(shè)備號(hào),第2個(gè)參數(shù)為設(shè)備文件名, unregister_chrdev(0,"Demo_device");printk("unregister chrdev ok!n"); module_init(device_init); /指定insmod-加載時(shí)執(zhí)行device_initmodule_exit(device_exit);/rmmod-卸載時(shí)執(zhí)行執(zhí)行device_exit實(shí)驗(yàn)六、嵌入式 Linux Qt GUI 使用實(shí)驗(yàn)/firstDialog.cpp/#include <QtGui&g
43、t;#include "firstDialog.h"firstDialog:firstDialog(QWidget *parent) : QDialog(parent) lineEdit_1 = new QLineEdit; label_1 = new QLabel("+"); lineEdit_2 = new QLineEdit; label_2= new QLabel("=");lineEdit_3 = new QLineEdit; sumButton = new QPushButton("sum");jian
44、faButton = new QPushButton("jianfa"); /*按鈕部件大小和字體設(shè)置*/ sumButton->resize(50, 20); sumButton->setFont(QFont("Times", 18, QFont:Bold); connect(sumButton, SIGNAL(clicked(), this, SLOT(clickfun();connect(this, SIGNAL(sumsignal(QString,QString), this, SLOT(sumfun(QString,QString)
45、; connect(jianfunButton, SIGNAL(clicked(), this, SLOT(clickfun(); connect(this, SIGNAL(sumsignal(QString,QString), this, SLOT(jianfun(QString,QString); QHBoxLayout *topLayout=new QHBoxLayout; topLayout->addWidget(lineEdit_1); topLayout->addWidget(label_1); topLayout->addWidget(lineEdit_2); topLayout->addWidget(label_2); topLayout->addWidget(lineEdit_3); QHBoxLayout *bottomLayout=new QHBoxLayout; bottomLayout->addW
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版診所承包合同范例
- 運(yùn)輸承攬合同
- 二零二五合同范例之泰康人壽保險(xiǎn)合同模板
- 二零二五版國(guó)際進(jìn)出口貿(mào)易合同范例參考
- 海洋運(yùn)輸貨物的保險(xiǎn)合同
- 最高額借款合同概念二零二五年
- 二零二五版房屋購買意向金協(xié)議
- 銷售保密協(xié)議范例常用二零二五年
- 2025光伏發(fā)電項(xiàng)目合作開發(fā)合同
- 大學(xué)入學(xué)教育輔導(dǎo)員講話
- DZ-T+0227-2010地質(zhì)巖心鉆探規(guī)程
- 常熟、張家港、昆山、太倉市2022-2023學(xué)年七年級(jí)下學(xué)期期中道德與法治試題
- 建筑勞務(wù)用工合同范本
- 2024年湖北省中考地理生物試卷(含答案)
- 眼科手術(shù)前擴(kuò)瞳
- 北師大版二年級(jí)下冊(cè)數(shù)學(xué)口算題大全帶答案
- 廣汽埃安高壓快充技術(shù)應(yīng)用介紹-2024-05-技術(shù)資料
- 水利工程(水電站)安全生產(chǎn)標(biāo)準(zhǔn)化管理體系方案(達(dá)標(biāo)所需資料全套匯編)
- 科普志愿服務(wù)知識(shí)講座
- 預(yù)防接種工作規(guī)范(2023年版)解讀課件
- 高三女生生理安全教育課件
評(píng)論
0/150
提交評(píng)論