好文档 - 专业文书写作范文服务资料分享网站

2-嵌入式操作系统实验指导书(2024年5月更新)

天下 分享 时间: 加入收藏 我要投稿 点赞

《嵌入式操作系统》实验指导书

实验1 Linux编程基础

实验序号:1 适用专业:计算机科学与技术 一、实验目的

1、熟悉Vim的工作模式,熟练使用vim中的常见操作。

2、熟练掌握gcc编译命令及gdb的调试命令,通过对有问题程序的跟踪调试,进一步提高发现问题和解决问题的能力。

3、熟悉多文件的makefile的编写,熟悉各种形式的makefile,并且进一步加深对makefile中用户自定义变量、自动变量的理解。

4、使用autotools生成多文件的makefile,进一步掌握autotools的使用方法。 二、实验内容

1、vim使用练习

(1)在“/root”目录下建一个名为“vim”的目录。 (2)进入“vim”目录。

(3)将文件“/etc/inittab”复制到“vim”目录下。 (4)使用vim打开“vim”目录下的inittab.

(5)设定行号,指出设定initdefault(类似于“id:5:initdefault”)的所在行号。 (6)将光标移到该行。 (7)复制该行内容。

(8)将光标移到最后一行行首。 (9)粘贴复制行的内容。 (10)撤销第9步的动作。

(11)将光标移动到最后一行的行尾。 (12)粘贴复制行的内容。

(13)光标移到“si::sysinit:/etc/rc.d/rc.sysinit”。 (14)删除该行。 (15)存盘但不退出。 (16)将光标移到首行。

(17)插入模式下输入“Hello,this is vi world!”. (18)返回命令行模式。

(19)向下查找字符串“0:wait”。 (20)再向上查找字符串“halt”。

1

实验名称:Linux编程基础

学 时 数:4学时

(21)强制退出vim,不存盘。 2、用gdb调试程序的bug

(1)使用vi编辑器,将以下代码输入到名为greet.c的文件中。此代码的原意为输出倒序main函数中定义的字符串,但结果显示没有输出,代码如下所示。

#include

int display1(char *string); int display2(char *string);

int main() { }

int display1(char *string) { }

int display2(char *string1) {

char *string2; int size,i;

size=strlen(string1);

string2=(char *)malloc(size+1); for (i=0,i

string2[size-i]=string[i];

printf(“The original string is %s \\n”,string); char string[]=”Embedded Linux”; display1(string); display2(string);

string2[size+1]=’ ’;

printf(“The string afterward is %s\\n”,string2); }

(2)使用gcc编译这段代码,注意要加上“-g”选项以方便之后的调试。 (3)运行生成的可执行文件,观察运行结果。

(4)使用gdb调试程序,通过设置断点、单步跟踪,一步步找出错误所在。

2

(5)纠正错误,更改源程序并得到正确的结果。 3、编写包含多文件的makefile

(1)用vi在同一目录下编辑两个简单的hello程序,如下所示。 #hello.c

#include“hello.h” int main() { } #hello.h

#include

(2)仍在同一目录下用vim编辑makefile,且不使用变量替换,用一个目标体实现(即直接将hello.c和hello.h编译成hello目标体)。然后用make验证所写的makefile是否正确。

(3)将上述makefile使用变量替换实现。同样用make验证所编写的makefile是否正确。

(4)编辑另一个makefile,取名为makefile1,不使用变量替换,但用两个目标体实现(也就是首先将hello.c和hello.h编译为hello.o,再将hello.o编译为hello),再用make的“-f”选项验证这个makefile1的正确性。

(5)将上述makefile1使用变量替换实现。 三、实验步骤

根据实验内容要求完成实验。

printf(“Hello everyone!\\n”);

3

实验2 进程管理实验

实验序号:2

实验名称:进程管理实验

适用专业:计算机科学与技术(嵌入式系统) 学 时 数:4学时 一、实验目的

1、通过编写多进程程序,使读者熟练掌握fork()、exec()、wait()和waitpid()等函数的使用,进一步理解在Linux中多进程编程的步骤。

2、通过编写经典的“生产者—消费者”问题的实验,进一步熟悉Linux中的多线程编程,掌握用信号量处理线程间的同步和互斥问题。 二、实验内容

1、编写多进程程序

该实验有3个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程运行“ls -l”指令,另一个子进程在暂停5s之后异常退出,父进程先用阻塞方式等待第一个子进程的结束,然后用非阻塞方式等待另一个子进程的退出,等待收集到第二个子进程结束的信息,父进程就返回。参考流程图如图1所示。

开始 fork()创建两个子进程子进程1父进程阻塞式等待子进程1的结束等待1s子进程2是否结束?运行(调用execlp()执行“ls -l”命令)是子进程2运行(调用sleep函数)结束

图1 多进程实验流程图

2、多线程实验

编写“生产者—消费者”问题的实验,熟悉Linux中的多线程编程。

“生产者—消费者”问题描述如下。有一个有限缓冲区和两个线程:生产者和消费者。他们分别不停地把产品放入缓冲区和从缓冲区中拿走产品。一个生产者在缓冲区满的时候必须等待,一个消费者在 缓冲区空的时候也必须等待。另外,因为缓冲区是临界资源,所以生产者和消费者之间必须互斥执行。

要求使用有名管道来模拟有限缓冲区,并且使用信号量来解决“生产者—消费者”问题中

4

的同步和互斥问题。

使用3 个信号量,其中两个信号量 avail 和 full 分别用于解决生产者和消费者线程 之间的同步问题,mutex 是用于这两个线程之间的互斥问题。其中 avail 表示有界缓冲区中 的空单元数,初始值为 N;full 表示有界缓冲区中非空单元数,初始值为 0;mutex是互斥 信号量,初始值为 1。参考流程图如图2所示。

开始 建立有名管道 打开有名管道 初始化三个信号量 创建消费者和生 产者两个线程 生产者线程 P操作(avail) P操作(mutex) 读管道消费者线程 P操作(full) P操作(mutex) 写管道 V操作(full) V操作(mutex) 结束 V操作(avail) V操作 ) (mutex 图2 多线程实验流程图

三、实验步骤

1、根据参考流程图编写程序;

2、编译和运行程序代码,并观察运行结果。

5

2-嵌入式操作系统实验指导书(2024年5月更新)

《嵌入式操作系统》实验指导书实验1Linux编程基础实验序号:1适用专业:计算机科学与技术一、实验目的1、熟悉Vim的工作模式,熟练使用vim中的常见操作。2、熟练掌握gcc编译命令及gdb的调试命令,通过对有问题程序的跟踪调试,进
推荐度:
点击下载文档文档为doc格式
5u86p1wg2w6m3qp9xkwe9ersa9pruq00xc1
领取福利

微信扫码领取福利

微信扫码分享