嵌入式linux课程设计报告.doc
《嵌入式linux课程设计报告.doc》由会员分享,可在线阅读,更多相关《嵌入式linux课程设计报告.doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、重庆科技学院课程设计成果院(系):_电气与信息工程学院_ 班 级: 计科普0802 学生姓名: 庄桐泉 学 号: 2008441067 设计地点(单位)_ _I315 _ _设计题目:_ 聊天程序设计_ _ 完成日期: 2011 年 9 月 5 日 指导教师评语: _ 成绩(五级记分制):_ _ 教师签名:_摘要嵌入式linux在电子行业的应用很广泛,学习嵌入式linux显得非常重要。这次课程设计的主要目的是检验上学期学习linux后的效果。通过基础题的代码编写,熟悉linux C语言编程技巧。通过完成聊天程序的设计,熟悉linux底层编程。利用QT设计界面,缩短开发时间。关键字:嵌入式lin
2、ux;基础题;聊天程序;QT 目 录课程设计任务书- 4 -题目一 基础题- 6 -1 设计内容及要求- 6 -1.1 二小题- 6 -1.2三小题- 6 -1.3四小题- 7 -1.3五小题- 9 -1.4六小题- 11 -1.5七小题- 11 -1.6八小题- 13 -题目二 聊天程序设计- 15 -1设计内容及要求- 15 -1.1 聊天程序的基本要求- 15 -1.2 需实现的主要功能- 15 -2需求分析- 15 -2.1 QT设计- 15 -2.2服务器端和客户端的数据传输方式- 16 -2.3 服务器端功能设计- 16 -2.4客户端功能设计- 17 -3总体设计- 17 -3.
3、1 总体功能- 17 -4. 详细设计- 17 -4.1 功能分析和描述- 17 -4.2 客户端功能模块- 17 -4.3 服务器功能模块- 19 -5. 代码实现- 20 -5.1 客户端代码- 20 -5.2 服务器端代码- 22 -6功能实现- 23 -7总结- 23 -8致谢- 23 -9参考文献- 23 -课程设计任务书设计题目:基础题目学生姓名庄桐泉课程名称嵌入式linux课程设计专业班级计科普2008地 点I315起止时间2011-8-29至2011-9-9设计内容及要求 GCC编译器的使用,LINUX系统C程序设计编译、调试方法1、 编写程序将数组内容倒置a=”1234567
4、89”。2、 利用指针将数据A的内容复制到数据B。3、 创建两线程,通过打印输出各自线程号和打印次序,要求从打印结果看出两个线程是并发执行的。4、 创建两线程,A线程通过消息队列发消息,B线程收到后在屏幕打印输出,要求两线程个打印出线程号和消息内容。5、 创建两线程,A线程循环打印数组a100,B线程循环将数组成员+1,要求利用互斥锁,使每次输出a0=a99.6、 创建两线程,A线程每2秒打印一次字母A,B线程每秒打印一次字母B,要求利用同步信号量,使输出字母B总是在A之后。8、通过Makefile,将project中的一个.c编译成.a,另一个.c调用.a的函数,要求实现静态库的生成和调用,
5、运行结果正确。设计参数进度要求第一周之内完成参考资料1、嵌入式Linux应用程序开发标准教程.人民邮电出版社。华清远见嵌入式培训中心。2010.72、ZLG ARMMAGIC2410实验指导、资料。其它设计题目:聊天程序设计学生姓名庄桐泉课程名称嵌入式linux课程设计专业班级计科普2008地 点I315起止时间2011-8-29至2011-9-9设计内容及要求 1、在QT(或miniGUI)编写聊天程序,交叉编译后下载到目标机,可实现两台目标机可发送文本聊天2、QT(或miniGUI)界面设计至少包括“发送”,“重置”两个按钮,要求必须把目标机的硬件键盘映射到QT设计的软件界面中,实现软件按
6、钮的功能。选作:发送文件。设计参数进度要求做完基础题目之后开始做本题目。参考资料1、嵌入式Linux应用程序开发标准教程.人民邮电出版社。华清远见嵌入式培训中心。2010.72、ZLG ARMMAGIC2410实验指导、资料。其它说明.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。系主任: 指导教师: 2011年 9 月 5 日题目一 基础题1 设计内容及要求1.1 二小题(1) 编写程序将数组内容倒置a=”123456789”。(2) 程序代码实现如下:ch
7、ar a=0123456789; char tmp;int i = 0,j = 0;for(i = 0,j = strlen(a)-1;i=strlen(a)/2-1;i+,j-) tmp = ai; ai = aj; aj = tmp;for(i = 0;istrlen(a);i+) printf(%c,ai);printf(n);(3)程序分析:定义数组数组内容倒置输出倒置后数组内容(4)程序执行效果如下:1.2三小题(1)利用指针将数据A的内容复制到数据B。(2)程序代码实现如下:char A = abcd;char B =1234; int i = 0;char *tmp; tmp =
8、 A; for(i = 0;istrlen(A);i+) Bi = *tmp+;for(i = 0;istrlen(A);i+) printf(%c,Bi);printf(n);(3)程序分析:定义数组定义指针指针指向数组A移动指针拷贝数字到B中显示拷贝后的数组(4)程序执行效果如下:1.3四小题(1)创建两线程,通过打印输出各自线程号和打印次序,要求从打印结果看出两个线程是并发执行的。(2)程序代码如下:#define THREAD_NUMBER2#define REPEAT_NUMBER5#define DELAY_TIME_LEVELS10.0void * thrd_func(void
9、*arg) int thrd_num = (int)arg;int delay_time = 0;int count = 0;printf(Thread %d is startingn, thrd_num);for (count = 0; count REPEAT_NUMBER; count+)delay_time = (int)(rand() * DELAY_TIME_LEVELS/(RAND_MAX) + 1;sleep(delay_time); printf(tThread %d: job %d delay = %dn, thrd_num, count, delay_time);prin
10、tf(Thread %d finishedn, thrd_num);pthread_exit(NULL); int main(void)pthread_t threadTHREAD_NUMBER;int no = 0, res;void * thrd_ret;for (no = 0; no THREAD_NUMBER; no+) res = pthread_create(&threadno, NULL, thrd_func, (void*)no);for (no = 0; no msg_text); pthread_exit(NULL); void * thrd_func1(void *arg
11、) int thrd_num = (int)arg;printf(Thread %d is startingn, thrd_num);/*读取消息队列*/msgrcv(qid, &msg, BUFSZ, getpid(), 0); printf(recv the message is:%sn,(&msg)-msg_text);pthread_exit(NULL);void *(*const funcTHREAD_NUMBER)(void *)=thrd_func0,thrd_func1;int main(void)pthread_t threadTHREAD_NUMBER;int no = 0
12、, res;void * thrd_ret;key_t key;int len; key = ftok(., a); qid = msgget(key,IPC_CREAT|0666); for (no = 0; no THREAD_NUMBER; no+)res = pthread_create(&threadno, NULL, funcno, (void*)no);for (no = 0; no THREAD_NUMBER; no+) res = pthread_join(threadno, &thrd_ret); (msgctl(qid, IPC_RMID, NULL); return 0
13、; (3) 代码分析如下:该程序实现了使用消息队列进行线程之间的通信,包括消息队列的创建、消息发送和读取、消息队列的撤销和删除等操作。 定义消息队列消息结构体 创建线程0,用于消息队列发送消息 添加消息到消息队列 退出线程 创建线程1,用于消息队列读取消息 读取消息队列 根据不同的路径和关键表示产生标准的key 创建消息队列 等待线程 从系统内核中移走消息队列 (4)程序执行效果如下:1.4六小题(1)创建两线程,A线程循环打印数组a100,B线程循环将数组成员+1,要求利用互斥锁,使每次输出a0=a99.(2)程序源代码如下:(3)程序分析如下:1.5七小题(1)创建两线程,A线程每2秒打印
14、一次字母A,B线程每秒打印一次字母B,要求利用同步信号量,使输出字母B总是在A之后。 (2)程序代码如下:#define THREAD_NUMBER 2sem_t semTHREAD_NUMBER;void * thrd_func0(void *arg) /A arg = arg;while(1) printf(An); sem_post(&sem1); sleep(2); pthread_exit(NULL); void * thrd_func1(void *arg) /B arg = arg;while(1) sem_wait(&sem1); printf(Bn); sleep(1); p
15、thread_exit(NULL);void *(*const funcTHREAD_NUMBER)(void *)=thrd_func0,thrd_func1;int main(void)pthread_t threadTHREAD_NUMBER;int no = 0, res;void * thrd_ret;for (no = 0; no THREAD_NUMBER; no+) res = pthread_create(&threadno, NULL, funcno, (void*)no);printf(Create thread successn Waiting for threads
16、to finish.n);for (no = 0; no THREAD_NUMBER; no+) sem_destroy(&semno);return 0; (3)程序分析如下: 程序创建两线程,实现A线程每2秒打印一次字母A,B线程每秒打印一次字母B,利用同步信号量,使输出字母B总是在A之后。 创建线程0执行函数,用于打印字符A 打印字符A 对信号量1进行V操作 延时2s 退出线程 创建线程1执行函数,用于打印字符B 对信号量1进行P操作 打印字符B 延时1s 创建线程(4)程序执行效果如下:1.6八小题 (1)通过Makefile将project中的一个.c编译成.a,另一个.c调用.a的
17、函数,要求实现静态库的生成和调用,运行结果正确。 (2)编写静态库程序thread.c如下:#include void pf1(void) printf(*n); return;void pf2(void) printf(#n); return;该程序定义两个函数,分别打印不同的内容,该程序将被编译成.a静态库编写调用程序call.c如下:extern void pf1(void);extern void pf2(void);int main(void) pf1(); pf2(); return 0;该程序对静态库进行调用,调用静态库中的两个函数pf1和pf2。编写Makefile如下:CC=
18、gccCPPFLAGS=-cOBJS = thread.oSOURCE = thread.cCALL_SOURCE=call.cLIB = libthread.aEXEC=callAR=arthread: $OBJS$CC -c $SOURCE -o $OBJS $AR rcsv $(LIB) thread.o$CC -o $EXEC $CALL_SOURCE -L. -lthread.PHONY : cleanclean :-rm -f $OBJS $EXEC $LIBMakefile文件实现对静态库程序编译成.a静态库,并且编译调用静态库的程序call.c为可执行文件call(4)程序执行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 linux 课程设计 报告
限制150内