目 录
一、课程设计题目(问题)描述:
任务1、基础知识,完成以下任务:
Linux操作系统的安装、基本命令的使用,网络的配置,FTP服务器搭建,VI编辑器的使用,文件压缩方法。
任务2、Linux系统C程序设计的基本知识,完成以下任务
1)分别用if和switch判断一个数的奇偶性并输出结果。
2)用for语句编写程序,计算100到200之间所有奇数的和。
任务3、嵌入式Linux程序设计,完成以下任务
- 创建两线程,通过打印输出各自的线程号和打印次序,要求从打
印结果能看出两个线程是并发执行的。
- 创建两线程,A线程循环打印数组a[100],B线程循环将各数组成
员+1,要求利用互斥锁,使每次输出a[0]==a[99]。
- 创建两线程,A线程每2秒打印一次字母A,B线程每秒打印一次
字母B,要求利用同步信号量,使输出字母B总是在A之后。
任务4、Linux应用程序开发实践,任选以下任务之一完成:
2)实现一个简单shell。
二、课程设计目的和要求:
1、目的与任务:
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际应用问题进行有机结合,锻炼学生分析、解决实际问题的能力。
本课程设计采用理论指导与实践相结合的方式,系统地学习并实践嵌入式Linux程序开发技术。通过课程设计,学生可以熟练掌握Linux的基本操作,系统管理,并具备Linux下文件、进程、网络、GUI的开发方法,为实际应用开发打下坚实的基础。
2、目标
通过本次课程设计要求学生达到以下目标:
1)熟悉Linux操作系统具体操作(安装、基本命令、系统管理、FTP
服务器搭建)
2)熟悉Linux下C程序开发调试的基本过程。
3)熟悉嵌入式Linux进程及进程间通信
- 能够熟练编写Linux应用程序,包括文件、网络、图形等
3、要求
计算机科学与技术专业的同学3-4人一组。完成任务3的选择3个题目,任务2选择2题,任务4中题目选一题。
三、系统运行报告:
任务2、Linux系统C程序设计的基本知识,完成以下任务
1)分别用if和switch判断一个数的奇偶性并输出结果。
2)用for语句编写程序,计算100到200之间所有奇数的和。
任务3、嵌入式Linux程序设计,完成以下任务
1)创建两线程,通过打印输出各自的线程号和打印次序,要求从打
印结果能看出两个线程是并发执行的。
3)创建两线程,A线程循环打印数组a[100],B线程循环将各数组成
员+1,要求利用互斥锁,使每次输出a[0]==a[99]。
4)创建两线程,A线程每2秒打印一次字母A,B线程每秒打印一次
字母B,要求利用同步信号量,使输出字母B总是在A之后。
任务4、Linux应用程序开发实践,任选以下任务之一完成:
2)实现一个简单shell。
四、总结
通过这次嵌入式linux 的课程设计设计,让我对linux的设计编程有了更深的了解。特别别是对这次的linux 编程有了很大的进步,通过测试,编写的程序都能顺利运行。但由于时间紧迫,在很多地方还是做的不好,没能很深入的了解,所以我们课后要更加深入的去学习,自己动手时间多练习
- 参考文献:
【1】刘银水,肖正宇,孙伟.基于ARM-Linux的嵌入式WEB服务器[J].单片机与嵌入式系统应用;2007.06.
【2】杜宝祯,祝静,徐涢基,何鹏举.基于Linux和S3C2440的GPC控制器设计[J].单片机与嵌入式系统应用.2009.11.
【3】吴迅;基于Linux的嵌入式WEB服务器的研究[D].山东师范大学;2010.
【4】马长青.Linux环境下基于Web的图档管理系统的开发[D].山东农业大学;2005.
【5】孙亚军.基于ARM的嵌入式Linux平台的研究与实现[D].东北大学.2009.
【6】Linux程序设计(第3版) Neil Matthew Richard Stones 著 人 民邮电出版社
【7】嵌入式Linux应用程序开发详解 孙琼 人民邮电出版社
【8】http://www.mcuos.com/
六、代码附录:
源程序清单:
任务1:基础知识,完成以下任务:
Linux操作系统的安装、基本命令的使用,网络的配置,FTP服务器搭建,VI编辑器的使用,文件压缩方法。
任务2:Linux系统C程序设计的基本知识,完成以下任务
1)分别用if和switch判断一个数的奇偶性并输出结果。
#include "stdio.h"
void main()
{
int n;
printf("请输入一个整数\n");
scanf("%d",&n);
if(n%2==0)
printf("n为偶数!\n");
else
printf("n为奇数!\n");
}
2)用for语句编写程序,计算100到200之间所有奇数的和。
#include<stdio.h>
void main()
{
int i,sum=0;
for(i=101;i<200;i+=2)
{sum+=i;}
printf("sum=%d\n",sum);
}
任务3:嵌入式Linux程序设计,完成以下任务
1)创建两线程,通过打印输出各自的线程号和打印次序,要求从打印结果能看出两个线程是并发执行的。
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
pthread_t thread[2];
void thread1() {
printf("这是第一个线程\n");
for (int i = 0; i < 5; i++)
{
printf("线程1:pid=%d,n=%d\n", getpid(), i);
//pthread_nutex_lock(&nut);
sleep(2);
}
}
void thread2() {
printf("这是第二个线程\n");
for (int i = 0; i < 5; i++)
{
printf("线程2:pid=%d,n=%d\n", getpid(), i);
//pthread_nutex_lock(&nut);
sleep(2);
}
}
int main(void) {
int i, ret1,ret2;
ret1 = pthread_create(&thread[0], NULL, (void *)thread1, NULL);
if (ret1 != 0) {
printf("Create pthread1 error!\n");
exit(1);
}
ret2 = pthread_create(&thread[1], NULL, (void *)thread2, NULL);
if (ret2 != 0) {
printf("Create pthread2 error!\n");
exit(1);
}
pthread_join(thread[0], NULL);
pthread_join(thread[1], NULL);
return (0);
}
3)创建两线程,A线程循环打印数组a[100],B线程循环将各数组成员+1,要求利用互斥锁,使每次输出a[0]==a[99]。
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
pthread_t thread[2];
pthread_mutex_t mut;
int a[100];
void thread1() {
printf("这是第一个线程\n");
for (int i = 0; i <= 50; i++)
{
printf("线程1:pid=%d,a[i]=%d\n", getpid(), i);
pthread_mutex_lock(&mut);
pthread_mutex_unlock(&mut);
sleep(1);
}
}
void thread2() {
printf("这是第二个线程\n");
for (int i = 0; i <= 50; i++)
{
printf("线程2:pid=%d,a[i]=%d\n", getpid(), 99-i);
pthread_mutex_lock(&mut);
pthread_mutex_unlock(&mut);
sleep(1);
}
}
int main(void) {
int i, ret1,ret2;
ret1 = pthread_create(&thread[0], NULL, (void *)thread1, NULL);
if (ret1 != 0) {
printf("Create pthread1 error!\n");
exit(1);
}
ret2 = pthread_create(&thread[1], NULL, (void *)thread2, NULL);
if (ret2 != 0) {
printf("Create pthread2 error!\n");
exit(1);
}
pthread_join(thread[0], NULL);
pthread_join(thread[1], NULL);
return (0);
}
4)创建两线程,A线程每2秒打印一次字母A,B线程每秒打印一次字母B,要求利用同步信号量,使输出字母B总是在A之后。
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
pthread_t thread[2];
pthread_mutex_t mut;
void thread1() {
pthread_mutex_lock(&mut);
printf("这是第一个线程\n");
for (int i = 0; i <= 50; i++)
{
printf("线程1:pid=%d, A\n", getpid());
pthread_mutex_unlock(&mut);
sleep(1);
}
}
void thread2() {
pthread_mutex_lock(&mut);
printf("这是第二个线程\n");
for (int i = 0; i <= 50; i++)
{
printf("线程2:pid=%d, B\n", getpid());
pthread_mutex_unlock(&mut);
sleep(1);
}
}
int main(void) {
int i, ret1,ret2;
ret1 = pthread_create(&thread[0], NULL, (void *)thread1, NULL);
if (ret1 != 0) {
printf("Create pthread1 error!\n");
exit(1);
}
ret2 = pthread_create(&thread[1], NULL, (void *)thread2, NULL);
if (ret2 != 0) {
printf("Create pthread2 error!\n");
exit(1);
}
pthread_join(thread[0], NULL);
pthread_join(thread[1], NULL);
return (0);
}
任务4:Linux应用程序开发实践,任选以下任务之一完成:
2)实现一个简单shell。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
int main()
{
int i,j,status,l;
pid_t p;
char *command;
char **argv;
command=(char *)malloc(sizeof(char)*30);
argv=(char **)malloc(sizeof(char *)*30);
while(1)
{
printf("myshell>");
memset(command,0,sizeof(char)*30);
if(fgets(command,30,stdin)==NULL)
continue;
l=strlen(command)-1;
if(command[1]=='\n')
command[1]=0;
j=0;
argv[j]=command;
j++;
l=strlen(command);
for(i=0;i<1;i++)
{
if(command[i]==' ')
{
command[i]=0;
if(command[i+1] !=' ')
{
argv[j]=&command[i+1];
j++;
}
}
}
argv[j]=NULL;
p=fork();
if(p!=0)
{
waitpid(-1,&status,0);
}
else{
execve(argv[0],argv,NULL);
}
}
free(argv);
free(command);
return 0;
}