一、设计方案及可行性分析

  1. 熟悉 Linux 开发环境
  2. 多线程应用程序设计
  3. 串行端口程序设计
  4. 中断实验

二、详细设计思路

1. 熟悉 Linux 开发环境

  • 建立工作目录:

在终端输入代码建立工作目录

[root@zxt smile]#	mkdir	hello

[root@zxt smile]#	cd	hello
  • 编写程序源代码

在终端输入

[root@zxt hello]#	vi	hello.c

打开hello.c,编写实验代码

#include <stdio.h>

main()

{

printf(“hello world \n”);

}

按Esc键后,输入:wq保存代码并退出。

  • 编写 Makefile

为了让 hello.c 程序能够运行,我们需要编写一个 Makefile 文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。

编写Makefile文件,在终端输入

[root@zxt hello]#	vi	Makefile

Makefile文件打开,按i键进入输入状态编写Makefile文件

CC= armv4l-unknown-linux-gcc

EXEC = hello
OBJS = hello.o CFLAGS += LDFLAGS+= –static all: $(EXEC) $(EXEC): $(OBJS) $(CC) $(LDFLAGS) -o $@ $(OBJS) clean: -rm -f $(EXEC) *.elf *.gdb *.o
  • 编译应用程序

Makefile文件编写完成后,需要在 hello.c的文件目录下运行“make”来编译我们的程序了。如果进行了修改,重新编译则运行:

[root@zxt hello]#	make clean

[root@zxt hello]#	make
  • 下载调试

在本地PC 机上启动 NFS 服务,并设置好共享目录。在建立好 NFS 共享目录以后,我们就可以进入 MINICOM 中建立开发板与本地PC 机之间的通讯。

[root@zxt hello]#	minicom
[/mnt/yaffs] mount -t nfs -o nolock 本地PC机IP地址:/arm2410cl /host

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

[root@zxt hello]#	cp hello	/root/share

[root@zxt hello]#	minicom

[/mnt/yaffs]	mount -t nfs -o nolock 192.168.0.56:/root/share	/host

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

[/mnt/yaffs]	cd	/host

[/host]	./hello

hello world

2. 多线程应用程序设计

  • 实验源代码与结构流程图

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

  • 主要函数分析:

下面我们来看一下,生产者写入缓冲区和消费者从缓冲区读数的具体流程,生产者首先要获得互斥锁,并且判断写指针+1 后是否等于读指针,如果相等则进入等待状态,等候条件变量 notfull;如果不等则向缓冲区中写一个整数,并且设置条件变量为 notempty,最后释放互斥锁。消费者线程与生产者线程类似,这里就不再过多介绍了。流程图如下:

  • 阅读源代及译应用编程序

进入 exp/basic/02_pthread 目录,使用 vi 编辑器或其他编辑器阅读理解源代码。运行 make 产生 pthread 可执行文件。

  • 下载和调试

切换到 minicom 终端窗口,使用 NFS mount 开发主机的/arm2410cl 到/host 目录。

进入/host/exp/basic/pthread目录,运行 pthread,观察运行结果的正确性。

3. 串行端口程序设计

  • 实验原理

异步串行 I /O 方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行 I/O 可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行 I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。

  • 编译应用程序

运行 make 产生 term 可执行文件

[root@zxt root]# cd /arm2410cl/exp/basic/03_tty/
[root@zxt 03_tty]# make
armv4l-unknown-linux-gcc -c -o term.o term.c
armv4l-unknown-linux-gcc -o ../bin/term term.o -lpthread
armv4l-unknown-linux-gcc -o term term.o -lpthread
[root@zxt 03_tty]# ls
Makefile Makefile.bak term term.c term.o tty.c
  • 下载调试

切换到 minicom 终端窗口,使用 NFS mount 开发主机的/arm2410cl 到/host 目录。进入 exp\basic\03_tty目录,运行 term,观察运行结果的正确性。

[root@zxt root]#	minicom
[/mnt/yaffs] mount -t nfs -o nolock 192.168.0.56:/arm2410cl /host
[/mnt/yaffs]cd /host/exp/basic/03_tty/
[/host/exp/basic/03_tty]./term read modem send data 123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX

由于内核已经将串口 1 作为终端控制台,所以可以看到 term 发出的数据,却无法看到开发主机发来的数据,可以使用另外一台主机连接串口 2 进行收发测试;这时要修改一下执行命令,在 term 后要加任意参数。

Ctrl+c 或者 ESC 可使程序强行退出。

4. 中断实验

  • S3C2410 中断处理

ARM920T 的异常向量表有两种存放方式,一种是低端存放(从 0x00000000 处开始存放),另一种是高端存放(从 0xfff000000 处开始存放)。ARM920T 能处理有 8 个异常,他们分别是:

Reset,Undefined instruction,Software Interrupt,Abort (prefetch),Abort (data),Reserved,IRQ,FIQ

  • 编译应用程序

运行 make 产生可执行文件 int-driver

