北京电子科技学院(BESTI)
实 验 报 告
课程:信息安全系统设计基础 班级: 1352
姓名:谈愈敏,闫佳歆
学号:20135220,20135202
成绩: 指导教师:娄嘉鹏 实验日期:2015.11.17
实验密级: 预习程度: 实验时间:15:30-18:00
仪器组次: 必修/选修:必修 实验序号:2
实验名称:多线程应用程序设计和串行端口程序设计
实验目的与要求:(1)了解多线程程序设计的基本原理。
(2)学习 pthread 库函数的使用。
(3)了解在 linux 环境下串行程序设计的基本方法。
(4)掌握终端的主要属性及设置方法,熟悉终端I /O 函数的使用。
(5)学习使用多线程来完成串口的收发处理。
实验仪器:
名称 |
型号 |
数量 |
arm |
UP-TECH |
1 |
PC机 |
XP |
1 |
虚拟机 |
REDHAT |
1 |
实验内容、步骤与体会:
- 实验过程的理解,实验指导书中知识点的理解。
(1)多线程应用程序设计
实验代码实现的是生产者、消费者之间的关系,它们共用同一段缓存区,生产者可以向内写入数据,消费者也可以从中读出数据。一个首要的问题是如何判定是生产者执行写还是消费者执行读?
方法是,首先获取一个互斥锁,有这个锁在就能保证只能进行两种行为中的一种,而不能同时进行。然后针对写入或者读出能够顺利进行,要先判断缓存区的情况,如果缓存区满则不能写入,缓存区空则不能读出。
而在实验过程中,首先先在redhat虚拟机中编译运行,然后利用NFS将可执行文件映射到arm机上即可。Arm机的配置和映射和实验1相同,需要注意的就是路径不能一味按照指导书来,而是要按照自己实际的路径去写。
(2)串行端口程序设计
这个就是区分两个线程,发送线程和接收线程,然后在主函数里完成打开串口设备、终端属性设置等等。因为已经给了代码和指导书,理解起来就相对简单,这个实验就是帮助我们熟悉串行端口的一系列设置和代码实现,比较不好理解的就是之前没有遇见过的头文件和函数,针对解释详细查看即可。
- 实验过程中遇到的问题以及解决方案。(下面只是例子,可以少写、可以增加其他你遇到的问题和解决方法)
(1)make无法使用
这次的实验比较简单,没有遇到什么大的难题,主要是make无法使用的问题,这个是由于Makefile中环境变量的设置和在本机中的不同导致的,两个解决方法,其一是把其中的环境变量修改一下,这个是在别人的帮助下完成的;其二是直接手动编译即可。我们选择的是直接手动编译,因为这个编译比较简单。
(2)端口设置
在第二个实验里,运行term时出现了如下错误:
/dev/ttyS0: No such file or directory
这个按照指导书的方法解决了:
[/mnt/yaffs] cd /dev
[/dev] ln –sf /dev/tts/0 ttyS0
这是因为在 Linux 下串口文件位于/dev 下,一般在老版本的内核中串口一为/dev/ttyS0 ,串口二为 /dev/ttyS1, 而在开发板中串口设备位于/dev/tts/下,因为开发板中没有ttyS0这个设备,所以我们要建立一个连接。
用另外一台主机连接串口2 进行收发测试时同样出现了类似的错误,需要建立如下的连接:
[/mnt/yaffs] cd /dev
[/dev] ln –sf /dev/tts/0 ttyS0
[/dev] ln –sf /dev/tts/1 ttyS1
3.体会
这次实验从具体实现上来看并不算难,因为指导书已经给的很详细,代码本身、代码的解释和可能遇到的问题及解决方法都已经给出,只需要按部就班的完成即可。但是对于代码内容的理解上还是有些困难,从理论到代码的延展,对多线程和串口的具体实现方法和代码本身的理解,是比实验过程一步步按图索骥走下来更加重要的。