嵌入式实验作业三份

发布 2022-07-02 03:34:28 阅读 2444

地理与生物信息学院。

2012/ 2013 学年第二学期。

实验报告。课程名称: 嵌入式系统

实验名称: 多线程应用程序设计

班级学号 b10090406

学生姓名周炳威

指导教师余雪勇

日期2013 年 4 月。

1、实验题目:

了解多线程程序设计的基本原理。

学习 pthread 库函数的使用。

二、 实验目的:

1.让同学们体验linux编程环境和实现过程。

2.加强同学们实际的动手编程能力。

三、 实验仪器:

pc机(装有虚拟机程序)

硬件:up-netarm2410-s 嵌入式实验平台、pc 机pentium 500 以上, 硬盘10g 以上。

四、 实验内容:

读懂 的源**,熟悉几个重要的pthread 库函数的使用。掌握共享锁和信号量的使用方法。进入/arm2410s/exp/basic/02_pthread 目录,运行make 产生pthread 程序,使用nfs 方式连接开发主机进行运行实验。

五、实验过程:

1.多线程程序的优缺点。

多线程程序作为一种多任务、并发的工作方式,有以下的优点:

1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系。

统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。

2) 使多cpu 系统更加有效。操作系统会保证当线程数不大于cpu 数目时,不同的线程运行。

于不同的cpu 上。

3) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立。

的运行部分,这样的程序会利于理解和修改。

libc 中的pthread 库提供了大量的api 函数,为用户编写应用程序提供支持。

2.实验源**与结构流程图。

本实验为著名的生产者-消费者问题模型的实现,主程序中分别启动生产者线程和消费者。

线程。生产者线程不断顺序地将0 到1000 的数字写入共享的循环缓冲区,同时消费者线程。

不断地从共享的循环缓冲区读取数据。流程图如图2.2.1 所示:

* the classic producer-consumer example.

* illustrates mutexes and conditions.

#include <>

#include <>

#include <>

#include ""

#define buffer_size 16

* circular buffer of integers. *

struct prodcons

/* write the data and advance write pointer */

b->buffer[b->writepos] =data;

b->writepos++;

if (b->writepos >=buffer_size) b->writepos = 0;

/* signal that the buffer is now not empty */

pthread_cond_signal(&b->notempty);

pthread_mutex_unlock(&b->lock);

* read and remove an integer from the buffer */

int get(struct prodcons * b)

int data;

pthread_mutex_lock(&b->lock);

/* wait until buffer is not empty */

while (b->writepos ==b->readpos)

/* read the data and advance read pointer */

data = b->buffer[b->readpos];

b->readpos++;

if (b->readpos >=buffer_size) b->readpos = 0;

/* signal that the buffer is now not full */

pthread_cond_signal(&b->notfull);

pthread_mutex_unlock(&b->lock);

return data;

#define over (-1)

struct prodcons buffer;

void * producer(void * data)

int n;

for (n = 0; n < 1000; n++)

put(&buffer, over);

printf("producer stopped!");

return null;

void * consumer(void * data)

int d;

while (1)

printf("consumer stopped!");

return null;

int main(void)

pthread_t th_a, th_b;

void * retval;

init(&buffer);

pthread_create(&th_a, null, producer, 0);

pthread_create(&th_b, null, consumer, 0);

/* wait until producer and consumer finish. *

pthread_join(th_a, &retval);

pthread_join(th_b, &retval);

《嵌入式系统实验》作业

用于验证一个常见的冲突问题。在这个问题中,有5个哲学家坐在一个圆桌上。食物摆在桌子中间,桌子上总共有5把叉子,每个哲学家的左右手各有一把。因为吃饭时,哲学家需要同时使用左手和右手的叉子,所以哲学家必须和他左边和右边的哲学家共享叉子。在这个实验中,假定哲学家每次吃饭的时间长度为单位1,吃完一次后则放下...

《嵌入式系统实验》作业

嵌入式系统实验 作业。实验1.hello world程序 20 实验要求 1 了解一种非vxworks的嵌入式系统,简述该操作系统。实验目的 的特点以及其开发环境的组成。2 在windows操作系统平台上安装workbench集成开发环境,新建一个类型为downloadable kernel mod...

嵌入式作业三

嵌入式课程实验报告。姓名 李冬祥。学号 08808003 小组成员 徐迎春。专业年级 电信081 指导教师 王东。实验时间 2011 5 25 西北农林科技大学机电学院。实验五 qt图形界面应用程序安装。一 实验目的 1.了解在 linux 下安装qt的基本步骤 2.学会在 qt 环境在 x11 平...