当前位置:文档之家› 北邮电子院嵌入式实验报告大四上

北邮电子院嵌入式实验报告大四上

北邮电子院嵌入式实验报告大四上
北邮电子院嵌入式实验报告大四上

嵌入式实验报告

学院:电子工程学院

一、实验目的

1、了解嵌入式系统及其相关基础知识。

2、了解宿主PC机与PXA270目标版,能正确连接宿主PC机与PXA270目标版。

3、学会在宿主机上安装Linux操作系统——RedHat9.0。、

4、学会建立宿主PC机端的开发环境。

5、学会配置宿主PC机端的超级终端。

6、配置宿主PC机端的TFTP服务,并开通此服务。

7、配置宿主PC机端的NFS服务,并开通此服务。

8、学会简单Linux驱动程序的设计。

二、实验内容

(一)基本实验

实验一到六为基础实验,主要是为了在熟悉实验操作平台的同时为后续实验搭建好软、硬件环境,配置好相关的协议、服务。

其中实验一是各个硬件的互联,搭建好了实验的硬件环境。实验二是在宿主PC端安装虚拟机,提供了实验需要的Linux操作系统。实验三是宿主PC端开发环境的安装与配置。

实验四是配置宿主PC机端的超级终端,使PC机与PXA270目标板之间可以通过串口通讯。在每次重启宿主PC机时,都需要重新将超级终端挂载到虚拟机上,挂载之前须通过ifconfig命令查看该机的IP地址,若其已经复位,须用命令:ifconfig eth0 192.168.0.100 up重置宿主PC机的IP地址。挂载虚拟机的代码为:

root

ifconfig eth0 192.168.0.50 up

mount –o nolock 192.168.0.100:/ /mnt

实验五是配置宿主PC机的TFTP服务。TFTP是简单文件传输协议。每次重启宿主PC机时,都要重启该服务,重启命令为:

service xinetd restart。

实验六是配置宿主PC机端NFS服务。NFS是指网络文件系统,它实现了文件在不同的系统间使用。当使用者想用远端档案时,只需调用“mount”就可以远端系统挂接在自己的档案系统之下。每次重启宿主PC机时,也都要重启该服务,重启命令为: service nfs restart

service nfs restart

(二)基本接口实验

实验十二、简单设备驱动程序

本次实验的目的是让我们动手实践一个简单的字符型设备驱动程序,学习Linux驱动程序构架,学习在应用程序中调用驱动。

驱动程序代码及注释为:

// 头文件

#include

#include

#include

#include

#include

#include

#include

#define SIMPLE_HELLO_MAJOR 96 // 定义主设备号HELLO DEVICE MAJOR

#define OURS_HELLO_DEBUG // 定义标识符

#define VERSION "PXA2700EP-SIMPLE_HELLO-V1.00-060530" // 定义版本号

void showversion(void) //显示版本的函数

{

printk("***************************************");

printk("\t %s \t\n",VERSION);

printk("***************************************");

}

/* --------------------------------------------------------------------- read:用于在指定文件描述符中读取数据

file:是文件指针

buf:读取数据缓存区

count:请求传输的字节数

f_ops:文件当前偏移量

当读取标识符OURS_HELLO_DEBUG时,打印信息,然后返回count

------------------------------------------------------------------------*/ ssize_t SIMPLE_HELLO_read (struct file * file ,char * buf, size_t count, loff_t * f_ops)

{

#ifdef OURS_HELLO_DEBUG

printk("SIMPLE_HELLO_read[--kernel--]\n");

#endif

return count;

}

/* -------------------------------------------------------------------

write:用于向打开的文件写数据

file:是文件指针

buf:写入数据缓存区

count:求传输的字节数

f_ops:文件当前偏移量

当读取标识符OURS_HELLO_DEBUG时,打印信息,然后返回count

------------------------------------------------------------------------*/ ssize_t SIMPLE_HELLO_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops)

{

#ifdef OURS_HELLO_DEBUG

printk("SIMPLE_HELLO_write[--kernel--]\n");

#endif

return count;

}

/* -------------------------------------------------------------------

ioctl:对设备的I/O通道进行管理的函数

inode:设备节点

flip:打开的一个文件

cmd:驱动程序的特殊命令编号

data:接收剩余参数

------------------------------------------------------------------------*/ ssize_t SIMPLE_HELLO_ioctl (struct inode * inode ,struct file * file, unsigned int cmd, long data)

{

#ifdef OURS_HELLO_DEBUG

printk("SIMPLE_HELLO_ioctl[--kernel--]\n");

#endif

return 0;

}

/*------------------------------------------------------------------------ open:打开函数

inode:打开文件所对应的i节点,获取从设备号

flip:打开的一个文件

open()方法最重要的是调用了宏MOD_INC_USE_COUNT,这个宏主要用来使驱动程序使用计数器,避免不正确卸载程序

------------------------------------------------------------------------*/ ssize_t SIMPLE_HELLO_open (struct inode * inode ,struct file * file)

{

#ifdef OURS_HELLO_DEBUG

printk("SIMPLE_HELLO_open[--kernel--]\n");

#endif

MOD_INC_USE_COUNT;

return 0;

}

/* ------------------------------------------------------------------------ released:关闭函数

Inode:打开文件所对应的i节点,主要获取从设备号

flip:打开的一个文件

release()方法最重要的是调用了宏MOD_DEC_INC_USE_COUNT,这个宏主要用来减少驱动程序使用计数器

------------------------------------------------------------------------*/ ssize_t SIMPLE_HELLO_release (struct inode * inode ,struct file * file)

{

#ifdef OURS_HELLO_DEBUG

printk("SIMPLE_HELLO_release[--kernel--]\n");

#endif

MOD_DEC_INC_USE_COUNT;

return 0;

}

struct file_operations HELLO_ops ={ // SIMPLE_HELLO设备向系统注册open: SIMPLE_HELLO_open,

read: SIMPLE_HELLO_read,

write: SIMPLE_HELLO_write,

ioctl: SIMPLE_HELLO_ioctl,

release: SIMPLE_HELLO_release,

};

/* ------------------------------------------------------------------------ INIT:驱动程序初始化

devfs_register_chrdev(SIMPLE_HELLO_MAJOR,"hello_serial_ctl",& HELLO_ops)最为主要

devfs_register_chrdev注册设备驱动程序,包括主设备号、驱动程序名、结构体指针

------------------------------------------------------------------------*/ static int __init HW_ HELLO_init(void)

{

int ret = -ENODEV;

ret = devfs_register_chrdev(SIMPLE_HELLO_MAJOR, "hello_serial_ctl",& HELLO_ops);

showversion();

if(ret<0)

{

printk("pxa270 init_module failed with %d \n[--kernel--]",ret);

}

else

{

printk("pxa270 hello_driver register success!!![--kernel--]\n");

}

return ret;

}

static int __init pxa270_ HELLO_init(void) //模块初始化函数,调用HW_ HELLO_init 函数

{

int ret = -ENODEV;

#ifdef OURS_HELLO_DEBUG

printk("pxa270_ HELLO_init[--kernel--]\n");

#endif

ret = HW_ HELLO_init();

if (ret)

return ret;

return 0;

}

/*------------------------------------------------------------------------

模块卸载函数

devfs_unregister_chrdev(SIMPLE_HELLO_MAJOR,"hello _ctl")最为主要

devfs_unregister_chrdev卸载设备驱动程序,包括主设备号、驱动程序名

------------------------------------------------------------------------*/ static void __exit cleanup_ HELLO_ctl(void)

{

#ifdef OURS_HELLO_DEBUG

printk("cleanup_HELLO_ctl[--kernel--]\n");

#endif

devfs_unregister_chrdev (SIMPLE_HELLO_MAJOR, "hello_ctl" );

}

MODULE_DESCRIPTION("simple hello driver module"); //描述信息

MODULE_AUTHOR("liduo"); //驱动程序作者姓名

MODULE_LICENSE("GPL");

module_init(pxa270_HELLO_init); //指定驱动程序初始化函数module_exit(cleanup _HELLO_ctl); //指定驱动程序卸载函数

Makefile文件代码:

#TOPDIR:=$(shell cd ..; pwd)

