嵌入式应用课程设计(实训)报告书

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2
1.实训计划
2013.12.05~2013.12.05 2013.12.06、2013.12.09 2013.12.10~2013.12.12 2013.12.13~2013.12.13
选择实验任务,明确项目需求,查阅参考书籍 业务逻辑的分析和确定 项目分析和代码实现 项目演示、验收、评分
2.问题描述
9
6.技术原理与分析
主要内容:本课题在设计过程中所遇到的技术原理及分析。 1.Linux 下的 C 技术原理: 一、 Linux 下 C 语言编程环境概述 Linux 下的 C 语言程序设计与在其他环境中的 C 程序设计一样,主要涉及到编 辑器、编译链接器、调试器及项目管理工具。 (1)编辑器 Linux 中最常用的编辑器有 Vi(Vim) (2)编译链接器 编译是指源代码转化生成可执行代码的过程,它所完成工作主要如图 1 所示。在 Linu x 中,最常用的编译器是 Gcc 编译器。 (3)调试器 Gdb 是绝大多数 Linux 开发人员所使用的调试器,它可以方便地设置断点、单步 跟踪等,足以满足开发人员的需要。 (4)项目管理器 Linux 中的项目管理器“make”有些类似于 Windows 中 Visual C++里的“工程”, 它是一种控制编译或者重复编译软件的工具,另外,它还能自动管理软件编译的内容、 方式和时机,使程序员能够把精力集中在代码的编写上而不是在源代码的组织上。 二、 进入 Vi(vi 文件名) 1、 Vi 的模式 Vi 有 3 种模式,分别为命令行模式、插入模式及底行模式能,下面具体进行介 绍。 (1)命令行模式 用户在用 Vi 编辑文件时,最初进入的为一般模式。在该模式中可以通过上下移 动光标进行“删除字符”或“整行删除”等操作,也可以进行“复制”、“粘贴”等操作,但无 法编辑文字。 (2)插入模式 只有在该模式下,用户才能进行文字编辑输入,用户按[ESC]键回到命令行模式。 (3)底行模式
2
(5)编写 C 程:在 VC6.0 中编写 hello.c 文件的代码。 (6)编译 C 程序:打开 Ubuntu 系统中的“主文件夹”保存 hello.c 的文件,从 Windows 拖动到 Ubuntu 中即实现了复制文件,找到应用程序->附件->终端,使用命令 ls,可以 查看是否复制到此文件。使用命令 arm-linux-gcc –o hello hello.c 即可完成编译。主文件 夹上生成可执行文件,如图 2 所示:
图3
在我的电脑的地址栏输入 ftp://实验箱的 ip 地址,我们所使用的实验箱 ip 地址为 192.168.1.100 刚开始只有文件夹 www。
将文件复制到实验箱上:首先在 Ubuntu 的主文件夹中找到 hello 文件,先复制到 windows 中,然后复制到 ftp://192.168.1.100 下面,如图 4 所示:
九江学院 信息科学与技术学院 《嵌入式应用开发》课程设计
报告书
题 目:多线程式生产者-消费者同步互斥程序设计 专 业:计算机应用技术 班 级: 姓 名: 学 号: 同组人员: 指导老师: 设计时间:
目录
1.实训计划............................................................................................. 1 2.问题描述............................................................................................. 1 3.问题分析............................................................................................. 2 4.业务逻辑............................................................................................. 5 5.程序模块设计..................................................................................... 7 6.技术原理与分析...............................................................................10 7.系统测试........................................................................................... 15 8.心得体会........................................................................................... 21 9.参考文献........................................................................................... 22
3
图4
在超级终端中输入 ls 命令,可看到 hello 已被复制,如果 hello 文件名字不是蓝色 的,则说明不能执行此文件,因为未更改其权限,使用命令:chmod 777 hello,使用命 令./hello 便可执行。结果如图 5 所示。
图5
4
4.业务逻辑
这一部分需要详细描述解决问题的业务逻辑,即该实验到底应该怎么做。基本要 求:处理问题中的业务关系都要描述清楚。需要文字描述以及业务流图。
图2
(7)执行 hello.c 文件。若在终端上直接使用./hello 命令会出现“无法执行二进制文 件”的错误,这时需要使用到 FTP,是将编译好的文件,即可执行文件复制到实验箱。
(8)FTP 的使用。设置网段。右键单击“网上邻居”->属性->本地连接,双击本地连 接->属性,找到 TCP/IP,点击属性->高级->添加,添加的网段为:192.168.1.156,点击“确 定”。如图 3 所示:
6
5.程序模块设计
按照模块(即函数)画出每个函数的流程图,并配合必要的文字说明。 生产者线程的流程图,流程图如图 7 所示。
图7
说明:首先先判断设置的日历时间与 end_time,若小于则继续,否则退出线程。通过调用函 数 sem_wait(&avail)判断是否为空缓冲区。若无空缓冲区,则阻塞当前线程,若有则调 用函数 sem_wait(&mutex)等待对临界资源的使用权,当 mutex 为 1 时,表示获得临界 资源,可将产品放入缓冲区,及时输出缓冲区的内容。最后调用函数 sem_post(&mutex) 释放缓冲区使用权和 sem_post(&full)增加满缓冲区信号量的值。
(1) Ubuntu 10.10 的安装 我们采用在 Windows 下安装虚拟机后,再在虚拟机中安装 Linux 操作系统的方案。 首先在 Windows 上安装虚拟机软件,常用的虚拟机软件为 Vmware,如何在 Vmware 上安装 Ubuntu10.10,安装完后还要安装嵌入式 Linux 的交叉编译环境和开发库以及 ARM-Linux 的所有源码。
(2)流程图,总流程图如图 6 所示。
图6
5
(3)编写代码。本实验的代码中采用的有界缓冲区拥有 3 个单元,每个单元为 5 字 节。为了尽量体现每个信号量的意义,在程序中生产过程和消费过程Fra Baidu bibliotek随机(采用 0~5s 的随机时间间隔)进行的,而且生产者的速度比消费者的速度平均快两倍左右(这种 关系可以相反)。生产者一次生产一个单元的产品(放入“hello”字符串),消费者一 次消费一个单元的产品。
7
消费者线程的流程图,流程图如图 8 所示。
图8
说明:消费者线程,先判断设置的日历时间与 end_time,若小于则继续,否则退出 线程。调用函数 sem_wait(&full)判断是否有满缓冲区。若无满缓冲区,则阻塞当前线程, 若有则调用函数 sem_wait(&mutex)等待对临界资源的使用权。当 mutex 为 1 时,表示 获得临界资源,可将产品放入缓冲区,及时输出缓冲区的内容然后依次调用函数 sem_post(&mutex)和 sem_post(&empty)来释放缓冲区使用权和增加空缓冲区信号量的 值。
主函数的流程图,流程图如图 9 所示。
8
图9
说明:首先使用 mkfifo()创建有名管道,然后用 open()函数打开管道,使用 sem_init() 函 数 初 始 化 , 创 建 3 个 信 号 量 , 用 pthread_create() 函 数 创 建 两 个 线 程 , 再 使 用 pthread_join()函数将线程挂起,最后结束。
(1)信号量。这里使用 3 个信号量,其中两个信号量 avail 和 full 分别用于解决生 产者和消费者之间的同步问题,mutex 用于解决这里个线程直接的互斥问题。其中,avail 表示有界缓冲区中的空单元数,初始值为 N;full 表示有界缓冲区中的非空闲单元数, 初始值为 0;mutex 是互斥信号量,初始值为 1。
(2)VMware 的安装 首先找到其.exe 文件,双击,安装。打开此软件,双击桌面上的快捷方式,虚拟机 出现后,点击“打开此虚拟机”。 (3)在虚拟机上安装 Ubuntu 10.10 打开虚拟机,点击“Open a Virtual Machine”,弹出对话框,选择一配置过的 Ubuntu 系统,将光盘资料解压至要安装 Ubuntu 操作系统的磁盘中;选择.vmx 文件,打开返回 到虚拟机主页面。点击“开启其虚拟机”便可进行程序的开发。 3.1.2 对 hello world 程序的开发 (1)实验的开始在 PC 端做准备工作。首先需要将串口线、网线、电源线依次连接好, 完成硬件的连接。 (2)实验箱进入 Linux 操作系统。先打开实验箱的 power(开关)。首先进入的是 Android 系统,同时按 Vol+和 reset 键,reset 键按一下就,Vol+键按到出现凌阳的字样 即可。 (3) 打开 VM 虚拟机。打开虚拟机,会出现用户登录,密码输入 111111 即可,进 入后会看到 Ubuntu 界面。 (4)打开超级终端。在开始->附件->通讯->超级终端,名称任意,串口选用 COM1, 设置串口属性应该讲每位秒数设置为 115200,数据流控制选择无即可。超级终端会出 现 信 息 , 登 陆 成 功 后 , 配 置 ip 地 址 , 使 用 命 令 ipconfig eth0 –i 192.168.1.100 –m 255.255.255.0 –g 192.168.1.1 配置,然后使用 service network restart 命令, 使用 ifconfig eth0 查看本地的地址。
生产者
1 2 3 …N
消费者
图 1 “生产者—消费者”问题描述
这里要求使用有名管道来模拟有限缓冲区,并且使用信号量解决“生产者—消费者” 问题同步与互斥问题。
1
3.问题分析
这一部分以软件工程结构化分析方法中需求分析的内容为核心,对实验项目进行 详细的分析。基本要求:此部分内容非常重要,必须有详细的文字分析和相应的图例。 3.1 嵌入式 Linux 的 PC 开发环境
生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语: Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享 固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发 生的问题。有一个有限的缓冲池(这里用有名管道实现 FIFO 式缓冲区)和两个线程: 生产者和消费者,它们分别不停地那产品放入缓冲池和缓冲池中拿走产品。一个生产 者在缓冲区满的时候必须等待,一个消费者在缓冲区空的时候也必须等待。另外,因 为缓冲区是临界资源,所以生产者、消费者必须临界执行。它们之间的关系如图所示:
相关文档
最新文档