熟悉Linux开发环境

实验一 熟悉Linux开发环境

一、实验目的

1.熟悉Linux开发环境,学习Linux开发环境的配置和使用,掌握Minicom串口终端的使用。

2.学习使用Vi编辑器设计C程序,学习Makefile文件的编写和armv4l-unkonown-linux-gcc编译器的使用,以及NFS方式的下载调试方法。

3.了解UP-NETARM2410-S嵌入式实验平台的资源布局与使用方法。

4.初步掌握嵌入式Linux开发的基本过程。

二、实验内容

本次实验使用Redhat Linux 9.0操作系统环境,安装ARM-Linux的开发库及编译器。创建一个新目录,并在其中编写hello.c和Makefile文件。学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。

三、预备知识

C语言的基础知识、程序调试的基础知识和方法,Linux的基本操作。

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

硬件:UP-NETARM2410-S嵌入式实验平台、PCPentium 500以上硬盘10G以上。

软件:PC机操作系统REDHAT LINUX 9.0MINICOMARM-LINUX开发环境

五、实验步骤

1、建立工作目录

[root@zxt smile]#  mkdir  hello

[root@zxt smile]#  cd  hello

2、编写程序源代码

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

实际的hello.c源代码较简单,如下:

include <stdio.h>

main()

{

printf(“hello world /n”);

}

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

[root@zxt hello]#  vi  hello.c

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

3、编写Makefile

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

CC 指明编译器

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

OBJS  目标文件列表

CFLAGS  编译参数

LDFLAGS  连接参数

all:  编译主入口

clean 清除编译结果

注意:“$(CC) $(LDFLAGS) -o $@ $(OBJS)”和“-rm -f $(EXEC) *.elf *.gdb *.o”前空白由一个Tab制表符生成,不能单纯由空格来代替。

与上面编写hello.c的过程类似,用vi来创建一个Makefile文件并将代码录入其中

[root@zxt hello]#  vi  Makefile

4、编译应用程序

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

[root@zxt hello]#  make clean

[root@zxt hello]#  make

 

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

5、下载调试

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

[root@zxt hello]#  minicom

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

注意: IP地址需要根据宿主PC机的实际情况修改

成功挂接宿主机的arm2410s目录后,在开发板上进入/host目录便相应进入宿主机的/arm2410s目录,我们已经给出了编辑好的hello.c和Makefile文件,它们在/arm2410s/exp/basic/01_hello目录下。用户可以直接在宿主PC上编译生成可执行文件,并通过上面的命令挂载到开发板上,运行程序察看结果。

如果不想使用我们提供的源码的话,可以再建立一个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

 

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

六、思考题

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

实验二 驱动程序的加载与Demo程序的执行

一、实验目的

1.进一步熟悉Linux开发环境,数练掌握Minicom串口终端的使用。

2.进一步熟悉UP-NETARM2410-S嵌入式实验平台的资源布局与使用方法。

3.学习在目标板上执行程序和加载驱动程序的方法。

二、 实验设备及工具

1. 硬件:UP-NETARM2410-S嵌入式实验平台,PIV2.4G/512M/120G开发主机。

2. 软件:WindowsXP+VMware5.0+RedHatLinux9.0,Minicom, vi, ARM-Linux开发环境。

三、 实验内容及要求

1. 运行实验箱ARM2410平台上不需要驱动程序就能执行的Demo演示程序,观察嵌入式平台上程序执行的结果。(5)

exp/hello, exp/pthread, ad, minigui/mgdemo, sound/madplay,

sound/mplayer2, web/httpd

2. 运行实验箱ARM2410平台上需要加载驱动程序的Demo演示程序,学习驱动模块的加载、卸载、查看方法。要求加载新的驱动程序前卸载不再使用的驱动程序。(3)

Motor/DC/., motor/STEP/., led/.

3. 编写一个Shell脚本程序,通过执行此Shell程序自动逐个运行上述所有的演示程序,对于需驱动程序支持的程序要能自动加载、卸载其驱动程序。(2)

 

 

实验三 多线程应用程序设计

一、 实验目的

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

2. 学习pthread函数的使用。

二、 实验设备及工具

3. 硬件:UP-NETARM2410-S嵌入式实验平台,PIV2.4G/512M/120G开发主机。

4. 软件:WindowsXP+VMware5.0+RedHatLinux9.0,Minicom, vi, ARM-Linux开发环境。

三、 实验内容

1. 将/arm2410s/exp/basic/02_pthread/目录中的文件拷贝到/home/name/中。详细阅读phread.c程序。Name是指自己姓名拼音或缩写。

2. 编译pthread.c程序并采用NFS服务与共享目录挂载的方式在开发平台上运行该程序,研究其输出结果,体会多线程程序的运行特点。(3)

3. 修改程序,若生产产品编号的个位数字为4,则视为不合格产品,不生产到缓冲区也不消费输出。将原来的输出格式改为:

993>>>>>>>>>>>>>>>made completed!

                                 993>>>>>>>>>>>>>been consumed!

   其中993是产品编号的样例,其值在1-999之间。(4)

4. 改变缓冲区的大小,观察其对生产与消费的影响。

5. 增加键盘输入线程,在生产消费线程运行的过程中随时能够输出按下的键值,若按下ESC键,能立即退出进程。若无任何按键,则生产线程结束时自动结束整个进程。(3)