TOPDIR:=.

KERNELDIR=/pxa270_linux/linux

INCLUDEDIR=$(KERNELDIR)/include

CROSS_COMPILE=arm-linux-

AS =$( CROSS_COMPILE)as

LD =$( CROSS_COMPILE)ld

CC =$( CROSS_COMPILE)gcc

CPP =$( CC) -E

AR =$( CROSS_COMPILE)ar

NM =$( CROSS_COMPILE)nm

STRIP =$( CROSS_COMPILE)strip

OBJCOPY=$( CROSS_COMPILE)objcopy

OBJDUMP=$( CROSS_COMPILE)objdump

CFLAGS+=-I..

CFLAGS+=-Wall –O –D_KERNEL_ -DMODULE –I$(INCLUDEDIR)

TARGET = pxa270_hello_drv.o

modules: $(TARGET)

all: $(TARGET)

pxa270_hello_drv.o:pxa270_hello_drv.c

$(CC) -c $(CFLAGS) $^ -o $@

clean:

rm -f *.o *~ core .depend

Makefile文件的内容用于执行编译工作,一个Makefile文件包括:①由make工具创建的目标体(target),通常是目标文件或可执行文件;②要创建目标体所依赖的文件(dependency_file);③创建每个目标需要运行的命令(command)。

以上两个文件编辑完成后后,用make modules编译驱动程序,编写测试文件

simple_test_driver.c,然后GCC编辑器编译测试程序生成测试文件。成功生成测试文件后用超级终端开始挂载,加载驱动程序,使用命令./test测试,观察测试结果,实验完成。

实验十三 CPU GPIO驱动程序设计

本实验是让我们在linux系统中插入自己的驱动程序,调用它。实现用CPU GPIO控制外部LED,利用PXA270核心板上的LED验证我们的工作。

驱动程序代码:

驱动程序代码与实验十二无大区别,下面列出需要补充的代码。

一、补充代码

补充代码1:

#ifdef OURS_GPIO_LED_DEBUG

printk(“SIMPLE_GPIO_LED_write [--kernel--]\n”);

#endif

return count;

补充代码2:

#ifdef OURS_GPIO_LED_DEBUG

printk(“SIMPLE_GPIO_LED_open [--kernel--]\n”);

#endif

补充代码3:

open: SIMPLE_GPIO_LED_open,

read: SIMPLE_GPIO_LED_read,

write: SIMPLE_GPIO_LED_write,

ioctl: SIMPLE_GPIO_LED_ioctl,

release: SIMPLE_GPIO_LED_release,

不同之处:GPIO_LED,主文件名、

二、Makefile文件:

将实验十二相关代码作如下修改即可:

TARGET = pxa270_gpio_led_drv.o

modules: $(TARGET)

all: $(TARGET)

pxa270_gpio_led_drv.o:pxa270_gpio_led_drv.c

$(CC) -c $(CFLAGS) $^ -o $@

三、作业代码

要求:使得目标板的核心板上的LED闪烁产生亮7秒,灭5秒的效果。

作业主要代码:

while(1)

{ ioctl(fd,LED_OFF);

sleep(5); //原来为sleep(1);

ioctl(fd,LED_ON);

sleep(7); //原来为sleep(1);

}

不同之处:改变代码中加粗位置括号数字,可以改变灯亮和熄灭的时间比

四、测试显示

测试时,超级终端上的显示如下:

实验十四中断实验

本实验是让我们学习中断的相关概念,以及Linux系统是如何处理中断的,并且学会编写获取和处理外中断的驱动程序。

一、补充代码

补充代码1:

printk(“*****************************************\n”);

printk(“\t %s \t\n”,VERSION);

printk(“************************************************\n\n”);

补充代码2:

#ifdef OURS_GPIO_LED_DEBUG

printk(“SIMPLE_GPIO_LED_read [--kernel--]\n”);

#endif

return count;

补充代码3:

#ifdef OURS_GPIO_LED_DEBUG

printk(“SIMPLE_GPIO_LED_write [--kernel--]\n”);

#endif

return count;

补充代码4:

open: SIMPLE_INT_open,

read: SIMPLE_INT_read,

write: SIMPLE_INT_write,

ioctl: SIMPLE_INT_ioctl,

release: SIMPLE_INT_release,

二、Makefile文件如实验十三做相应修改。

三、测试时,超级终端上显示如下:

实验十五数码管显示驱动实验

本实验中,我们要编驱动程序以实现在Linux系统下控制LED数码管的显示。

一、补充代码

补充代码1:

printk(“*****************************************\n”);

printk(“\t %s \t\n”,VERSION);

printk(“************************************************\n\n”);

补充代码2:

#ifdef OURS_HELLO_DEBUG

printk(“SERIAL_LED_read [--kernel--]\n”);

#endif

return count;

补充代码3:

#ifdef OURS_HELLO_DEBUG

printk(“SERIAL_LED_write [--kernel--]\n”);

#endif

return count;

补充代码4:

#ifdef OURS_HELLO_DEBUG

printk(“SERIAL_LED_ioctl [--kernel--]\n”);

#endif

return 0;

补充代码5:

#ifdef OURS_HELLO_DEBUG

printk(“SERIAL_LED_open [--kernel--]\n”);

#endif

MOD_INC_USE_COUNT;

return 0;

补充代码6:

#ifdef OURS_HELLO_DEBUG

printk(“SERIAL_LED_release [--kernel--]\n”);

#endif

MOD_DEC_USE_COUNT;

return 0;

补充代码7:

open: SERIAL_LED_open,

read: SERIAL_LED_read,

write: SERIAL_LED_write,

ioctl: SERIAL_LED_ioctl,

release: SERIAL_LED_release

补充代码8:

int ret = -ENODEV;

ret = devfs_register_chrdev(SERIAL_LED_MAJOR, “serial_led_ctl”, &SERIAL_LED_ops);

Showversion();

If(ret<0)