[root@BC basic]# cd	10_init/
[root@BC 10_init]# make
armv4l-unknown-linux-gcc -c -I.. -Wall -O -D__KERNEL__ -DMODULE -I/home/kernel/linux-2.4.18-2410cl/include s3c2410-int.c -o s3c2410-int.o s3c2410-int.c: In function `s3c2410_IRQ3_fun': s3c2410-int.c:83: warning: unused variable `byte' s3c2410-int.c: In function `s3c2410_interrupt_init': s3c2410-int.c:190: warning: implicit declaration of function `set_external_irq'
[root@BC 10_init]# ls
  • 下载调试

切换到 minicom 终端窗口,使用 NFS mount 开发主机的/arm2410cl 到/host 目录,然后进入/host/exp/basic/ 10_int目录,用 insmod int-driver.o 命令插入 s3c2410-int 驱动,并用 lsmod 命令查看是否已经插入。

[/mnt/yaffs]mount -t nfs -o nolock 192.168.0.189:/arm2410cl /host

[/host/exp/basic]cd 10_int/

[/host/exp/10_init]ls

Makefile	s3c2410-int.c	s3c2410-int.o

[/host/exp/10_init ]insmod s3c2410-int.o

[/host/exp/10_init]lsmod

Module      Size     Used by    Tainted:P
s3c2410-int 2048 0(unused)
//发现驱动已经成功加载

设计特色

1. 设计中遇到的问题及解决方法

(1)makefile无法完成编译。如下图:

答:重新下载编译器,与旧编译器进行替换即可编译成功。

编译成功的图片如下:

这是之后跑出的helloworld和2-1的代码的图片

(2)minicom无法显示

答:需要将串口设置为ttyUSB0而不是教材上写的ttys0,因为我们是使用的USB转串口线。

(3)minicom乱码问题。

答:还未解决,之后使用了超级终端,问题的得到了解决。

(4)开发板无法ping通主机。

答:按照以下步骤解决:

  • 虚拟机使用桥接方式

  • 虚拟机连接方式设置

在虚拟机VMware里面:选择 edit(编辑) -> Vitual Network Editor(虚拟网络编辑器) ,选中VMnet0,在下面的VMnet Information中,点Bridge to(桥接到):选择自己的有线网卡(有线网卡可通过以太网属性查看,非无线网卡),然后选择虚拟机VMware右下角的网络设配器,进入虚拟机设置,选择连接方式Custom VMnet0(Bridged),完成保存。

  • 开发板网络设置

arm开发板与虚拟机主机的ip设置为同一网段。

  • 关掉各系统的防火墙。

之后即可ping通。

2. 调试过程中遇到的主要问题及解决方法

  • 编译程序的问题。

答:编译环境与实验指导书上的环境不同,故需要我们去主动修改代码,来配合我们现有的编译环境,如,书上给的是-lpthread,是旧时的编译语句,现在要替换为-pthread,诸如此类,十分考察我们的代码能力,经过这个问题,也让我对于自己的代码能力有了新的审视,以后会更加注意,记住学习更多的代码知识。

  • 串口程序2-3出现 segmentation fault

答:原因与第一个问题很像,因为系统不同,故需要更改代码里的一些值,

  • 关于共享文件夹nfs的建立。

安装NFS server软件

sudo apt-get install nfs-kernel-server

创建共享目录并将目录的权限改为777

mkdir -p sharechmod 777 share

配制文件vi /etc/exports

sudo vi /etc/export

添加以下条目

/home/lisp/share *(rw,sync,no_root_squash)

其中/home/lisp/share为共享目录, rw为可读写操作

开启nfs服务

sudo /etc/init.d/nfs-kernel-server start

把写好的文档拷贝到共享文件夹里,如下图

之后在超级终端里运行以下命令即可。

源代码及注释

实验报告内有详细代码。

个人报告

  • 个人贡献:

在课设中,我主要辅助解决实验中遇到的问题、查阅资料寻找解决方法等。因为新实验箱与我们之前使用过的实验箱不同,再加上要从头配置实验所用系统,有许多地方操作有差异,需要搜索解决方案。

  • 设计体会及收获

课设是一个把需求分析、程序编写、程序调试、撰写报告结合为一体的过程。在课设过程中,我们不仅锻炼了思维能力和查找资料的能力,更磨练了我们的团队合作精神。

刚拿到课设题目时觉得比较困难,后来跟小组同学讨论、查找解决办法,慢慢解决了许多问题,使我们解决问题的能力得到了提高。

20155224 聂小益 《基于Arm实验箱的接口测试和应用》 课程设计报告的更多相关文章

  1. 20155235 王玥 《基于Arm实验箱的接口测试和应用》 课程设计报告

    20155235 王玥 <基于Arm实验箱的接口测试和应用> 课程设计报告 一.设计方案及可行性分析 熟悉 Linux 开发环境 多线程应用程序设计 串行端口程序设计 中断实验 二.详细设 ...

  2. 20155338课程设计个人报告——基于ARM实验箱的Android交友软件的设计与实现

    课程设计个人报告--基于ARM实验箱的Android交友软件的设计与实现 个人贡献 实验环境的搭建 代码调试 在电脑上成功运行 研究程序代码撰写小组报告 一.实验环境 1.Eclipse软件开发环境: ...

  3. 课程设计个人报告——基于ARM实验箱的Android交友软件的设计与实现

    个人贡献 熟悉试验箱各元件功能以及连接组装试验箱 一.实验内容 研究实验箱串口.USB线的调通连接 二.实践步骤 1.打开实验箱,首先了解各元件功能 这个是LTE模块,也叫4G模块,具体的作用是硬件将 ...

  4. 20155224聂小益 - 我的技能与C语言学习

    20155224聂小益 - 我的技能与C语言学习 预备作业2 ● 你有什么技能比大多人(超过90%以上)更好? 我认为我可能有些技能身边有的人比较少有,但是要是超过90%以上我实在不敢保证.毕竟厉害的 ...

  5. 课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现

    课程设计个人报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.个人贡献 参与课设题目讨论及部分过程 资料收集 负责代码调试 捕鱼游戏相应功能的实现 实验环境 Eclipse软件开发环境: ARM实验 ...

  6. 课程设计小组报告——基于ARM实验箱的捕鱼游戏的设计与实现

    课程设计小组报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.任务简介 1.1 任务内容 捕鱼游戏这个项目是一个娱乐性的游戏开发,该游戏可以给人们带来娱乐的同时还可以给人感官上的享受,所以很受人们的 ...

  7. 《基于Arm实验箱的国密算法应用》课程设计 结题报告

    <基于Arm实验箱的国密算法应用>课程设计 结题报告 小组成员姓名:20155206赵飞 20155220吴思其 20155234昝昕明 指导教师:娄嘉鹏 设计方案 题目要求:基于Arm实 ...

  8. 20155234 昝昕明《基于ARM实验箱的国密算法应用》课程设计个人报告

    20155234 昝昕明<基于ARM实验箱的国密算法应用>课程设计个人报告 个人贡献 参与课设题目讨论及完成全过程: 资料收集: SM1算法及和ARM之间通信 负责串口代码调试: 协调完成 ...

  9. 20155224聂小益 2016-2017-2 《Java程序设计》第1周学习总结

    20155224聂小益 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 第一章 第一章内容不是很多,主要介绍了Java发展历程与Java的使用平台. JVM: ...

随机推荐

  1. SD从零开始45-46

    [原创] SD从零开始45 运输流程的控制 运输业务场景的例子Examples 一个公司可使用不同的运输业务场景,通过不同的处理类型或者运输方式来刻画: 要模型化这些不同的装运,你可以在配置中定义装运 ...

  2. 移动设备 小米2S不显示CD驱动器(H),便携设备,MTP,驱动USB Driver,MI2感叹号的解决方法

    小米2S不显示CD驱动器(H),便携设备,MTP,驱动USB Driver,MI2感叹号的解决方法 by:授客 QQ:1033553122 用户环境 操作系统:Win7 手机设备:小米2S   问题描 ...

  3. WOSA/XFS PTR Form解析库—头文件

    class AFX_EX_CLASS CNuXfsForm {public: CNuXfsForm(); ~CNuXfsForm(); /******************************* ...

  4. 'adb remount'的作用是什么?在什么情况下有用?

    'adb remount' 将 '/system' 部分置于可写入的模式,默认情况下 '/system' 部分是只读模式的.这个命令只适用于已被 root 的设备. 在将文件 push 到 '/sys ...

  5. Sofware-Engineering Zero

    第一部分:结缘计算机 与大部分同学一样,也是刚刚进入大学才接触编程,在第一堂C语言课上敲下了第一行属于自己的代码""Hello World",然后在摸索中开始自己的Cod ...

  6. sql server对并发的处理-乐观锁和悲观锁(转)

    假如两个线程同时修改数据库同一条记录,就会导致后一条记录覆盖前一条,从而引发一些问题. 例如: 一个售票系统有一个余票数,客户端每调用一次出票方法,余票数就减一. 情景: 总共300张票,假设两个售票 ...

  7. RHEL7系统管理常用工具

    RHEL7提供大量系统管理工具,简要记录一下各工具的作用,后续再详细说明用法. 工具 描述 /proc linux的内存镜像目录./proc/sys目录下的文件能被临时修改,从而改变linux内核参数 ...

  8. META-INF下文件读取

    protected String getProperty(String name) {        String file = "/META-INF/jndi.properties&quo ...

  9. SVN 远程访问

    第一种方法 https://www.cnblogs.com/Leo_wl/p/3475167.html#_label0 默认协议为:https 端口号:443 服务器地址:https://主机名/sv ...

  10. DevExpress05、TileControl、AlertControl

    TileControl控件 该控件是根据Windows 8的用户界面设计的,可以轻松地把各个控制块集成到窗体上. 1.   IndertBetweenGroups属性 控制两个Group之间的间距: ...