四、注意事项

1. 注意拷贝操作,不能出错。

2. 注意要修改拷贝过来的文件属性的修改,chmod  777 filename 

3. 注意共享目录的挂载。

 

 

实验四 串行端口程序设计

一、实验目的

1. 进一步掌握多线程程序的设计方法。

2. 了解在Linux环境下串行端口程序设计的基本方法。

3. 掌握终端的主要属性及设置方法,熟悉终端I/O函数的调用

二、实验设备及工具

1.硬件:UP-NETARM2410-S嵌入式实验平台,PIV2.4G/512M/120G开发主机。

2.软件:WindowsXP+VMware5.0+RedHatLinux9.0,Minicom, vi, ARM-Linux开发环境。

三、实验内容

1. 阅读源代码,理解串行端口参数设置的含义,编译并在2410s平台上运行该程序。(2)

2. 修改原程序,使2410s平台通过串口逐字发送“***Welcome to 2008 BeiJing Olympic Game***!”字样的内容。(3)

3. 若上述内容保存在一文本文件中,在程序中打开此文件,将文件中的全部内容通过串口逐字发送到开发主机的显示器。发送完成后,程序自动退出。(1)

4. 通过线程数据共享的方式,将键盘上的按键内容发送到串口,ESC键停止发送并退出进程。(4)

5. 编写一个简单文件收发程序,实现串口文件的下载。(3)

 

 

 

 

实验五 A/D接口的设置与程序设计

 

一、实验目的

1. 了解AD转换的原理与主要技术参数,了解与ARM内部转变换器相关的寄存器及参数设置方法。

2. 学习在Linux环境下对s3c2410芯片中AD转换器的操作与控制。

3. 学习Linux+ARM系统中数据采集的后期处理方法以及C语言的具体实现。

二、实验设备及工具

1.硬件:UP-NETARM2410-S嵌入式实验平台,PIV2.4G/512M/120G开发主机。

2.软件:WindowsXP+VMware5.0+RedHatLinux9.0,Minicom, vi, ARM-Linux开发环境。

三、实验内容

1.阅读源代码,学习AD接口的设置和初始化方法。

2.利用交叉编译方法在自建目录中编译运行原程序。(2)

3.修改程序,使用滑动平均滤波算法对3个通道的转换结果进行处理,调整队列长度使响应速度和数据稳定度达到一个最佳效果。(4)

附加:如果V_CH1(通道1的值)在V_CH0与V_CH2之间,则在数据之后显示“Normal”字样,否则分别显示“Low”或“High”字样(2)。

4. 在上述数据滤波基础之上,增加线程键盘控制功能,若输入数字0、1、2则选择响应的通道采集数据、刷新显示,若按“Esc”键,则退出进程。(2)

5. 将内容3的屏幕输出结果逐行记录到一个文本文件中,记录行数不要超过1000行。(2)

 

 

实验六 直流电机驱动实验

 

一、实验目的

1.了解ARM微处理器的PWM端口,掌握相应寄存器的配置方法。

2.学习Linux内核驱动模块配置、编译、加载的步骤与方法。

3.在Linux环境下编程实现ARM系统PWM输出的基本方法,以及实现直流电机调速与控制的程序设计方法。

二、实验设备及工具

1.硬件:UP-NETARM2410-S嵌入式实验平台,PIV2.4G/512M/120G开发主机。

2.软件:WindowsXP+VMware5.0+RedHatLinux9.0,Minicom, vi, ARM-Linux开发环境。

三、实验内容

1.阅读源代码,了解定时器寄存器的配置方法。

2.配置、编译直流电机驱动程序模块。在/kernel2410s/kernel-2410s目录中运行make menuconfig,完成配置、编译过程。(3)

3.使用insmode命令加载刚才重新编译的直流电机驱动模块,交叉编译并运行直流电机调速控制程序。(3)

4.修改源程序,当在键盘上按“上”光标键时,电机速度逐渐增加;若按“下”光标键,则电机速度逐渐减小。若按下空格键,则电机停止转动,并切换一次转动方向。(4)

5.使用AD转换外接的电位器作为输入,编程设计一个通过电位器旋钮实现直流电机调速的系统。(3)

 

 

 

 

递推平均滤波法(又称滑动平均滤波法sliding average filter

  A、方法:

     把连续取N个采样值看成一个队列

     队列的长度固定为N

     每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)

     把队列中的N个数据进行算术平均运算,就可获得新的滤波结果

     N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4

  B、优点:

     对周期性干扰有良好的抑制作用,平滑度高

     适用于高频振荡的系统   

  C、缺点:

     灵敏度低

     对偶然出现的脉冲性干扰的抑制作用较差

     不易消除由于脉冲干扰所引起的采样值偏差

     不适用于脉冲干扰比较严重的场合

     比较浪费RAM

程序:

/*

*/

#define N 12 

 

char b[N];

int j=0;

 

char filter()

{

  char count;

  int  sum=0;

  For (j=0;j<N;j++)

  b[j++] = get_ad();

  if ( j == N )  j = 0;

  for ( count=0;count<N,count++)

   sum +b[count];

  return (char)(sum/N);

}


转自:http://blog.csdn.net/supertiger1023/article/details/4170705

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值