{

printk(“pxa270 init_module failed with %d\n [--kernel--]”,ret );

return ret;

else

{

printk(“pxa270 serial_led_driver register success!!! [--

kernel--]\n”);

}

return ret;

补充代码9:

int ret = -ENODEV;

#ifdef OURS_HELLO_DEBUG

printk(“pxa270_SERIAL_LED_init [--kernel--]\n”);

#endif

ret = HW_SERIAL_LED_init();

if(ret)

return ret;

return 0;

补充代码10:

#ifdef OURS_HELLO_DEBUG

printk(“cleanup_SERIAL_LED [--kernel--]\n”);

#endif

devfs_unregister_chrdev(SERIAL_LED_MAJOR, “serial_led”);

补充代码11:

MODULE_DESCRIPTION(“serial_led driver module”);

MODULE_AUTHOR(“liduo”);

MODULE_LICENSE(“GPL”);

module_init(pxa270_SERIAL_LED_init);

module_exit(cleanup_SERIAL_LED);

二、Makefile文件与实验十四相同,只需作相应修改即可

三、作业代码

1、实现目标板上的LED数码管循环显示数字9-0。

for(count=0;count<10;count++)

{

data[0] = buf[9-count]; //原来为data[0] = buf[count]

ret=write(fd,data,1);

sleep(1);

}

修改之处:将显示的数有buf[count]改为buf[9-count],实现反向循环显示。

2、实现目标板上的LED数码管循环显示数字2、4、6、8、0或者8、6、4、2、0。

代码:

for(count=0;count<10;count+=2) //原来为count++

{data[0] = buf[count];

ret=write(fd,data,1);

sleep(1);

}

修改之处:修改count的变化方式,让其每次增加2,而不是1,使0、2、4、6、8循环显示,如要循环显示8、6、4、2、0的话,只要在上述代码中将buf[count]改为buf[8-count]即可。

四、测试显示:

测试时,显示如下:

作业1:作业2:

实验十六 LED点阵驱动程序设计

本实验要求我们学会编写驱动程序,实现在Linux系统下控制LED点阵显示,并在此基础上稍加改进,实现对LED的控制。

驱动程序代码:

一、补充代码

补充代码1:

printk(“*****************************************\n”);

printk(“\t %s \t\n”,VERSION);

printk(“************************************************\n\n”);

补充代码2:

#ifdef OURS_LED_DEBUG

printk(“SIMPLW_LED_read [--kernel--]\n”);

#endif

return count;

补充代码3:

#ifdef OURS_LED_DEBUG

printk(“SIMPLE_LED_ioctl [--kernel--]\n”);

#endif

return 0;

补充代码4:

open: SIMPLE_LED_open,

read: SIMPLE_LED_read,

write: SIMPLE_LED_write,

ioctl: SIMPLE_LED_ioctl,

release: SIMPLE_LED_release

补充代码5:

int ret = -ENODEV;

#ifdef OURS_LED_DEBUG

printk(“pxa270_LED_CTL_init [--kernel--]\n”);

#endif

ret = HW_LED_CTL_init();

if(ret)

return ret;

return 0;

补充代码6:

#ifdef OURS_LED_DEBUG

printk(“cleanup_LED_ctl [--kernel--]\n”);

#endif

devfs_unregister_chrdev(SIMPLE_LED_MAJOR, “led_ctl”);

二、Makefile程序仍然可以用前一个实验的,只要把相关函数名改了就可以,此处不再赘述。

三、作业代码

1、按横方向隔行扫描led点阵数码管。

代码:

for (i=1;i<=4;i++) { //原来为i<8

buf[0]=c;

buf[1]=~r; // row

for (j=1;j<=8;j++) {

write(fd,buf,2);

printf ("buf[0],buf[1]: [%x,%x]\n",buf[0],buf[1]);

usleep(200000); // sleep 0.2 second

c = c<<1;

buf[0]=c; // column

}

c = 1;

r = r<<2; } //原来为r=r<<1

修改之处:外层for循环中间i<8改为i<4,同时,将else中的r=r<<1改为r<<2。这样就可以让点阵在显示时跳跃一行进行显示。

2、按竖方向顺序扫描led点阵数码管。

代码:

for (i=1;i<=8;i++) {

buf[0]=c;

buf[1]=~r; // row

for (j=1;j<=8;j++) {

write(fd,buf,2);

printf ("buf[0],buf[1]: [%x,%x]\n",buf[0],buf[1]);

usleep(200000); // sleep 0.2 second

r = r<<1; //原来此处为c=c<<1

buf[1]=~r; //原来此处为buf[1]=~c

}

r = 1; //原来此处为c=1

c = c<<1; //原来此处为r=r<<1

修改之处(现对于最初的测试程序,而不是作业1的测试程序):将r和c 进行对调。实现将横和竖的对调,已达到竖方向扫描的目的。

四、测试显示

测试时,超级终端显示如下:

作业1:作业2:

实验十七 AD驱动程序

本实验要求我们学会编写驱动程序对模拟量输入进行采集,并转换为数字量显示在超级终端上,从而实现AD转换。

驱动程序代码

一、补充代码

补充代码1:

printk(“*****************************************\n”);

printk(“\t %s \t\n”,VERSION);

printk(“************************************************\n\n”);

补充代码2:

#ifdef OURS_HELLO_DEBUG

printk(“SIMPLE_HELLO_read [--kernel--]\n”);

#endif

return count;

补充代码3:

#ifdef OURS_HELLO_DEBUG

printk(“SIMPLE_HELLO_write [--kernel--]\n”);

#endif

return count;

补充代码4:

#ifdef OURS_HELLO_DEBUG

printk(“SIMPLE_HELLO_open [--kernel--]\n”);

#endif

MOD_INC_USE_COUNT;

return 0;

补充代码5:

#ifdef OURS_HELLO_DEBUG

printk(“SIMPLE_HELLO_release [--kernel--]\n”);

#endif

MOD_DEC_USE_COUNT;

return 0;

补充代码6:

open: SIMPLE_HELLO_open,

read: SIMPLE_HELLO_read,

write: SIMPLE_HELLO_write,

ioctl: SIMPLE_HELLO_ioctl,

release: SIMPLE_HELLO_release

补充代码7:

ad_ucb = ucb1x00_get();

int ret = -ENODEV;

ret = devfs_register_chrdev(ADCTL_MAJOR, “ad_ctl”,

&adctl_ops);

Showversion();

If(ret<0)

{

printk(“pxa270 init_module failed with %d\n [--kernel--]”,ret );

return ret;

}

else

{

printk(“pxa270 serial_led_driver register success!!! [--

kernel--]\n”);

}

return ret;

补充代码8:

int ret = -ENODEV;

#ifdef OURS_HELLO_DEBUG

printk(“pxa270_AD_CTL_init [--kernel--]\n”);

#endif

ret = HW_AD_CTL_init();

if(ret)

return ret;

return 0;

补充代码9:

#ifdef OURS_HELLO_DEBUG

printk(“cleanup_AD_ctl [--kernel--]\n”);

#endif

devfs_unregister_chrdev(ADCTL_MAJOR, “ad_ctl”);

二、Makefile文件可以用前一个程序的文件,只要将相应部分的代码修改即可

三、作业代码

要求:将UCB_ADC_INP_AD0换为其他通道并观察。

代码:

for(i=0;i<50;i++)

{

Val0 = ioctl(fd,UCB_ADC_INP_AD1,0);

usleep(100);

val1 = ioctl(fd,UCB_ADC_INP_AD0,0);

printf(“val0 = %d\tval1 = %d\n”,val0,val1;

usleep(500000);

}

修改之处:只需交换AD1和AD0即可实现输出通道的改变。

四、测试时显示

测试时、超级终端显示如下:

实验十八 DA驱动程序

本实验要求我们编写驱动程序,实现将数字信号转换成模拟信号并在示波器上显示出模拟信号波形,即实现DA转换。

驱动程序代码:

一、补充代码

补充代码1:

#include“../AD/pxa_ad_drv.h” /引用AD驱动程序的头文件/

补充代码2:

printk(“*****************************************\n”);

printk(“\t %s \t\n”,VERSION);

printk(“************************************************\n\n”);

补充代码3:

#ifdef OURS_DA_DEBUG

printk(“SIMPLE_DA_read [--kernel--]\n”);

#endif

return count;

补充代码4:

#ifdef OURS_DA_DEBUG

printk(“SIMPLE_DA_write [--kernel--]\n”);

#endif

return count;

补充代码5:

#ifdef OURS_DA_DEBUG

printk(“SIMPLE_DA_ioctl [--kernel--]\n”);

#endif

return 0;

补充代码6:

#ifdef OURS_DA_DEBUG

printk(“SIMPLE_DA_open [--kernel--]\n”);

#endif

MOD_INC_USE_COUNT;

return 0;

补充代码7:

open: SIMPLE_DA_open,

read: SIMPLE_DA_read,

write: SIMPLE_DA_write,

ioctl: SIMPLE_DA_ioctl,

release: SIMPLE_DA_release

补充代码8:

int ret = -ENODEV;

ret = devfs_register_chrdev(SIMPLE_DA_MAJOR, “DA_ctl”,

&DA_ctl_ops);

Showversion();

If(ret<0)

{

printk(“pxa270 init_module failed with %d\n [--kernel--]”,ret );

return ret;

}

else

{

printk(“pxa270 serial_led_driver register success!!! [-- kernel--]\n”);

}

return ret;

补充代码9:

int ret = -ENODEV;

#ifdef OURS_DA_DEBUG

printk(“pxa270_DA_CTL_init [--kernel--]\n”);

#endif

ret = HW_DA_CTL_init();

if(ret)

return ret;

return 0;

补充代码10:

#ifdef OURS_DA_DEBUG

printk(“cleanup_DA_ctl [--kernel--]\n”);

#endif

devfs_unregister_chrdev(SIMPLE_DA_MAJOR, “DA_ctl”);

补充代码11:

MODULE_DESCRIPTION(“serial_led driver module”);

MODULE_AUTHOR(“liduo”);

MODULE_LICENSE(“GPL”);

module_init(pxa270_DA_CTL_init);

module_exit(cleanup_DA_ctl);

二、Makefile文件可以继续用前面程序Mekefile的代码,只需要将相应部分的代码修改即可。

三、作业代码

要求:输出三角波。

代码:(需要修改部分)

//---------------------print--------------------

void da_create_sin(int fd)

{

unsigned char buf[(int)POINT];

unsigned char*c;

unsigned long I;

int j;

double x;

for (j=0;j

x=(j/POINT)*(5*M_PI); //此处原来为x=sin((j/POINT

//*(2*M_PI))

#ifdef OURS_DEBUG

printf(“%f\t”,x);

#endif

buf[j] = (unsigned char)255*(x/2+1)/2;

#ifdef OURS_DEBUG

printf(“%x\n”, buf[j]);

#endif

}

printf(“create sin wave\n”);

printf(“Use\”Ctrl + c\“quit the function\n”);

while (1) {

c = buf;

for(j=0;j

write(fd,c,1);

c++;

usleep(1);

}

}

}

修改之处:修改处改变了发生函数,使原本产生sin函数改为产生三角波函数。测试时选择sin,就会发生三角波。

四、测试显示:

(以下为三角波)

(以下为sin)

三、实验总结:

在本次嵌入式实验中,我们首先在老师的指导下了解了嵌入式系统,初步接触了Linux 环境。我们的实验板是OURS-PXA270-EP,它是一款基于INTEL XSCALE PXA270处理器,针对高校嵌入式系统教学和实验科研的平台。这款设备主要包括核心板与底板两个部分,核心板主要集成了高速的PXA270 CPU,配套的存储器,网卡等设备;底板主要是各种类型的接口与扩展口。

了解了实验的平台后,在接下来的基本实验中我们学会了嵌入式开发系统硬件环境的搭建、Linux操作系统RedHat9的安装、软件环境的搭建,以及配置超级终端,配置通讯服务。这些实验内容只要按照实验指导书上的步骤一步一步做即可,不会出现难以解决的问题,一般都会做的很顺利。有三个需要注意的地方时,在配置端口时,一定要确定实验箱接的是端口一,还是端口二。否则会出现无法建立呼叫的问题(其表现为超级终端接口内没有输出内容)。其次要确定虚拟机上网桥的设定是否正确。不然也会出现无法呼叫现象。最后,要确定网线是否连接上。在实验时,由于有些电脑的网线接口有断裂的现象,如果插口没接好的话,将会出现nfs连接错误。

在基本实验之后,进行的就是接口实验。总的来说,实验的难度不大。当然这是建立在对实验代码有一定理解的基础之上的。在实验十二中,我们对实验的接口代码规则已经有了一定的了解。而之后的几个实验都是基于实验十二进行相应的改动即可。所以完成下来难度

邝坚_北邮嵌入式实验报告

嵌入式系统期末实验

一、实验要求 题目:支持消息驱动模式的实时软件框架 目的:在充分理解嵌入式处理器特点、RTOS 及强实时嵌入式系统软件设计规范的基础上,构建自己的实时系统软件框架基本功能,并在其上自拟应用(如部分模拟TCP 的C/S两端通信流程),测试软件框架的相关功能。 环境:VxWorks 的VxSim 仿真环境或2440(ARM920T) 内容: 必选功能: 1. 消息驱动的Task 统一框架,包含统一消息格式定义及使用规范; 2. 支持消息驱动模式的软定时器的机制; 3. Task 启动同步功能; 4. 体现前次实验中实现的自定义内存管理机制,最大限度降低外部碎片对系统可靠性的威胁。 可选功能(加分): 其它有利于实时处理的有效机制,如:无信号量(互斥)支持的临界资源访问方式,zero copy 等; 二、实现的功能 1. 消息驱动的Task 统一框架,包含统一消息格式定义及使用规范; STATUS Task() { Initialization(MBox, Data Structure, Timer, etc.) Forever{ MsgReceive If(…) { …… }else if(…) { …… } …… } } typedef struct _MESSAGE { int mType; /* 消息类型 0:timer->client *1:client->server 2:server->client*/ int mSendId; /* 发送任务的MESSAGE ID */

int mRecvId; /* 接收任务的MESSAGE ID */ int mData; /* 消息中传递的数据 */ }MESSAGE; 2. 支持消息驱动模式的软定时器的机制; /* timer(id)向客户端消息队列定时发送的定时器*/ STATUS timer(int id) { MESSAGE* txMsg;/* 用于从消息队列中接收消息 */ int tick;/*创建一个定时,用于提醒发送者任务定时发送消息*/ tick=sysClkRateGet(); semTake(semSynStart,WAIT_FOREVER); FOREVER { taskDelay((int)(tick*DELAY_SECOND)); txMsg = (MESSAGE*)memMalloc(MAX_MSG_LEN); txMsg->mType = 0; txMsg->mSendId = MID_TIMER(id); txMsg->mRecvId = MID_CLIENT(id); txMsg->mData = 0; printf("tTimer%d send message to tClient%d!\n",id,id); if(msgQSend(msgQIdClient[id],(char*)&txMsg,MAX_MSG_LEN,WAIT_FOREVER,MSG_ PRI_NORMAL) == ERROR ) { return (ERROR); } } return (OK); } 3. Task 启动同步功能; 由manager()创建的任务优先级最高,先创建timer()、server()、client()的任务,让他们都在等待信号量semSynStart而被阻塞,最后创建manager()的任务,占据CPU,等待其他所有任务都被阻塞,解锁所有等待信号量的任务,让它们同时启动。 /* progStart()启动实例程序*/ STATUS progStart(void) { int id; /* 用来区分不同的定时器或者客户任务 */ mallocPtr=&sysMalloc; mallocPtr->frontBlock = 0;

课程设计实验报告 北邮

课程设计实验报告 -----物联网实验 学院:电子工程学院班级:2011211204 指导老师:赵同刚

一.物联网概念 物联网是新一代信息技术的重要组成部分。物联网的英文名称叫“The Internet of things”。顾名思义,物联网就是“物物相连的互联网”。这有两层意思:第一,物联网的核心和基础仍然是互联网,是在互联网的基础上延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物体与物体之间,进行信息交换和通信。因此,物联网的定义是:通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物体与互联网相连接,进行信息交换和通信,以实现对物体的智能化识别、定位、跟踪、监控和管理的一种网络。 二.物联网作用 现有成熟的主要应用包括: —检测、捕捉和识别人脸,感知人的身份; —分析运动目标(人和物)的行为,防范周界入侵; —感知人的流动,用于客流统计和分析、娱乐场所等公共场合逗留人数预警; —感知人或者物的消失、出现,用于财产保全、可疑遗留物识别等; —感知和捕捉运动中的车牌,用于非法占用公交车道的车辆车牌捕捉; —感知人群聚集状态、驾驶疲劳状态、烟雾现象等各类信息。 三.物联网无线传感(ZigBee)感知系统 ZigBee是一种新兴的短距离、低功耗、低数据速率、低成本、低复杂度的无线网络技术。ZigBee在整个协议栈中处于网络层的位置,其下是由IEEE 802.15.4规范实现PHY(物理层)和MAC(媒体访问控制层),对上ZigBee提供了应用层接口。 ZigBee可以组成星形、网状、树形的网络拓扑,可用于无线传感器网络(WSN)的组网以及其他无线应用。ZigBee工作于2.4 GHz的免执照频段,可以容纳高达65 000个节点。这些节点的功耗很低,单靠2节5号电池就可以维持工作6~24个月。除此之外,它还具有很高的可靠性和安全性。这些优点使基于ZigBee的WSN广泛应用于工业控制、消费性电子设备、汽车自动化、家庭和楼宇自动化、医用设备控制等。 ZigBee的基础是IEEE802.15.4,这是IEEE无线个人区域网工作组的一项标准,被称作IEEE802.15.4(ZigBee)技术标准。ZigBee不仅只是802.15.4的名字。IEEE仅处理低级MAC

信息论实验报告2

实验课程:信息论与编码理论专业:信息与计算科学班级:09070241 学号:0907024101 姓名:孙秋月 中北大学理学院

实验二 哈夫曼编码 一、实验目的 1. 掌握哈夫曼编码的原理及编码步骤 2. 练习matlab 中哈夫曼编码函数的调用及通信工具箱的使用 二、实验原理 哈夫曼编码的具体步骤归纳如下: 1. 统计n 个信源消息符号,得到n 个不同概率的信息符号。 2. 将这n 个信源信息符号按其概率大小依次排序: p (x 1) ≥ p (x 2)≥ …≥ p (x n ) 3. 取两个概率最小的信息符号分别配以0和1两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列。 4. 将剩余的信息符号,按概率大小重新进行排序。 5. 重复步骤3,将排序后的最后两个小概论相加,相加和与其他概率再排序。 6. 如此反复重复n-2次,最后只剩下两个概率。 7. 从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字,构成霍夫曼编码字。编码结束。 三、实验内容 为某一信源进行哈夫曼编码。该信源的字符集为X={x 1, x 2, … x 6 },相应的概率矢量为:P =(0.30,0.25,0.21,0.10,0.09,0.05),即X ,P 的概率空间为: 123456 0.300.250.210.100.090.05X x x x x x x P ????=???????? 根据哈夫曼编码算法对该信源进行哈夫曼编码。并计算其平均码长和编码效率。 调用matlab 哈夫曼编码函数进行哈夫曼编码,与人工编码结果做比较。 1. huffmandict 函数: 为已知概率分布的信源模型生成哈夫曼编解码索引表。

北邮通电实验报告

实验3 集成乘法器幅度调制电路 信息与通信工程学院 2016211112班 苏晓玥杨宇宁 2016210349 2016210350

一.实验目的 1.通过实验了解振幅调制的工作原理。 2.掌握用MC1496来实现AM和DSB的方法,并研究已调波与调制信号,载波之间的关系。3.掌握用示波器测量调幅系数的方法。 二.实验准备 1.本实验时应具备的知识点 (1)幅度调制 (2)用模拟乘法器实现幅度调制 (3)MC1496四象限模拟相乘器 2.本实验时所用到的仪器 (1)③号实验板《调幅与功率放大器电路》 (2)示波器 (3)万用表 (4)直流稳压电源 (5)高频信号源 三.实验内容 1.模拟相乘调幅器的输入失调电压调节。 2.用示波器观察正常调幅波(AM)波形,并测量其调幅系数。 3.用示波器观察平衡调幅波(抑制载波的双边带波形DSB)波形。 四.实验波形记录、说明 1.DSB信号波形观察

2.DSB信号反相点观察 3.DSB信号波形与载波波形的相位比较 结论:在调制信号正半周期间,两者同相;负半周期间,两者反相。

4.AM正常波形观测 5.过调制时的AM波形观察(1)调制度为100%

(2)调制度大于100% (3)调制度为30% A=260.0mv B=140.0mv

五.实验结论 我们通过实验了解振幅调制的工作原理是:调幅调制就是用低频调制信号去控制高频振荡(载波)的幅度,使其成为带有低频信息的调幅波。目前由于集成电路的发展,集成模拟相乘器得到广泛的应用,为此本实验采用价格较低廉的MC1496集成模拟相乘器来实现调幅之功能。 DSB信号波形与载波波形的相位关系是:在调制信号正半周期间,两者同相;负半周期间,两者反相。 通过实验了解到了调制度的计算方法 六.课程心得体会 通过本次实验,我们了解了振幅调制的工作原理并掌握了实现AM和DSB的方法,学会计算调制度,具体见实验结论。我们对集成乘法器幅度调制电路有了更好的了解,对他有了更深入的认识,提高了对通信电子电路的兴趣。 和模电实验的单独进行,通电实验增强了团队配合的能力,两个人的有效分工提高了实验的效率,减少了一个人的独自苦恼。

嵌入式实验报告

嵌入式实验报告 学院:信息工程学院 专业:计算机科学与技术班级:计算机班 姓名: 学号: 指导老师:

实验目录 实验一嵌入式系统开发环境实验 (2) 实验二系统节拍定时器实验 (12) 实验三 GPIO控制实验 (16) 实验四外部中断实验 (19) 实验五串口通讯实验 (23)

实验一嵌入式系统开发环境实验 【实验目的】 1.熟悉RealView MDK集成开发环境以及使用方法。 2.熟悉嵌入式系统软件设计方法和流程。 【实验内容】 1. 通过例程熟悉、掌握嵌入式系统的编辑、编译、调试、下载及运行过程。 2. 建立自己的工程文件,在开发板板上调试程序。 【实验步骤】 (一)程序安装 1. 建议在安装之前关闭所有的应用程序,双击安装文件,弹出如图对话框,Next 2.默认选择C盘文件下安装。

3.这样就在c盘底下出现keil文件夹。 4.单击选择菜单“File”-->"License Management" 将弹出下面一张图的界面:复制其中CID号,以便在粘贴到下一步中的破解软件。 5.复制CID

6.运行破解软件,将出现下面一张图的界面,把上步复制的CID号粘贴到相应位置,其他选项如图,然后点击“Generate”按钮,然后复制产生的序列号,粘贴到上一步的下面一张图的LIC输入框中,然后点击右侧的Add LIC,即可完成破解。 7.安装文件夹中的jlink驱动。 (二)工程创建、编译 使用Realview MDK创建、完成一个新的工程只需要以下几个环节: →创建工程并选择处理器→选择工具集→创建源文件→配置硬件选项→配置对应启动代码→编译链接→下载→调试。 1.创建工程并选择处理器 选择Project→New Project…,输入创建的新工程的文件名,即可创建一个新的工程。 2.创建一个新工程时,需要为工程选择一款对应处理器,在NXP 列表下选择LPC1768 芯片。然后点击OK。接下来出现的对话框选择“是或者也可以通过单击Project→Select Device for Target…在本次课程中,我们选择

计算机网络课程设计实验报告

校园网的组建与应用 摘要: 本文针对实验室的设备环境,对校园网的组网方式进行了研究和模拟,并最终提出了一套完整的校园网组网方案。 实验中我们对路由器、交换机等组网基础设备进行了认真的研究。关于路由器,我们实现了本地基本配置,并分别使用路由器的串口和以太网口实现了不同网段的网络互联,对路由器静态及动态路由机制进行了探究。关于交换机,我们实现了VLAN的划分以及不同VLAN间的相互通信,对广播风暴现象的产生原理及解决方案进行了特定的实验。综合两者的功能,我们对多种网络拓扑结构进行了分析,讨论和改进。最后通过实验和模拟提出了一套完整的校园网组建方案。 在此方案中,我们在实现了网络互通的情况下,我们进行了IP地址的划分,IP地址利用DHCP进行自动分配。并根据模拟实际,对不同的主机进行VLAN划分,同时保证不同VLAN间的相互访问与特定VLAN的保护与单向访问。同时构建内部防火墙保证校园网与外部的安全访问。构建了完整可靠的网络之后,依据校园网的功能和服务需求,我们搭建了FTP服务器,用于提供基础的网络服务。 限于实验室条件的限制,我们的方案并不是完全能够适用于现实的。但是,通过实验使我们对校园网乃至更大的网络有了更加深刻的了解。

目录

一、前言 随着信息的调整膨胀,全球信息已经进入以计算机网络为核心的时代。作为科技先导的教育行业,计算机校园网已是教育进行科研和现代化管理的重要手段。近几年、校园网已经取得很大的发展,中国教育科研网投入运营,全国多所高校校园网络开通联网。 随着学校教育手段的现代化,很多学校已经逐渐开始将学校的管理和教学过程向电子化方向发展,校园网的有无以及水平的高低也将成为评价学校及学生选择学校的新的标准之一,此时,校园网上的应用系统就显得尤为重要。一方面,学生可以通过它在促进学习的同时掌握丰富的计算机及网络信息知识,毫无疑问,这是学生综合素质中极为重要的一部分;另一方面,基于先进的网络平台和其上的应用系统,将极大的促进学校教育的现代化进程,实现高水平的教学和管理。 学校目前正加紧对信息化教育的规划和建设。开展的校园网络建设,旨在推动学校信息化建设,其最终建设目标是将建设成为一个借助信息化教育和管理手段的高水平的智能化、数字化的教学园区网络,最终完成统一软件资源平台的构建,实现统一网络管理、统一软件资源系统,并保证将来可扩展骨干网络节点互联带宽为10G,为用户提供高速接入网络,并实现网络远程教学、在线服务、教育资源共享等各种应用;利用现代信息技术从事管理、教学和科学研究等工作。最终达到在网络方面,更好的对众多网络使用及数据资源的安全控制,同时具有高性能,高效率,不间断的服务,方便的对网络中所有设备和应用进行有效的时事控制和管理。 二、综述 2.1 概述 从物理意义上来说,校园网就是一种局域网。校园网是各类型网络中一大分支,有着非常广泛的应用及代表性。作为新技术的发祥地,学校、尤其是高等院校,和网络的关系是密不可分的。作为“高新技术孵化器”的高校,是知识、人才的高地,资源十分丰富,比其他行业更渴求网络新技术、网络新应用,

北邮微波实验报告整理版

北京邮电大学信息与通信工程学院 微波实验报告 班级:20112111xx 姓名:xxx 学号:20112103xx 指导老师:徐林娟 2014年6月

目录 实验二分支线匹配器 (1) 实验目的 (1) 实验原理 (1) 实验内容 (1) 实验步骤 (1) 单支节 (2) 双支节 (7) 实验三四分之一波长阻抗变换器 (12) 实验目的 (12) 实验原理 (12) 实验内容 (13) 实验步骤 (13) 纯电阻负载 (14) 复数负载 (19) 实验四功分器 (23) 实验目的 (23) 实验原理 (23) 实验内容 (24) 实验步骤 (24) 公分比为1.5 (25) 公分比为1(等功分器) (29) 心得体会 (32)

201121111x 班-xx 号-xx ——电磁场与微波技术实验报告 实验二 分支线匹配器 实验目的 1.熟悉支节匹配器的匹配原理 2.了解微带线的工作原理和实际应用 3.掌握Smith 图解法设计微带线匹配网络 实验原理 支节匹配器是在主传输线上并联适当的电纳(或者串联适当的电抗),用附加的反射来抵消主传输线上原来的反射波,以达到匹配的目的。 单支节匹配器,调谐时主要有两个可调参量:距离d 和由并联开路或短路短截线提供的电纳。匹配的基本思想是选择d ,使其在距离负载d 处向主线看去的导纳Y 是Y0+jB 形式。然后,此短截线的电纳选择为-jB ,根据该电纳值确定分支短截线的长度,这样就达到匹配条件。 双支节匹配器,通过增加一个支节,改进了单支节匹配器需要调节支节位置的不足,只需调节两个分支线长度,就能够达到匹配(但是双支节匹配不是对任意负载阻抗都能匹配的,即存在一个不能得到匹配的禁区)。 微带线是有介质εr (εr >1)和空气混合填充,基片上方是空气,导体带条和接地板之间是介质εr ,可以近似等效为均匀介质填充的传输线,等效介质电常数为 εe ,介于1和εr 之间,依赖于基片厚度H 和导体宽度W 。而微带线的特性阻抗与其等效介质电常数为εe 、基片厚度H 和导体宽度W 有关。 实验内容 已知:输入阻抗Z 75in ,负载阻抗Z (6435)l j ,特性阻抗0Z 75 ,介质基片 2.55r ,1H mm 。 假定负载在2GHz 时实现匹配,利用图解法设计微带线单支节和双支节匹配网络,假设双支节网络分支线与负载的距离114d ,两分支线之间的距离为21 8 d 。画出几种可能的电路图并且比较输入端反射系数幅度从1.8GHz 至2.2GHz 的变化。 实验步骤 1.根据已知计算出各参量,确定项目频率。 2.将归一化阻抗和负载阻抗所在位置分别标在Smith 圆上。 3.设计单枝节匹配网络,在图上确定分支线与负载的距离以及分支线的长度,根据给定的介质基片、特性阻抗和频率用TXLINE 计算微带线物理长度和宽度。此处应该注意电长度和实际长度的联系。 4.画出原理图,在用微带线画出基本的原理图时,注意还要把衬底添加到图中,将各部分的参数填入。注意微带 分支线处的不均匀性所引起的影响,选择适当的模型。 5.负载阻抗选择电阻和电感串联的形式,连接各端口,完成原理图,并且将项目的频率改为1.8—2.2GHz 。 6.添加矩形图,添加测量,点击分析,测量输入端的反射系数幅值。 7.同理设计双枝节匹配网络,重复上面的步骤。

北邮电路综合实验报告——串行口数据传输的仿真及硬件实现

北京邮电大学 信息与通信工程学院 电路综合实验报告 串行口数据传输的仿真及硬件实现 姓名: 学号: 班内序号: 班级: 指导老师: 日期:2014年10月10日

摘要: 本实验模拟了现代数字逻辑电路中的数据传输过程。使用连续的代表0、1的高低电平作为数字信号,将该数字信号从输出端发送到接收端,并分别用串行、并行两种方式进行锁存,检测。本实验模拟了序列信号的发生装置、串并转换装置、串行并行两种方式的检测装置、锁存输出和控制电路,实现了一个简单的串行口数据传输模型。在此试验中,通过对常见芯片的组合实现功能,将一串由0、1组成的数字信号进行传输、转换、检测,使之显示在数码管上成为可读信息。并且,还实现了对此电路显示的控制,使数码管在满足条件的情况下才点亮。在实验中,还使用了Qua rtusⅡ对设计的电路进行了仿真模拟。 关键字: 数据传输、串并转换、数据检测、QuartusII Abstract: This experiment simulated data transfer in modern digital logic circuit. Digital signal was transferred from the output terminal to the receiving end, which was consisted of

continuous high or low level represent 0 and 1 as digital signal, and latch, test it through serial or parallel mode. Our experiment simulated the producing equipment of sequence signal, the signal conversion module, testing module of serial and parallel mode, latch output and control circuit. It implements a simple serial port data communication model. In the experiment, we use the combination of simple chips to realize the function that transport, transfer and test a sequence of the digital signal consisting of 0 and 1, and display it on LED Segment Displays. In addition, we realize the control of display. The LED Segment Displays works only in specific conditions. We also conduct simulations on QuartusⅡ. Keywords: Data transmission, String conversion, Data detection, Quartus II 目录 一、实验目的 (4)

信息论实验报告-

信息论实验报告 学生: 班级: 学号:

实验一香农编码一、程序设计的流程图 二、程序清单 #include

#include #include using namespace std; void swap(double *x,double *y); int main() { int N; cout<<"输入信源个数"<>N; double S[N]; //注意变量在数组中的影响cout<<"输入信源概率"<>S[i]; for(int i=0;i1) { MM[i]+='1';

aa=tem-1; } else { MM[i]+='0'; aa=tem; } } } string BB[N]; for(int i=0;i

北京邮电大学通信原理软件实验报告

北京邮电大学实验报告 题目:基于SYSTEMVIEW通信原理实验报告

实验一:验证抽样定理 一、实验目的 1、掌握抽样定理 2. 通过时域频域波形分析系统性能 二、实验原理 低通滤波器频率与m(t)相同 三、实验步骤 1. 要求三个基带信号相加后抽样,然后通过低通滤波器恢复出原信号。 2. 连接各模块完成系统,同时在必要输出端设置观察窗。 3. 设置各模块参数。 三个基带信号的频率从上到下分别设置为10hz、12hz、14hz。 抽样信号频率设置为28hz,即2*14hz。(由抽样定理知,) 将低通滤波器频率设置为14hz,则将恢复第三个信号(其频率为14hz)进行系统定时设置,起始时间设为0,终止时间设为1s.抽样率设为1khz。 3.观察基带信号、抽样后的信号、最终恢复的信号波形

四、实验结果 最上面的图为原基带信号波形,中间图为最终恢复的信号波形,最下面的图为抽样后的信号波形。 五、实验讨论 从实验结果可以看出,正如前面实验原理所述,满足抽样定理的理想抽样应该使抽样后的波形图如同冲激信号,且其包络图形为原基带信号波形图。抽样后的信号通过低通滤波器后,恢复出的信号波形与原基带信号相同。 由此可知,如果每秒对基带模拟信号均匀抽样不少于2次,则所得样值序列含有原基带信号的全部信息,从该样值序列可以无失真地恢复成原来的基带信号。 讨论:若抽样速率少于每秒2次,会出现什么情况? 答:会产生失真,这种失真被称为混叠失真。 六、实验建议、意见 增加改变抽样率的步骤,观察是否产生失真。

实验二:奈奎斯特第一准则 一、实验目的 (1)理解无码间干扰数字基带信号的传输; (2)掌握升余弦滚降滤波器的特性; (3)通过时域、频域波形分析系统性能。 二、实验原理 在现代通信系统中,码元是按照一定的间隔发送的,接收端只要能够正确地恢复出幅度序列,就能够无误地恢复传送的信号。因此,只需要研究如何使波形在特定的时刻无失真,而不必追求整个波形不变。 奈奎斯特准则提出:只要信号经过整形后能够在抽样点保持不变,即使其波形已经发生了变化,也能够在抽样判决后恢复原始的信号,因为信息完全恢复携带在抽样点幅度上。 奈奎斯特准则要求在波形成形输入到接收端的滤波器输出的整个传送过程传递函数满足:,其充分必要条件是x(t)的傅氏变换X ( f )必须满足 奈奎斯特准则还指出了信道带宽与码速率的基本关系。即R B =1/T B =2? N =2B N。 式中R b 为传码率,单位为比特/每秒(bps)。f N 和B N 分别为理想信道的低通截止 频率和奈奎斯特带宽。上式说明了理想信道的频带利用率为R B /B N =2。 在实际应用中,理想低通滤波器是不可能实现的,升余弦滤波器是在实际中满足无码间干扰传输的充要条件,已获得广泛应用的滤波器。 升余弦滤波器的带宽为:。其中,α为滚降系数,0 ≤α≤1, 三、实验步骤 1.根据奈奎斯特准则,设计实现验证奈奎斯特第一准则的仿真系统,同时在必 要输出端设置观察窗。设计图如下

嵌入式实验报告

嵌入式技术 实验报告 系别:计算机与科学技术系 班级:计12-1班 姓名:刘杰 学号:12101020128 总成绩: 评语: 日期:

2.在弹出的对话框中依次选择“cedevice emulator emulator kdstub”。 3.选择“Build OS”菜单的“sysgen”开始构建平台。 1.1.4连接,下载和运行平台 1.选择“Target”菜单下的“Connection option”菜单项。 2.在新的对话框中,配置连接关系 3.选择“Target”菜单下的“attach”菜单项,开始下载。 ?实验结果 操作系统定制成功,能正常运行。 ?结果截图 ?问题总结 由于对实验平台了解不够,致使操作过程中添加和删除组件时不知道该如何下手,影响整个实验进度。 实验1.2: 1.打开Platform Builder,并且打开实验1的工程,在实验1的工程基础上做本实验。

进程显示 IE信息查看

报文监测 实验1.3使用Platform Builder开发应用程序 简单实验步骤 1.打开Platform Builder。 2.选择“File”菜单下的“Open Workspace…”,然后打开实验1中创建的平台,本实验要基于 上面的实验的基础上做。 3.选择“File”菜单下的“New Project or File…”,打开“New Project or File”对话框。 4.在“Projects”选项页中选择“WCE Application”;在“Project Name”中输入项目的名字,例 如“MyApp”。 5.在“New Project Wizard – step 1 of 1”中选择“A typical Hello World Application”,点击“Finish” 按钮。 6.选择“Build”菜单中的“Build MyApp.exe”来编译应用程序。

北邮移动通信实验报告

信息与通信工程学院移动通信实验报告 班级: 姓名: 学号: 序号: 日期:

一、实验目的 1移动通信设备观察实验 1.1RNC设备观察实验 a) 了解机柜结构 b) 了解RNC机框结构及单板布局 c) 了解RNC各种类型以及连接方式 1.2基站设备硬件观察实验 a) 初步了解嵌入式通信设备组成 b) 认知大唐移动基站设备EMB5116的基本结构 c) 初步分析硬件功能设计 2网管操作实验 a) 了解OMC系统的基本功能和操作 b) 掌握OMT如何创建基站 二、实验设备 TD‐SCDMA移动通信设备一套(EMB5116基站+TDR3000+展示用板卡)、电脑。 三、实验内容 1TD-SCDMA系统认识 TD-SCDMA是英文Time Division-Synchronous Code Division Multiple Access(时分同步码分多址)的简称,TD-SDMA是由中国提出的第三代移动通信标准(简称3G),也是ITU批准的三个3G标准中的一个,以我国知识产权为主的、被国际上广泛接受和认可的无线通信国际标准。是我国电信史上重要的里程碑。 TD-SCDMA在频谱利用率、业务支持灵活性、频率灵活性及成本等方面有独特优势。TD-SCDMA由于采用时分双工,上行和下行信道特性基本一致,因此,基站根据接收信号估计上行和下行信道特性比较容易。TD-SCDMA使用智能天线技术有先天的优势,而智能天线技术的使用又引入了SDMA的优点,可以减少用户间干扰,从而提高频谱利用率。TD-SCDMA还具有TDMA的优点,可以灵活设置

