嵌入式系统实验指导书

发布 2022-10-21 09:54:28 阅读 6127

嵌入式系统。实。验。

指。导。

书。1.1 熟悉linux 开发环境。

一、实验目的。

熟悉linux 开发环境,学会基于mini6410 的linux 开发环境的配置和使用。使用linux 的arm -linux-gcc-4.5.

1 编译,使用基于nfs 方式的**调试,了解嵌入式开发的基本过程。

二、实验内容。

本次实验使用fedora 9.0 操作系统环境,安装arm-linux 的开发库及编译器。创建一个新目录,并在其中编写 和makefile 文件。

学习在linux 下的编程和编译过程,以及arm 开发板的使用和开发环境的设置。**已经编译好的文件到目标开发板上运行。

三、预备知识。

1.有c 语言基础。

2.会使用linux 下常用的编辑器。

3.掌握makefile 的编写和使用。

4.了解linux 下的编译程序与交叉编译的过程。

四、实验设备及工具(包括软件调试工具)

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

软件:pc机操作系统fedora9+minicom+arm-linux 开发环境

五、实验步骤。

1、建立工作目录。

2、编写程序源**。

在linux 下的文本编辑器有许多,常用的是vim 和xwindow界面下的gedit 等,我们在开发过程中推荐使用vim,用户需要学习vim 的操作方法,请参考相关书籍中的关于vim 的操作指南。 kdevelope、anjuta 软件的界面与vc6.0 类似,使用它们对于熟悉windows环境下开发的用户更容易上手。

实际的 源**较简单,如下:

我们可以是用下面的命令来编写 的源**,进入hello 目录使用vi 命令来编辑**:

按“i”或者“a”进入编辑模式,将上面的**录入进去,完成后按esc 键进入命令状态,再用命令“:wq”保存并退出。这样我们便在当前目录下建立了一个名为 的文件。

3、编写makefile

要使上面的 程序能够运行,我们必须要编写一个makefile 文件,makefile 文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,你只需要敲一个“make” 命令整个工程就可以实现自动编译,当然我们本次实验只有一个文件,它还不能体现出使用makefile 的优越性,但当工程比较大文件比较多时,不使用makefile 几乎是不可能的。下面我们介绍本次实验用到的makefile 文件。

下面我们来简单介绍这个makefile 文件的几个主要部分:

cc 指明编译器。

exec 表示编译后生成的执行文件名称。

objs 目标文件列表。

cflags 编译参数。

ldflags 连接参数。

all: 编译主入口。

clean :清除编译结果。

注意:“$cc) $ldflags) -o $@objs)” 和“-rm -f $(exec) *elf *.gdb *.

o” 前空白由一个tab 制表符生成,不能单纯由空格来代替。

与上面编写 的过程类似,用vi 来创建一个makefile 文件并将**录入其中

4、编译应用程序。

在上面的步骤完成后,我们就可以在hello 目录下运行“make”来编译我们的程序了。如果进行了修改,重新编译则运行:

注意:编译、修改程序都是在宿主机(本地pc 机)上进行,不能在minicom 下进行。

5、**调试。

在宿主pc 计算机上启动nfs 服务,并设置好共享的目录,具体配置请参照前面第一章第四节中关于嵌入式linux环境开发环境的建立。在建立好nfs 共享目录以后,我们就可以进入minicom 中建立开发板与宿主pc 机之间的通讯了。

如果不想使用我们提供的源码的话,可以再建立一个nfs 共享文件夹。如/root/share,我们把我们自己编译生成的可执行文件复制到该文件夹下,并通过minicom 挂载到开发板上。

再进入/host目录运行刚刚编译好的hello 程序,查看运行结果。

注意:开发板挂接宿主计算机目录只需要挂接一次便可,只要开发板没有重起,就可以一直保持连接。这样可以反复修改、编译、调试,不需要**到开发板。

六、思考题。

1.makefile 是如何工作的?其中的宏定义分别是什么意思?

1.2 多线程应用程序设计。

一、实验目的。

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

2. 学习pthread库函数的使用。

二、实验内容。

1、读懂的源**,熟悉几个重要的pthread库函数的使用。掌握共享锁和信号量的使用方法。