上行和下行时隙的比例而调整上行和下行的数据速率的比例,特别适合因特网业务中上行数据少而下行数据多的场合。但是这种上行下行转换点的可变性给同频组网增加了一定的复杂性。TD-SCDMA是时分双工,不需要成对的频带。因此,和另外两种频分双工的3G标准相比,在频率资源的划分上更加灵活。 图1 3G网络架构 2硬件认知 2.1 RNC设备认知 TDR3000整套移动通信设备机框外形结构如图2所示。

信息论与编码实验报告材料

实验报告 课程名称:信息论与编码姓名: 系: 专业: 年级: 学号: 指导教师: 职称: 年月日

目录 实验一信源熵值的计算 (1) 实验二 Huffman信源编码 (5) 实验三 Shannon编码 (9) 实验四信道容量的迭代算法 (12) 实验五率失真函数 (15) 实验六差错控制方法 (20) 实验七汉明编码 (22)

实验一 信源熵值的计算 一、 实验目的 1 进一步熟悉信源熵值的计算 2熟悉 Matlab 编程 二、实验原理 熵(平均自信息)的计算公式 ∑∑=--==q i i i q i i i p p p p x H 1 212log 1 log )( MATLAB 实现:))(log *.(2x x sum HX -=;或者))((log *)(2i x i x h h -= 流程:第一步:打开一个名为“nan311”的TXT 文档,读入一篇英文文章存入一个数组temp ,为了程序准确性将所读内容转存到另一个数组S ,计算该数组中每个字母与空格的出现次数(遇到小写字母都将其转化为大写字母进行计数),每出现一次该字符的计数器+1; 第二步:计算信源总大小计算出每个字母和空格出现的概率; 最后,通过统计数据和信息熵公式计算出所求信源熵值(本程序中单位为奈特nat )。 程序流程图: 三、实验内容 1、写出计算自信息量的Matlab 程序 2、已知:信源符号为英文字母(不区分大小写)和空格。

输入:一篇英文的信源文档。 输出:给出该信源文档的中各个字母与空格的概率分布,以及该信源的熵。 四、实验环境 Microsoft Windows 7 Matlab 6.5 五、编码程序 #include"stdio.h" #include #include #define N 1000 int main(void) { char s[N]; int i,n=0; float num[27]={0}; double result=0,p[27]={0}; FILE *f; char *temp=new char[485]; f=fopen("nan311.txt","r"); while (!feof(f)) { fread(temp,1, 486, f);} fclose(f); s[0]=*temp; for(i=0;i='a'&&s[i]<='z') num[s[i]-97]++; else if(s[i]>='A'&&s[i]<='Z') num[s[i]-65]++; } printf("文档中各个字母出现的频率:\n");

北邮arduino实验报告

电子电路综合实验设计 实验名称: 基于 Arduino 的电压有效值测量电路设计与实现 学院: 班级: 学号: 姓名: 班内序号:

实验 基于Arduino 的电压有效值测量电路设计与实现 一. 摘要 Arduino是一个基于开放原始码的软硬件平台,可用来开发独立运作、并具互动性的电子产品,也可以开发与PC 相连的周边装置,同时能在运行时与PC 上的软件进行交互。为了测量正弦波电压有效值,首先我们设计了单电源供电的半波整流电路,并进行整流滤波输出,然后选择了通过Arduino设计了读取电压有效值的程序,并实现使用此最小系统来测量和显示电压有效值。在频率和直流电压幅度限定在小范围的情况下,最小系统的示数基本和毫伏表测量的值相同。根据交流电压有效值的定义,运用集成运放和设计的Arduino最小系统的结合,实现了运用少量元器件对交流电压有效值的测量。 关键字:半波整流整流滤波 Arduino最小系统读取电压有效值 二. 实验目的 1、熟悉Arduino 最小系统的构建和使用方法; 2、掌握峰值半波整流电路的工作原理; 3、根据技术指标通过分析计算确定电路形式和元器件参数; 4、画出电路原理图(元器件标准化,电路图规范化); 5、熟悉计算机仿真方法; 6、熟悉Arduino 系统编程方法。 三. 实验任务及设计要求 设计实现 Arduino 最小系统,并基于该系统实现对正弦波电压有效值的测量和显示。 1、基本要求 (1)实现Arduino 最小系统,并能下载完成Blink 测试程序,驱动Arduino 数字13 口LED 闪烁; (2)电源部分稳定输出5V 工作电压,用于系统供电; (3)设计峰值半波整流电路,技术指标要求如下:

嵌入式实验报告

实验报告(一) 第1学时跑第一个任务 一.实验目的 本实验的目的是了解嵌入式实时操作系统μCOS代码结构,将其跑起来得到直观的认识。 二.实验步骤 1.将包含全部实验代码的压缩文件解压缩 2.将VC6开发环境打开 3.打开experiment1目录下的ucos_vc.dsw 4.用全部编译(rebuild all)编译程序,运行程序,根据窗口提示输出,获得感性认识! 5.根据教材P206页图7.1及7.1.1和7.1.2的内容,写出文件目录结构的说明,说明嵌入式实时操作系统μCOS都由哪些部分组成 (1)与CPU无关的代码: 操作系统配置文件os_config.h 操作系统头文件ucos_ii.h 内核代码os_core.c 任务管理os_task.c 时间管理os_time.c 信息量管理os_sem.c 互斥信号量管理os_mutex.c 信息邮箱管理os_mbox.c 信息队列管理os_q.c 事件标志组管理os_flag.c 内存管理os_mem.c 定时器管理os_tmr.c (2)与CPU相关的代码: 处理器相关头文件os_cpu.h 处理器相关的C代码os_cpu.h 处理器相关汇编代码os_cpu_a.asm。

6.VC环境下,在工程上点鼠标右键,查看工程的设计 7.打开main.c, 使用REBUILD ALL 进行编译,找到可执行文件的输出目录,记录下来 experiment1\OUTPUT\Debug\ucos_vc.exe 8.使用菜单或快捷按钮再次执行编译好的程序。查看运行结果并记录,查看main.c及user.c,分析main.c及user.c代码,解释程序执行的功能。 (1) main.c初始化了操作系统,创建了用户任务usertask (2)user.c定义了用户任务 usertask,循环对一个变量进行加一,并且输出变量值 9.说明任务堆栈的定义位置,任务在什么时候被创建,任务在什么时候获得运行。 Main.c中CONSTANTS里定义了任务堆栈 任务创建: 在任务调度时,当任务在就续表中优先级最高时,任务获得运行 10.自己修改代码,减少延时时间,或将每次加1改为其他算法,查看效果! 第2学时调试模式跑第一个任务

数据结构 哈夫曼编码 实验报告

数据结构实验报告 实验名称:实验3——树(哈夫曼编/解码器) 学生姓名: 班级: 班内序号: 学号: 日期:2011年12月5日 1.实验要求 利用二叉树结构实现哈夫曼编/解码器。 基本要求: 1、初始化(Init):能够对输入的任意长度的字符串s进行统计,统计每个字符的频 度,并建立哈夫曼树 2、建立编码表(CreateTable):利用已经建好的哈夫曼树进行编码,并将每个字符的 编码输出。 3、编码(Encoding):根据编码表对输入的字符串进行编码,并将编码后的字符串输 出。 4、译码(Decoding):利用已经建好的哈夫曼树对编码后的字符串进行译码,并输出 译码结果。 5、打印(Print):以直观的方式打印哈夫曼树(选作) 计算输入的字符串编码前和编码后的长度,并进行分析,讨论哈夫曼编码的压缩效果。 并用I love data Structure, I love Computer。I will try my best to study data Structure.进行测试。 2. 程序分析 哈夫曼树结点的存储结构包括双亲域parent,左子树lchild,右子树rchild,还有字符word,权重weight,编码code 对用户输入的信息进行统计,将每个字符作为哈夫曼树的叶子结点。统计每个字符出现的次数作为叶子的权重,统计次数可以根据每个字符不同的ASCII码,根据叶子结点的权重建立一个哈夫曼树。 建立每个叶子的编码从根结点开始,规定通往左子树路径记为0,通往右子树路径记为1。由于编码要求从根结点开始,所以需要前序遍历哈夫曼树,故编码过程是以前序遍历二叉树为基础的。同时注意递归函数中能否直接对结点的编码域进行操作。 编码信息只要遍历字符串中每个字符,从哈夫曼树中找到相应的叶子结点,取得相应的编码。最后再将所有找到的编码连接起来即可。 译码则是将编码串从左到右逐位判别,直到确定一个字符。这就是哈夫曼树的逆过程。

北邮通信原理实验报告

北京邮电大学通信原理实验报告 学院:信息与通信工程学院班级: 姓名: 姓名:

实验一:双边带抑制载波调幅(DSB-SC AM ) 一、实验目的 1、了解DSB-SC AM 信号的产生以及相干解调的原理和实现方法。 2、了解DSB-SC AM 信号波形以及振幅频谱特点,并掌握其测量方法。 3、了解在发送DSB-SC AM 信号加导频分量的条件下,收端用锁相环提取载波的原理及其实现方法。 4、掌握锁相环的同步带和捕捉带的测量方法,掌握锁相环提取载波的调试方法。 二、实验原理 DSB 信号的时域表达式为 ()()cos DSB c s t m t t ω= 频域表达式为 1 ()[()()]2 DSB c c S M M ωωωωω=-++ 其波形和频谱如下图所示 DSB-SC AM 信号的产生及相干解调原理框图如下图所示

将均值为零的模拟基带信号m(t)与正弦载波c(t)相乘得到DSB—SC AM信号,其频谱不包含离散的载波分量。 DSB—SC AM信号的解调只能采用相干解调。为了能在接收端获取载波,一种方法是在发送端加导频,如上图所示。收端可用锁相环来提取导频信号作为恢复载波。此锁相环必须是窄带锁相,仅用来跟踪导频信号。 在锁相环锁定时,VCO输出信号sin2πf c t+φ与输入的导频信号cos2πf c t 的频率相同,但二者的相位差为φ+90°,其中很小。锁相环中乘法器的两个 输入信号分别为发来的信号s(t)(已调信号加导频)与锁相环中VCO的输出信号,二者相乘得到 A C m t cos2πf c t+A p cos2πf c t?sin2πf c t+φ =A c 2 m t sinφ+sin4πf c t+φ+ A p 2 sinφ+sin4πf c t+φ 在锁相环中的LPF带宽窄,能通过A p 2 sinφ分量,滤除m(t)的频率分量及四倍频载频分量,因为很小,所以约等于。LPF的输出以负反馈的方式控制VCO,使其保持在锁相状态。锁定后的VCO输出信号sin2πf c t+φ经90度移相后,以cos2πf c t+φ作为相干解调的恢复载波,它与输入的导频信号cos2πf c t 同频,几乎同相。 相干解调是将发来的信号s(t)与恢复载波相乘,再经过低通滤波后输出模拟基带信号 A C m t cos2πf c t+A p cos2πf c t?cos2πf c t+φ =A c 2 m t cosφ+cos4πf c t+φ+ A p 2 cosφ+cos4πf c t+φ 经过低通滤波可以滤除四倍载频分量,而A p 2 cosφ是直流分量,可以通过隔直

相关主题
文本预览
相关文档 最新文档