2、进入/arm6410/code/02_pthread目录,运行make产生pthread程序,使用nfs方式连接开发主机进行运行实验。

三、预备知识。

1.有c 语言基础。

2.会使用linux 下常用的编辑器。

3.掌握makefile 的编写和使用。

4.了解linux 下的编译程序与交叉编译的过程。

四、实验设备及工具。

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

软件:pc机操作系统fedora9+minicom+arm-linux 开发环境

五、实验原理。

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

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

提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作置于一个新的线程,可以避免这种尴尬的情况。

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

改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会有利于理解和修改。

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

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

实验为著名的生产者-消费者问题模型的实现,主程序中分别启动生产者线程和消费者线程。生产者线程不断顺序地将0到1000的数字写入共享的循环缓冲区,同时消费者线程不断地从共享的循环缓冲区读取数据。流程图如图2-1所示:

3 生产者写入共享的循环缓冲区函数put

void put(struct prodcons *b,int data)

pthread_mutex_lock(&b->lock); 获取互斥锁。

while ((b->writepos+1)%buffer_size ==b->readpos) /如果读写位置相同。

pthread_cond_wait(&b->notfull,&b->lock);

/等待状态变量b->notfull,不满则跳出阻塞。

b->buffer[b->writepos] =data; /写入数据。

b->writepos++;

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

pthread_cond_signal (&b->notempty); 设置状态变量。

pthread_mutex_unlock(&b->lock); 释放互斥锁。

4 消费者读取共享的循环缓冲区函数get

int get (struct prodcons *b)

int data;

pthread_mutex_lock(&b->lock); 获取互斥锁。

while (b->writepos ==b->readpos) /如果读写位置相同。

pthread_cond_wait(&b->notempty,&b->lock);

//等待状态变量b->notempty,不空则跳出阻塞。否则无数据可读。

data = b->buffer[b->readpos]; 读取数据。

b->readpos++;

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

pthread_cond_signal(&b->notfull); 设置状态变量。

pthread_mutex_unlock(&b->lock); 释放互斥锁。

return data;

5 生产、消费流程图:

生产消费流程图如下图2-2所示:

6、主要的多线程api

1、线程创建函数:

int pthread_create (pthread_t * thread_id,_const pthread_attr_t *_attr,void *(start_routine) (void *)void * restrict_arg);

2、获得父进程id

pthread_t pthread_self (void)

3、测试两个线程号是否相同:

int pthread_equal (pthread_t __thread1,pthread_t __thread2)

4、线程退出:

void pthread_exit (void * retval)

5、等待指定的线程结束:

int pthread_join (pthread_t __th,void **thread_return)

6、互斥量初始化:

pthread_mutex_init (pthread_mutex_t *,const pthread_mutexattr_t *)

7、销毁互斥量:

int pthread_mutex_destroy (pthread_mutex_t *_mutex);

嵌入式系统实验指导书

目录 1 第1章 el arm 830 实验系统的资源介绍 1 第2章基于arm系统资源的实验 30 实验一 ads1.2开发环境创建与简要介绍 31 实验二基于arm的汇编语言程序设计简介 39 实验三基于arm的c语言程序设计简介 44 实验四基于arm的硬件boot程序的基本设计 49 实验五...

嵌入式系统实验指导书

嵌入式系统 课程组。申屠浩鲍可进主编。计算机科学与通信工程学院计算机工程系。二 八年七月。目录。实验一 ads1.2 开发环境 3 1.实验目的 3 2.实验内容 3 3.实验步骤 3 4.c程序的相关说明 13 实验二 gnu交叉工具链的编译 17 1.实验目的 17 2.实验内容 17 3.实验...

嵌入式系统 实验指导书

大连民族学院。计算机技术与工程学院。嵌入式软件开发概论 实验指导书 1 1 学时。4 学时。2 实验目的。掌握嵌入式交叉编译原理 了解嵌入式交叉编译环境的结构及配置方法,熟悉linux下的nfs和samba服务的配置,掌握gcc编译命令的使用。3 实验内容。编写c语言源程序。利用交叉编译器进行交叉编...