文档库 最新最全的文档下载
当前位置:文档库 › 基于ZedBoard的Webcam设计

基于ZedBoard的Webcam设计

基于ZedBoard的Webcam设计
基于ZedBoard的Webcam设计

基于ZedBoard的Webcam设计(一):USB摄像头(V4L2接口)的图片采集

硬件平台:DigilentZedBoard + USB 摄像头

开发环境:Windows XP 32 bit + Wmare 8.0 + Ubuntu 10.04 + arm-linux-xilinx-gnueabi交叉编译环境

Zedboardlinux: Digilent OOB Design

一、一些知识

1、V4L和V4L2。

V4L是Linux环境下开发视频采集设备驱动程序的一套规范(API),它为驱动程序的编写提供统一的接口,并将所有的视频采集设备的驱动程序都纳入其的管理之中。V4L不仅给驱动程序编写者带来极大的方便,同时也方便了应用程序的编写和移植。V4L2是V4L的升级版,由于我们使用的OOB是 3.3的内核,不再支持V4L,因而编程不再考虑V4L的api和参数定义。

2、YUYV与RGB24

RGB是一种颜色的表示法,计算机中一般采用24位来存储,每个颜色占8位。YUV也是一种颜色空间,为什么要出现YUV,主要有两个原因,一个是为了让彩色信号兼容黑白电视机,另外一个原因是为了减少传输的带宽。YUV中,Y表示亮度,U和V表示色度,总之它是将RGB信号进行了一种处理,根据人对亮度更敏感些,增加亮度的信号,减少颜色的信号,以这样“欺骗”人的眼睛的手段来节省空间。YUV到RGB颜色空间转换关系是:

R = Y + 1.042*(V-128);

G = Y - 0.34414*(U-128) - 0.71414*(V-128);

B = Y + 1.772*(U-128);

YUV的格式也很多,不过常见的就是422、420等。YUYV就是422形式,简单来说就是,两个像素点P1、P2本应该有Y1、U1、V1和Y2、U2、V2这六个分量,但是实际只保留Y1、U1、Y2、V2。

图1 YUYV像素

二、应用程序设计

1#define TRUE 1

2#define FALSE 0

3

4#define FILE_VIDEO "/dev/video0"

5#define BMP "/usr/image_bmp.bmp"

6#define YUV "/usr/image_yuv.yuv"

7

8#define IMAGEWIDTH 640

9#define IMAGEHEIGHT 480

10

11staticint fd;

12staticstruct v4l2_capability cap;

13struct v4l2_fmtdesc fmtdesc;

14struct v4l2_format fmt,fmtack;

15struct v4l2_streamparm setfps;

16struct v4l2_requestbuffers req;

17struct v4l2_buffer buf;

18enum v4l2_buf_type type;

19unsignedchar frame_buffer[IMAGEWIDTH*IMAGEHEIGHT*3];

其中

#define FILE_VIDEO "/dev/video0"

是要访问的摄像头设备,默人都是/dev/video0

#define BMP "/usr/image_bmp.bmp"

#define YUV "/usr/image_yuv.yuv"

是采集后存储的图片,为了方便测试,这里将直接获取的yuv格式数据也保存成文件,可以通过yuvviewer等查看器查看。

staticint fd;

staticstruct v4l2_capability cap;

struct v4l2_fmtdesc fmtdesc;

struct v4l2_format fmt,fmtack;

struct v4l2_streamparm setfps;

struct v4l2_requestbuffers req;

struct v4l2_buffer buf;

enum v4l2_buf_type type;

这些结构体的定义都可以从/usr/include/linux/videodev2.h中找到定义,具体含义在后续编程会做相应解释。

#define IMAGEHEIGHT 480

为采集图像的大小。

定义一个frame_buffer,用来缓存RGB颜色数据

unsigned char frame_buffer[IMAGEWIDTH*IMAGEHEIGHT*3]

这些宏和定义结束后,就可以开始编程配置摄像头并采集图像了。一般来说V4L2采集视频数据分为五个步骤:首先,打开视频设备文件,进行视频采集的参数初始化,通过V4L2接口设置视频图像的采集窗口、采集的点阵大小和格式;其次,申请若干视频采集的帧缓冲区,并将这些帧缓冲区从内核空间映射到用户空间,便于应用程序读取/处理视频数据;第三,将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集;第四,驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据;第五,停止视频采集。在本次设计中,定义了三个函数实现对摄像头的配置和采集。

int init_v4l2(void);

int v4l2_grab(void);

int close_v4l2(void);

同时由于采集到的图像数据是YUYV格式,需要进行颜色空间转换,定义了转换函数。

int yuyv_2_rgb888(void);

下面就详细介绍这几个函数的实现。

1、初始化V4l2

(1)打开视频。linux对摄像头的访问和普通设备一样,使用open函数就可以,返回值是设备的id。

1if ((fd = open(FILE_VIDEO, O_RDWR)) == -1)

2{

3printf("Error opening V4L interface\n");

4return (FALSE);

5 }

(2)读video_capability中信息。通过调用IOCTL函数和接口命令VIDIOC_QUERYCAP查询摄像头的信息,结构体 v4l2_capability中有包括驱动名称driver、card、bus_info、version以及属性capabilities。这里我们需要检查一下是否是为视频采集设备V4L2_CAP_VIDEO_CAPTURE以及是否支持流IO操作V4L2_CAP_STREAMING。

1if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == -1)

2{

3printf("Error opening device %s: unable to query device.\n",FILE_VIDEO);

4return (FALSE);

6else

7{

8printf("driver:\t\t%s\n",cap.driver);

9printf("card:\t\t%s\n",cap.card);

10printf("bus_info:\t%s\n",cap.bus_info);

11printf("version:\t%d\n",cap.version);

12printf("capabilities:\t%x\n",cap.capabilities);

13

14if ((cap.capabilities& V4L2_CAP_VIDEO_CAPTURE) == V4L2_CAP_VIDEO_CAPTURE)

15 {

16printf("Device %s: supports capture.\n",FILE_VIDEO);

17 }

18

19if ((cap.capabilities& V4L2_CAP_STREAMING) == V4L2_CAP_STREAMING)

20 {

21printf("Device %s: supports streaming.\n",FILE_VIDEO);

22 }

23 }

(3)列举摄像头所支持像素格式。使用命令VIDIOC_ENUM_FMT,获取到的信息通过结构体

v4l2_fmtdesc查询。这步很关键,不同的摄像头可能支持的格式不一样,V4L2可以支持的格式很多,/usr/include/linux/videodev2.h文件中可以看到。

1fmtdesc.index=0;

2fmtdesc.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;

3printf("Support format:\n");

4while(ioctl(fd,VIDIOC_ENUM_FMT,&fmtdesc)!=-1)

5{

6printf("\t%d.%s\n",fmtdesc.index+1,fmtdesc.description);

7fmtdesc.index++;

8 }

(4)设置像素格式。一般的USB摄像头都会支持YUYV,有些还支持其他的格式。通过前一步对摄像头所支持像素格式查询,下面需要对格式进行设置。命令为VIDIOC_S_FMT,通过结构体

v4l2_format把图像的像素格式设置为V4L2_PIX_FMT_YUYV,高度和宽度设置为 IMAGEHEIGHT和IMAGEWIDTH。一般情况下一个摄像头所支持的格式是不可以随便更改的,我尝试把把一个只支持YUYV和MJPEG的摄像头格式改为RGB24或者JPEG,都没有成功。

1fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

2fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;

3fmt.fmt.pix.height = IMAGEHEIGHT;

4fmt.fmt.pix.width = IMAGEWIDTH;

5fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;

7if(ioctl(fd, VIDIOC_S_FMT, &fmt) == -1)

8{

9printf("Unable to set format\n");

10return FALSE;

11 }

为了确保设置的格式作用到摄像头上,再通过命令VIDIOC_G_FMT将摄像头设置读取回来。

1if(ioctl(fd, VIDIOC_G_FMT, &fmt) == -1)

2{

3printf("Unable to get format\n");

4return FALSE;

5}

6{

7printf("fmt.type:\t\t%d\n",fmt.type);

8printf("pix.pixelformat:\t%c%c%c%c\n",fmt.fmt.pix.pixelformat&0xFF,

(fmt.fmt.pix.pixelformat>>8) &0xFF,(fmt.fmt.pix.pixelformat>>16) &0xFF, (fmt.fmt.pix.pixelformat>>24) &0xFF);

9printf("pix.height:\t\t%d\n",fmt.fmt.pix.height);

10printf("pix.width:\t\t%d\n",fmt.fmt.pix.width);

11printf("pix.field:\t\t%d\n",fmt.fmt.pix.field);

12 }

完整的初始化代码如下:

1int init_v4l2(void)

2{

3int i;

4int ret = 0;

5

6//opendev

7if ((fd = open(FILE_VIDEO, O_RDWR)) == -1)

8 {

9printf("Error opening V4L interface\n");

10return (FALSE);

11 }

12

13//query cap

14if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == -1)

15 {

16printf("Error opening device %s: unable to query device.\n",FILE_VIDEO);

17return (FALSE);

19else

20 {

21printf("driver:\t\t%s\n",cap.driver);

22printf("card:\t\t%s\n",cap.card);

23printf("bus_info:\t%s\n",cap.bus_info);

24printf("version:\t%d\n",cap.version);

25printf("capabilities:\t%x\n",cap.capabilities);

26

27if ((cap.capabilities& V4L2_CAP_VIDEO_CAPTURE) == V4L2_CAP_VIDEO_CAPTURE) 28 {

29printf("Device %s: supports capture.\n",FILE_VIDEO);

30 }

31

32if ((cap.capabilities& V4L2_CAP_STREAMING) == V4L2_CAP_STREAMING)

33 {

34printf("Device %s: supports streaming.\n",FILE_VIDEO);

35 }

36 }

37

38//emu all support fmt

39fmtdesc.index=0;

40fmtdesc.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;

41printf("Support format:\n");

42while(ioctl(fd,VIDIOC_ENUM_FMT,&fmtdesc)!=-1)

43 {

44printf("\t%d.%s\n",fmtdesc.index+1,fmtdesc.description);

45fmtdesc.index++;

46 }

47

48//set fmt

49fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

50fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;

51fmt.fmt.pix.height = IMAGEHEIGHT;

52fmt.fmt.pix.width = IMAGEWIDTH;

53fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;

54

55if(ioctl(fd, VIDIOC_S_FMT, &fmt) == -1)

56 {

57printf("Unable to set format\n");

58return FALSE;

59 }

60if(ioctl(fd, VIDIOC_G_FMT, &fmt) == -1)

61 {

62printf("Unable to get format\n");

63return FALSE;

64 }

67printf("pix.pixelformat:\t%c%c%c%c\n",fmt.fmt.pix.pixelformat&0xFF,

(fmt.fmt.pix.pixelformat>>8) &0xFF,(fmt.fmt.pix.pixelformat>>16) &0xFF,

(fmt.fmt.pix.pixelformat>>24) &0xFF);

68printf("pix.height:\t\t%d\n",fmt.fmt.pix.height);

69printf("pix.width:\t\t%d\n",fmt.fmt.pix.width);

70printf("pix.field:\t\t%d\n",fmt.fmt.pix.field);

71 }

72//set fps

73setfps.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

74setfps.parm.capture.timeperframe.numerator = 10;

75setfps.parm.capture.timeperframe.denominator = 10;

76

77printf("init %s \t[OK]\n",FILE_VIDEO);

78

79return TRUE;

80 }

2、图像采集

(1)申请缓存区。使用参数VIDIOC_REQBUFS和结构体v4l2_requestbuffers。v4l2_requestbuffers 结构中定义了缓存的数量,系统会据此申请对应数量的视频缓存。

1req.count=4;

2req.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;

3req.memory=V4L2_MEMORY_MMAP;

4if(ioctl(fd,VIDIOC_REQBUFS,&req)==-1)

5{

6printf("request for buffers error\n");

7

8 }

(2)获取每个缓存的信息,并mmap到用户空间。定义结构体

struct buffer

{

void * start;

unsigned int length;

} * buffers;

来存储mmap后的地址信息。需要说明的是由于mmap函数定义时返回的地址是个void *,因而这里面的start也是个 void *。实际地址在运行的时候会自动分配。

1for (n_buffers = 0; n_buffers

4buf.memory = V4L2_MEMORY_MMAP;

5buf.index =n_buffers;

6//query buffers

7if (ioctl (fd, VIDIOC_QUERYBUF, &buf) == -1)

8 {

9printf("query buffer error\n");

10return(FALSE);

11 }

12

13buffers[n_buffers].length =buf.length;

14//map

15buffers[n_buffers].start = mmap(NULL,buf.length,PROT_READ |PROT_WRITE, MAP_SHARED, fd, buf.m.offset);

16if (buffers[n_buffers].start == MAP_FAILED)

17 {

18printf("buffer map error\n");

19return(FALSE);

20 }

21 }

(3) 之后就可以开始采集视频了。使用命令VIDIOC_STREAMON。

1 type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

2ioctl (fd, VIDIOC_STREAMON, &type);

(4)取出缓存中已经采样的缓存。使用命令VIDIOC_DQBUF。视频数据存放的位置是

buffers[n_buffers].start的地址处。

1ioctl(fd, VIDIOC_DQBUF, &buf);

完整的采集代码:

1int v4l2_grab(void)

2{

3 unsigned int n_buffers;

4

5//request for 4 buffers

6req.count=4;

7req.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;

8req.memory=V4L2_MEMORY_MMAP;

9if(ioctl(fd,VIDIOC_REQBUFS,&req)==-1)

10 {

11printf("request for buffers error\n");

12 }

15 buffers = malloc(req.count*sizeof (*buffers));

16if (!buffers)

17 {

18printf ("Out of memory\n");

19return(FALSE);

20 }

21

22for (n_buffers = 0; n_buffers

23 {

24buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

25buf.memory = V4L2_MEMORY_MMAP;

26buf.index =n_buffers;

27//query buffers

28if (ioctl (fd, VIDIOC_QUERYBUF, &buf) == -1)

29 {

30printf("query buffer error\n");

31return(FALSE);

32 }

33

34buffers[n_buffers].length =buf.length;

35//map

36buffers[n_buffers].start = mmap(NULL,buf.length,PROT_READ |PROT_WRITE, MAP_SHARED, fd, buf.m.offset);

37if (buffers[n_buffers].start == MAP_FAILED)

38 {

39printf("buffer map error\n");

40return(FALSE);

41 }

42 }

43

44//queue

45for (n_buffers = 0; n_buffers

46 {

47buf.index =n_buffers;

48ioctl(fd, VIDIOC_QBUF, &buf);

49 }

50

51 type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

52ioctl (fd, VIDIOC_STREAMON, &type);

53

54ioctl(fd, VIDIOC_DQBUF, &buf);

55

56printf("grab yuyv OK\n");

57return(TRUE);

58 }

由于摄像头采集的数据格式为YUYV,为了方便后续设计,需要转变为RGB24,并将转换完成的数据存储到frame_buffer中。值得一提的是,由于定义的时候buffers[index].start是个void *,没有办法进行+1这样的操作,需要强制转换为

char * pointer

pointer= buffers[0].start

由于后续RGB的数据要存储到BMP中,而BMP文件中颜色数据是“倒序”,即从下到上,从左到右,因而在向frame_buffer写数据时是从最后一行最左测开始写,每写满一行行数减一。

1int yuyv_2_rgb888(void)

2{

3int i,j;

4 unsigned char y1,y2,u,v;

5int r1,g1,b1,r2,g2,b2;

6char * pointer;

7

8 pointer = buffers[0].start;

9

10for(i=0;i<480;i++)

11 {

12for(j=0;j<320;j++)

13 {

14 y1 = *( pointer + (i*320+j)*4);

15u = *( pointer + (i*320+j)*4 + 1);

16 y2 = *( pointer + (i*320+j)*4 + 2);

17v = *( pointer + (i*320+j)*4 + 3);

18

19 r1 = y1 + 1.042*(v-128);

20 g1 = y1 - 0.34414*(u-128) - 0.71414*(v-128);

21 b1 = y1 + 1.772*(u-128);

22

23 r2 = y2 + 1.042*(v-128);

24 g2 = y2 - 0.34414*(u-128) - 0.71414*(v-128);

25 b2 = y2 + 1.772*(u-128);

26

27if(r1>255)

28 r1 = 255;

29elseif(r1<0)

30 r1 = 0;

31

32if(b1>255)

33 b1 = 255;

34elseif(b1<0)

35 b1 = 0;

37if(g1>255)

38 g1 = 255;

39elseif(g1<0)

40 g1 = 0;

41

42if(r2>255)

43 r2 = 255;

44elseif(r2<0)

45 r2 = 0;

46

47if(b2>255)

48 b2 = 255;

49elseif(b2<0)

50 b2 = 0;

51

52if(g2>255)

53 g2 = 255;

54elseif(g2<0)

55 g2 = 0;

56

57 *(frame_buffer + ((480-1-i)*320+j)*6 ) = (unsigned char)b1;

58 *(frame_buffer + ((480-1-i)*320+j)*6 + 1) = (unsigned char)g1;

59 *(frame_buffer + ((480-1-i)*320+j)*6 + 2) = (unsigned char)r1;

60 *(frame_buffer + ((480-1-i)*320+j)*6 + 3) = (unsigned char)b2;

61 *(frame_buffer + ((480-1-i)*320+j)*6 + 4) = (unsigned char)g2;

62 *(frame_buffer + ((480-1-i)*320+j)*6 + 5) = (unsigned char)r2;

63 }

64 }

65printf("change to RGB OK \n");

66 }

4、停止采集和关闭设备

使用命令VIDIOC_STREAMOFF停止视频采集,并关闭设备。

1int close_v4l2(void)

2{

3ioctl(fd, VIDIOC_STREAMOFF, &buf_type);

4if(fd != -1)

5 {

6close(fd);

7return (TRUE);

8 }

9return (FALSE);

10 }

5、主函数

需要把我们采集到图像数据存储成图片,为了方便调试,先将原始的数据存储为yuv格式文件,再将转换成RGB后的数据存储为BMP。定义BMP头结构体

1typedef struct tagBITMAPFILEHEADER{

2 WORD bfType; // the flag of bmp, value is "BM"

3 DWORD bfSize; // size BMP file ,unit is bytes

4 DWORD bfReserved; // 0

5 DWORD bfOffBits; // must be 54

6

7}BITMAPFILEHEADER;

8

9

10typedef struct tagBITMAPINFOHEADER{

11 DWORD biSize; // must be 0x28

12 DWORD biWidth; //

13 DWORD biHeight; //

14 WORD biPlanes; // must be 1

15 WORD biBitCount; //

16 DWORD biCompression; //

17 DWORD biSizeImage; //

18 DWORD biXPelsPerMeter; //

19 DWORD biYPelsPerMeter; //

20 DWORD biClrUsed; //

21 DWORD biClrImportant; //

22 }BITMAPINFOHEADER;

完整的主函数

//@超群天晴

//https://www.wendangku.net/doc/8610925634.html,/surpassal/

int main(void)

{

FILE * fp1,* fp2;

BITMAPFILEHEADER bf;

BITMAPINFOHEADER bi;

fp1 = fopen(BMP, "wb");

if(!fp1)

{

return(FALSE);

}

fp2 = fopen(YUV, "wb");

if(!fp2)

{

printf("open "YUV"error\n");

return(FALSE);

}

if(init_v4l2() == FALSE)

{

return(FALSE);

}

//Set BITMAPINFOHEADER

bi.biSize = 40;

bi.biWidth= IMAGEWIDTH;

bi.biHeight= IMAGEHEIGHT;

bi.biPlanes= 1;

bi.biBitCount= 24;

bi.biCompression= 0;

bi.biSizeImage= IMAGEWIDTH*IMAGEHEIGHT*3;

bi.biXPelsPerMeter= 0;

bi.biYPelsPerMeter= 0;

bi.biClrUsed= 0;

bi.biClrImportant= 0;

//Set BITMAPFILEHEADER

bf.bfType = 0x4d42;

bf.bfSize= 54 +bi.biSizeImage;

bf.bfReserved= 0;

bf.bfOffBits= 54;

v4l2_grab();

fwrite(buffers[0].start, 640*480*2, 1, fp2); printf("save "YUV"OK\n");

yuyv_2_rgb888();

fwrite(&bf, 14, 1, fp1);

fwrite(&bi, 40, 1, fp1);

fwrite(frame_buffer, bi.biSizeImage, 1, fp1); printf("save "BMP"OK\n");

close_v4l2();

return(TRUE);

}

三、PC测试

程序编写完后,可以先在PC上做测试(实际整个调试过程都是在PC上,直道最后PC上能实现功能再挪到ZedBoard上的)。PC上测试的结果

在/usr目录下可以查看到采集到的图片

四、Zedboard测试

PC上测试OK后,可以“挪”到ZedBoard上了。使用arm-xilinx-linux交叉编译环境对源文件进行交叉编译,将生成的可执行文件拷贝到ZedBoard上运行即可。

使用命令

arm-xilinx-linux-gnueabi-gcc v4l2grab.c -o zed-camera

对程序进行编译,编译通过后将生成的可执行文件zed-camera拷贝到到ZedBoard上,并将USB 摄像头连接到ZedBoard上,通过命令

ls /dev

查看dev目录下的是否有video0设备。如果有,可以运行可执行文件了。在运行前我比较习惯获得可执行文件的权限,使用命令

参数+x的意思是这个文件对于当前用户是可执行的。也可以使用

chmod 777 zed-camera

这样所有用户都有读写执行的权限。使用命令

./zed-camera

执行可执行程序,程序运行,并输出以下信息:

zynq> ./zed-camera

[ 318.290000] usb 1-1.3: reset high-speed USB device number 3 using xusbps-ehci

driver: uvcvideo

card: UVC Camera (046d:0825)

bus_info: usb-xusbps-ehci.0-1.3

version: 197376

capabilities: 4000001

Device /dev/video0: supports capture.

Device /dev/video0: supports streaming.

Support format:

1.YUV 4:2:2 (YUYV)

2.MJPEG

fmt.type: 1

pix.pixelformat: YUYV

pix.height: 480

pix.width: 640

pix.field: 1

init /dev/video0 [OK]

grabyuyv OK

save /usr/image_yuv.yuv OK

change to RGB OK

save /usr/image_bmp.bmp OK

可以看到我使用的USB摄像支持YUYV和MJPEG两种格式。我也试过其他USB摄像头,大部分都只支持YUYV而不支持MJPEG或者RGB24。

采集到的图片默认是在/usr目录下的,将其拷贝出来

cp /usr/image* /mnt

再PC上查看,效果还不错

=============================

嵌入式系统设计与应用

嵌入式系统设计与应用第五章程序设计与分析(1) 西安交通大学电信学院 任鹏举

本章主要内容 Software Design Cycle ●嵌入式软件中的组件(状态机 、循环缓存器、队列) ●编程模型,如数据流和控制图●编译方法介绍 ●根据性能、大小和功耗来分析 和优化程序 ●如何测试程序以验证其正确性

1 嵌入式程序组件 ●状态机(State machine) 用变量来表示内部的状态,根据输入完成状态的转移交通灯控制、CPU design controller ●循环缓冲区(Circular buffer) I/O input buffer ●队列(Queue)

状态机(1) ● 反应系统(reactive system ):响应外部事件的系统。 ●外部输入是间歇到达● 适合使用状态机描述 ● 有限状态机是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 ●Moore 机:● Mealy 机:输出只由当前状态确定 输出依赖于当前状态和输入

状态机(2) 例子:一个简单的座位安全带控制器 idle buzzer seated belted 未入座/-入座/定时器启动 未系安全带且定时器未超时/- 未系安全带/定时器启动系好安全带/-系好安全带/蜂鸣器关闭 定时器超时/蜂鸣器启动 未入座/-未入座/蜂鸣器关闭输入/输出-= 无动作

状态机(3) #define IDLE 0#define SEATED 1#define BELTED 2#define BUZZER 3switch (state) { case IDLE: if (seat) { state = SEATED; timer_on = TRUE; } break; case SEATED: if (belt) state = BELTED; else if (timer) state = BUZZER; break; case BELTED: if (!seat) state = IDLE; else if (!belt) state = SEATED; break; case BUZZER: if (belt) state = BELTED; else if (!seat) state = IDLE; break; } Inputs :seat, belt, timer Outputs: buzzer

人工智能在物联网中的应用毕业论文

毕业设计 设计(论文)题目:人工智能在物联网中的应用 专业班级:物联网141 学生姓名:周钟婷 指导教师:李生好 设计时间:2017.5.8——2017.6.9 重庆工程职业技术学院

重庆工程职业技术学院毕业设计(论文)任务书 任务下达日期:2017.5.8 设计(论文)题目:人工智能在物联网中的应用 设计(论文)主要内容和要求: 1.显示器件:引领TFT-LCD技术的创新和发展,致力于加快AMOLED、柔性显示、增强 现实、虚拟现实等新型显示器件及薄膜传感器件的进步。 2.智慧系统:以“物联网和人工智能”为主要方向,以用户为中心,基于在显示、人 工智能和传感技术优势,发展智能制造、智慧屏联、智慧车联、智慧能源四大物联网解决方案。 3.智慧健康服务:将显示技术、信息技术与医学、生命科技跨界结合,发展信息医学, 提供物联网智慧健康产品及服务。 教学团队主任签字:指导教师签字: 年月日年月日

重庆工程职业技术学院毕业设计(论文)指导教师评语评语: 成绩: 指导教师签名: 年月日

重庆工程职业技术学院毕业设计(论文)答辩记录

目录 摘要................................................... (1) 第一章目前人工智能技术的研究和发展状况......... . (2) 第二章显示器件事业技术应用 (2) 第三章智慧系统事业技术应用 (2) 3.1智能制造 (2) 3.2智慧屏联 (2) 3.3智慧能源 (2) 3.4智慧车联 (3) 第四章智慧健康服务事业技术应用.................... .. (3) 第五章目前人工智能发展中所面临的难题.......... . (3) 5.1计算机博弈的困难................... .. (3) 5.2机器翻译所面临的问题................... . (4) 5.3自动定理证明和GPS的局限.......... (4) 5.4模式识别的困惑 (5) 第六章人工智能的发展前景 (5) 6.1人工智能的发展趋势 (5) 6.2人工智能的发展潜力大 (5) 结束语 (6) 参考文献 (6)

大作业设计报告书(嵌入式系统原理与开发)

大作业设计报告书 题目:嵌入式系统原理与开发 院(系):物联网工程学院 专业: 班级: 姓名: 指导老师: 设计时间: 10-11 学年 2 学期 20XX年5月

目录 1.目的和要求 (3) 2.题目内容 (3) 3.设计原理 (4) 4.设计步骤 (5) 4.1 交通指示灯设计 (5) 4.2 S3C44B0X I/O 控制寄存器 (6) 4.3 红绿灯过渡代码: (8) 4.4 电源电路设计 (10) 4.5 系统复位电路设计 (11) 4.6 系统时钟电路设计 (11) 4.7 JTAG 接口电路设计 (12) 4.8串口电路设计 (12) 5.引脚分类图 (13) 6.参考文献 (13)

1.目的和要求 ARM技术是目前嵌入式应用产业中应用十分广泛的先进技术,课程开设的目的在于使学生在了解嵌入式系统基础理论的前提下能够掌握ARM处理器的汇编语言和c语言的程序设计方法,掌握S3C44B0X芯片的基本硬件结构特点和接口设计方法,同时熟悉ARM开发环境,学习ARM的硬件设计和软件编程的基本方法,为今后从事相关的应用与研究打下基础。通过大作业要达到如下目的: 一、掌握ARM的开发工具使用和软件设计方法。 二、掌握ARM处理器S3C44B0X的原理和GPIO接口设计原理。 三、掌握C语言与的ARM汇编语言的混合编程方法; 四、培养学生选用参考,查阅手册及文献资料的能力。培养独立思考,深入研 究,分析问题、解决问题的能力。 五、通过课程设计,培养学生严肃认真的工作作风。 2.题目内容 题目:交通指示灯系统设计 功能描述: 1.用S3C44B0X的GPIO设计相关电路; 2.设计相关的软件并注释; 3.实现十字路口2组红、黄、绿交通灯交替显示。 编程提示: 1.交通灯可用发光二极管代替; 2.电路可部分参照实验电路; 3.时间控制可以使用软件循环编程解决。

(完整word版)嵌入式系统设计与应用

嵌入式系统设计与应用 本文由kenneth67贡献 ppt文档可能在W AP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 课程名称:课程名称:嵌入式系统设计与应用 总学时:其中讲课36学时,上机实践环节12 36学时12学时总学时:其中讲课36学时,上机实践环节12学时教材:嵌入式系统设计教程》教材:《嵌入式系统设计教程》电子工业出版社马洪连参考书:参考书:1、《嵌入式系统开发与应用》北航出版社、田泽编著. 嵌入式系统开发与应用》北航出版社、田泽编著. 2、《ARM体系结构与编程》清华大学出版社杜春雷编著ARM体系结构与编程体系结构与编程》嵌入式系统设计与实例开发—ARM ARM与C/OS3、《嵌入式系统设计与实例开发ARM与μC/OS-Ⅱ》清华大学出版社王田苗、魏洪兴编著清华大学出版社王田苗、ARM嵌入式微处理器体系结构嵌入式微处理器体系结构》4、《ARM嵌入式微处理器体系结构》北航出版社、马忠梅等著. 北航出版社、马忠梅等著. 张石.ARM嵌入式系统教程嵌入式系统教程》5、张石.《ARM嵌入式系统教程》.机械工业出版2008年社.2008年9月 1 课程内容 绪论:绪论: 1)学习嵌入式系统的意义2)高校人才嵌入式培养情况嵌入式系统设计(实验课)3)嵌入式系统设计(实验课)内容安排 第1章嵌入式系统概况 1.1 嵌入式系统的定义1.2 嵌入式系统的应用领域及发展趋势1.3 嵌入式系统组成简介 第2章嵌入式系统的基本知识 2.1 2.2 2.3 嵌入式系统的硬件基础嵌入式系统的软件基础ARM微处理器的指令系统和程序设计ARM微处理器的指令系统和程序设计 2 第3章 3.1 3.2 3.3 基于ARM架构的嵌入式微处理器基于ARM架构的嵌入式微处理器ARM 概述嵌入式微处理器的组成常用的三种ARM ARM微处理器介绍常用的三种ARM 微处理器介绍 第4章 4.1 4.2 4.3 4.4 4.5 4.6 嵌入式系统设计 概述嵌入式系统的硬件设计嵌入式系统接口设计嵌入式系统人机交互设备接口嵌入式系统的总线接口和网络接口设计嵌入式系统中常用的无线通信技术 3 第5章嵌入式系统开发环境与相关开发技术 5.1 5.2 5.3 5.4 5.5 6.1 6.2 6.3 6.4 概述嵌入式系统的开发工具嵌入式系统调试技术嵌入式系统开发经验嵌入式系统的Bootloader Bootloader技术嵌入式系统的Bootloader技术μC/OS-II操作系统概述C/OS-II操作系统概述ADS开发环境ARM ADS开发环境C/OS-II操作系统在ARM系统中的移植操作系统在ARM μC/OS-II操作系统在ARM系统

嵌入式系统设计与应用复习资料.docx

嵌入式系统设计与应用复习资料 (一)?单项选择题: 1. 下面哪个系统属于嵌入式系统。 ( 八、“天河一号”计算机系统 C 、联想S10±网木 D ) B 、联想T400笔记本计算机 D 、联想OPhone 手机 2. 软硕件协同设计方法与传统设计方法的最大不同Z 处在于(B )。 A 、软硬件分开描述 C 、协同测试 3. 卜?面关于哈佛结构描述正确的是(A A 、程序存储空间与数据存储空间分离 C 、程序存储空间与数据存储空间合并 4. 下面哪一种工作模式不属于ARM 特权模式 A 、用户模式 B 、系统模式 C 、 5. ARM7TDM1的工作状态包括(D )。 A 、测试状态和运行状态 C 、就绪状态和运行状态 6. USB 接口移动硬盘最合适的传输类型为( A 、控制传输 B 、批量传输 C 、 7. 下而哪一种功能单元不属于I/O 接口电路。(D ) A 、USB 控制器 B 、UART 控制器 C 、以太网控制器 &下面哪个操作系统是恢入式操作系统。(B ) As Red-hat Linux B 、 PCLinux C 、 Ubuntu Linux D 、 SUSE Linux 9. 使用Host-Target 联合开发嵌入式应用,(B )不是必须的。 A 、宿主机 B 、银河麒麟操作系统 C 、目标机 D 、交叉编译器 10. 下面哪个系统不属于嵌入式系统(D )。 A 、MP3播放器 B 、GPS 接收机 C 、“银河玉衡”核心路由器 D 、“犬河一号”计算机系统 11. 在嵌入式系统设计中,嵌入式处理器选型是在进行(C )吋完成。 A 、需求分析 B 、系统集成 C 、体系结构设计 D 、软便件设计 12. 下面哪一类嵌入式处理器最适合于用于工业控制(B )。 A 、嵌入式微处理器 B 、微控制器 C 、DSP D 、以上都不合适 13. 关于ARM 了程序和Thumb 了程序互相调用描述正确的是(B )。 A 、 系统初始化Z 后,ARM 处理器只能工作在一种状态,不存在互相调用。 B 、 只要遵循一定调用的规则,Thumb 子程序和ARM 子程序就可以互相调用。 C 、 只要遵循一定调用的规则,仅能Thumb 子程序调用ARM 子程序。 D 、 只耍遵循一定调用的规则,仅能ARM 子程序调用Thumb 子程序。 14. 关于ARM 处理器的异常的描述不正确的是(C )。 A 、复位属于异常 B 、除数为零会引起异常 B 、软硬件统一描述 D 、协同验证 B 、存储空间与10空间分离 D 、存储空间与10空间合并 (A )0 软中断模式 D 、FTQ 模式 B 、挂起状态和就绪状态 D 、ARM 状态和Thumb 状态 B )0 中断传输 D 、等时传输 D 、LED

《人工智能及应用》论文

重庆理工大学 专业选修课课程考察报告《人类智能与人工智能的思考》 课程名称:《人工智能及应用》学生姓名: 学号: 提交时间:2016年12月12日

[摘要] 计算机技术的高速发展使得计算机的运算速度可以超过人脑的运算速度,同时出现了诸如进行人机对弈等高度智能的计算机,那么是否意味着人工智能能够达到或超过人类智能的程度呢?本文将对此进行分析、思考。 [关键词] 计算机;人类智能;人工智能;算法;思维 进入2l世纪,计算机硬件和软件更新的速度越来越快,计算机这个以往总给人以冷冰冰的机器的形象也得到了彻底的改变。人机交互的情形越来越普遍,计算机被人类赋予了越来越多的智能因素。伴随着人类把最新的计算机技术应用于各个学科,对这些学科的认知也进入了日新月异的发展阶段,促使大量的新的研究成果不断涌现。例如:“人机大战”中深蓝计算机轻松的获胜、人类基因组排序工作的基本完成、人类大脑结构性解密、单纯器官性克隆的成功实现等等。随着计算机这个人类有史以来最重要的工具的不断发展,伴随着不断有新理论的出现,人类必须重新对它们进行分析和审视。由于近几年生物学和神经生理学等许多新的研究成果的出现,对于人工智能与人类智能之间的关系引起了人们更多的思考。本文以比较的方法分析人类智能与人工智能二者的异同,并从马克思主义哲学的角度再次对人工智能与人类智能的进行了分析。 一、人类智能与人脑思维 我们知道所有的动物都有中枢神经控制系统,有了这一套系统也就有了思维。思维在不同的生物之间具有不同的功能,在低等动物中思维的作用更多的是本能控制,高等动物除了本能控制以外还有为适应环境所工作,人类思维则具有了改造环境所进行的工作。人类的思维起源于对周围事物的认识,最初是形象思维过程,等人们发现各个事物之间的相互关系之后,就开始了逻辑思维过程,随着对事物之间相互关系的分门别类和对周围世界认识的加深,又有形式逻辑,数理逻辑,抽象逻辑等等。人类自身的智能是人类思维活动中表现出来的能力,大脑是人类认知和智能活动的载体,思维是大脑对客观事物的本质及其内在联系的概括和反映。人类智能的也就是人类思维的结果。但是直到现在,科学家对于人脑的结构以及人脑的思维过程一直处于研究阶段,当然,随着时间的推移和科学技术水平的提高,有一天人类应该会破解自身的思维过程。

广东海洋大学嵌入式系统课程设计

《嵌入式系统》设计报告学生姓名 Adao (学号) 所在学院数学与计算机学院 所在班级计科1141 指导教师 成绩

目录 1.课程设计目的 (2) 2.系统分析与设计 (2) 3.系统结构图 (2) 4.实现过程 (3) 5.实验效果 (5) 6.代码分析 (6) 7.系统测试出现的问题和解决的方案 (7) 8.系统优缺点 (7) 9.心得体会 (8) 参考文献 (8)

双按键控制流水灯系统开发 1.课程设计目的: 本次课程设计目的主要是对之前所学习的STM32的某个实验进行更深入的学习与了解,弄懂引脚,端口等相关的配置,对实验原理和具体实现有一定的理解,能做到自己通过原理图和使用库函数等把功能实现出来。我选择的是EXTI-外部中断实验并加以整合,具有一定实用功能的系统,可以对外提供服务。 2.系统分析与设计: 本课程设计所定义的系统主要功能为,通过两个按键KEY1(PA0)、KEY2(PC13)可以实现对流水灯进行同步控制,即一个开关控制产生的灯的状态可以被另一个开关去改变,按键控制需要对两个按键的端口,引脚等进行相关配置,并在两个引脚的中断服务程序中完成对流水灯状态同步控制的操作。本还想通过使用SysTick(系统滴答定时器)功能对流水灯进行精确定时,但由于时间比较匆促,最终没有实现。 3.系统结构图: 图3-1

4.实现过程: 1、GPIO的输入模式有上拉输入模式、下拉输入模式、浮空输入模式和模拟输入模式。GPIO 中的每个引脚可以通过配置端口配置寄存器来配置它的模式。每个引脚的模式由寄存器的4个位控制。 上拉/下拉输入模式:1000 浮空输入模式:0100 模拟输入模式:0000 2、STM32的所有GPIO都可以用作外部中断源的输入端。STM32的中断由中断控制器NVIC 处理。STM32的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小,表面它的优先级别越高。抢占属性会出现嵌套中断。 3、编写NVIC_Configuration()函数配置NVIC控制器的函数。 static void NVIC_Configuration(uint8_t IRQ) { NVIC_InitTypeDef NVIC_InitStructure; //将NVIC中断优先级分组设置为第1组 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* 配置中断源 */ NVIC_InitStructure.NVIC_IRQChannel = IRQ;//设置中断线 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//设置抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//设置响应优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //对NVIC中断控制器进行初始化 } 4、调用GPIO_EXTILineConfig()函数把GPIOA、Pin0和GDIOC、PIN13设置为EXTI输入线。 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); 5、填写EXTI的初始化结构体,然后调用EXTI_Init()把EXTI初始化结构体的参数写入寄存器。编写EXTI_PA0_Config()函数完成各种需要的初始化。 void EXTI_Pxy_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* config the extiline clock and AFIO clock */

江苏科技大学通信专业嵌入式系统设计及应用_复习大纲

嵌入式系统设计复习 题型: 1、填空,15分左右 2、选择,30分左右 3、简答题40分左右 4、综述15分左右 第一章嵌入式系统概述 提纲: 1、掌握嵌入式系统的定义 2、了解嵌入式系统的一般组成 嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序 (嵌入式系统一般由嵌入式计算机和执行部件组成。其中嵌入式计算机是整个嵌入式系统的核心,主要包括硬件层、中间层、系统软件层以及应用软件层) 知识点: 1、嵌入式系统的定义与特点 定义:是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统 特点:软件硬件可裁剪 ①专用性:嵌入式系统具有特定的功能,用于特定的任务; ②低成本:嵌入式系统极其关注成本; ③低功耗:嵌入式系统大都有功耗的要求; ④高实时性OS; ⑤嵌入式系统的运行环境广泛; ⑥嵌入式系统的软件通常要求固态化存储; ⑦嵌入式系统的软件、硬件可靠性要求更高; 2.RISC指令系统的特点 答:指令系统:RISC设计者把上要精力放在那些经常使用的指令上,尽量使它们具有简单高效的特色。对不常用的功能,常通过组合指令来实现。因此,在RISC机器上实现特殊功能时,效率可能较低。但可以利用流水技术和超标量技术加以改进和弥补。 存储器操作:RISC对存储器操作有限制,使控制简单化 程序:RISC汇编语言程序一般需要较大的内存空间,实现特殊功能时程序复杂,不易设计 中断:RISC机器在一条指令执行的适当地方可以响应中断 CPU:由于RISC CPU包含少的单元电路,因而面积小、功耗低 设计周期:RISC微处理器结构简单,布局紧凑,设计周期短,且易于采用最新技术易用性:RISC微处理器结构简单,指令规整,性能容易把握,易学易用 应用范围:由于RISC指令系统的确定与特定的应用领域有关,所以RISC机器更适合于嵌入式应用 3、嵌入式系统由硬件与软件组成,其中软件的组成 答:由实时多任务操作系统、文件系统、图形用户界面接口、网络系统及通用组件模块组成 4、嵌入式系统的运行可靠性指标

人工智能论文3500字

研究生课程论文 人工智能前沿 论文题目:人工智能技术在求机器人工作 空间的应用 课程老师:罗亚波 学院班级:汽研1602班 学生姓名:张小涵 学号:15 2016年10月

人工智能技术在求机器人工作空间的应用 摘要 人工智能的发展迅速,现在已经渗透到机器人的全方位分析与机器人的工作空间的计算中,其对机器人的应用起着越来越重要的作用。元素限制法由三个限制元素构成,分别为杆长限制、转角限制、连杆的干涉。在初步确定限制元素后即可得到边界条件,即可得到工作空间。圆弧相交法由运动学反解过程、工作空间的几何描述以及工作空间的计算过程组成。两者各有其优缺点,都就是可取的求工作空间的方法。 关键词:人工智能元素限制圆弧相交工作空间 Abstract With the rapid development of artificial intelligence, it has been applied to the analysis of the robot and the working space of the robot、It plays a more and more important role in the application of the robot、The element restriction method is composed of three elements, which are the length of the rod, the restriction of the angle and the interference of the connecting rod、 Boundary conditions can be obtained after the preliminary determination of the limiting element、 The arc intersection method is composed of the process of the inverse kinematics of the kinematics, the geometric description of the working space and the calculation process of the working space、 Both have their own advantages and disadvantages, are desirable for the working space of the method、Key words: artificial intelligence element limit arc intersection working space

嵌入式系统课程设计报告书

成绩学生课程实践能力考查 题目:温度按键设定、显示、报警系统设计 课程名称:嵌入式系统开发专业班级: 学生学号: 学生姓名: 考查地点: 考查时长: 4小时 所属院部: 指导教师: 2017 — 2018学年第 2 学期 金陵科技学院教务

2017-2018学年第2学期《嵌入式系统开发》实践能力考核 任课教师签名: 日期: 温度按键设定、显示、报警系统设计 要求: 1、读取DS18B20温度,在液晶上实时显示,并显示上、下限,初始值上限32,下限26。 2、通过按键可以设置环境温度的上限与下限, WK_UP键按下调节上限,再按下调节下限,再按下调节上限…… KEY1按下加1; KEY0按下减1, 根据上限与下限判断当前温度有没有超出范围。 3、当温度超过上限,LED1隔1秒亮一次。超过下限,LED2隔1秒亮一次。(也可自定义报警方式) 4、串口波特率一律用9600bps。 液晶显示的信息: STM32 test name: xxxxxxxxx Maximum is 32C,Minimum is 26 C The temperature is 29 C,now! (xxxxx就是自己的名字拼音) 目录: 第一章.系统要求 1、1设计要求

1、2设计方案 第二章.硬件设计 2、1开发板原理图 2、2 DS18B20模块 2、3按键模块 2、4 LCD显示模块 2、5 LED 模块 第三章.软件设计 3、1程序流程图 3、2程序部分代码 3、2、1主函数、main、c 3、2、2 LED 函数led、c 3、2、3温度代码 s18b20、c 3、2、4键盘代码key、c 第四章、实物效果图 第五章、课程总结 第一章.设计要求及方案 1、1设计要求 1、读取DS18B20温度,在液晶上实时显示,并显示上、下限,初始值上限32,下限26。 2、通过按键可以设置环境温度的上限与下限, WK_UP键按下调节上限,再按下调节下限,再按下调节上限…… KEY1按下加1; KEY0按下减1, 根据上限与下限判断当前温度有没有超出范围。

人工智能结课论文

内蒙古科技大学2014/2015 学年第一学期《人工智能》结课报告 课程号:76807376-01 考试方式:结课报告 使用专业、年级:计算机应用2012-3,4 任课教师:陈淋艳 班级:12级计算机3班 学号:1276807336 姓名:王志鹏

目录 前言 (3) 一、专家系统简介 (4) 二、关键字: (5) 三、专家系统概念和理论 (6) 四、专家系统的发展概况 (7) 五、专家系统的应用分析 (8) 六、专家系统的发展前景 (12) 七、专家系统的总结 (13) 八、学习心得 (14) 参考文献 (15)

前言 人工智能是经过40多年发展起来的一门综合性学科,它旨在研究如何利用计算机等现代工具设计模拟人类智能行为的系统。在众多的人工智能应用领域中,专家系统是30多年来发展起来的一种最具代表性的智能应用系统,它旨在研究如何设计基于知识的计算机程序系统来模拟人类专家求解专门问题的能力。专家系统是人工智能中最活跃的一个分支,是人工智能发展最重要的推动力。 由于人类对自身的思维规律和智能行为仍在探索中,因此,人工智能与专家系统仍然是一门开放的年轻学科。近几年来,人工智能与专家系统的研究越来越深入,新的思想、新的理论以及新的方法与技术不断涌现,新的研究成果不断充实着这一研究领域,尤其是模糊逻辑与神经网络及其结合的研究已成为当前人工智能或智能模拟的重要研究方向,学术论文数以千计,应用成果迭出。

一、专家系统简介 摘要:自从1965年世界上第一个专家系统DENDRAL问世以来,专家系统的技术和应用,在短短的30年间获得了长足的进步和发展。特别是20世纪80年代中期以后,随着知识工程技术的日渐丰富和成熟,各种各样的实用专家系统如雨后春笋般地在世界各地不断涌现。构建专家系统用到的思维方式可能是各种认知工具中最难的,因为它需要形式推理与逻辑推理,建构专家系统需要智力上的参与和挑战。本文首先介绍了专家系统的概念和理论及发展概况,并着重分析他们的应用和发展前景。

嵌入式系统设计与应用课程设计报告

《嵌入式系统设计与应用》课程设计报告 专业: 班级: 姓名: 学号: 指导教师:

目录 一、设计目的 (3) 二、开发环境 (3) 三、设计任务及要求 (3) 四、实现过程 (3) 用户应用程序设计 (3) 服务器端程序 (3) 五、总结 (4)

一、设计目的 (1)、熟悉并掌握在Linux开发环境下C语言程序设计及编译方法、嵌入式系统;(2)、掌握嵌入式linux下基础网络编程:socket编程 (3)、独立编写客户机/服务器通信程序; 二、开发环境 (1) 编程环境:在Linux开发环境下设计及编译C语言程序。 (2) 硬件设备:PXA270开发板,PC机。 三、设计任务及要求 设计一套可远程调用求和函数并返回客户端的程序。 四、实现过程 用户应用程序设计 1.程序 int sum(); 2.程序 #include <> int sum(){ int i=1,sum=0; while(i<=100){ sum=sum+i; i++; } return sum; } 服务器端程序 /******************************* * 服务器端程序*

********************************/ #include #include #include <> #include <> #include <> #include <> #include <> #include #include “” main() { int sockfd,new_fd,numbytes; struct sockaddr_in my_addr; struct sockaddr_in their_addr; int sin_size,sum; char buff[100] ,temp[100]; sum=sum(); itoa(sum, temp, 10); ..\n"); ,100,0)==-1) { perror("send"); exit(1); } socket success! Sockfd=3; bind success; Listening... Hello!I am Client. (5)、在PC机上运行客户端程序 # ./ result:5050 五、总结 通过本次课程设计,让我熟悉并掌握在Linux开发环境下C语言程序设计及编译方法、嵌入式系统、明白了嵌套字的使用方法、嵌入式linux下基础网络编

嵌入式系统设计与应用-西安交通大学教师个人主页

嵌入式系统设计与应用第六章进程和操作系统(3)西安交通大学电信学院孙宏滨 i n S u n i 'a n J i a o t o n g U i v e r s i t y I n t e r n a l T e a c h i n g U s e O n l y

● 我们该如何评估调度策略?● 能满足所有截止时限 ● CPU 利用率---CPU 执行有用工作所占的时间比例● 调度开销---做调度决策所需的时间 i n S u n i 'a n J i a o t o n g U i v e r s i t y I n t e r n a l T e a c h i n g U s e O n l y

● 分配优先级主要有两种方法:● 静态优先级:在整个执行过程中优先级始终不变● 动态优先级:在执行过程中优先级发生变化 i n S u n i 'a n J i a o t o n g U i v e r s i t y I n t e r n a l T e a c h i n g U s e O n l y

● 单调速率调度(Rate-Monotonic Scheduling, RMS ):首先为实时操作系统开发的调度策略之一,直至现在仍然被广泛使用。● RMS 属于静态调度策略。事实证明,固定优 先级的做法在许多情况下都足以有效地调度进程。● RMS 的理论基础是单调速率分析(Rate Monotonic Analysis, RMA )。i n S u n i 'a n J i a o t o n g U i v e r s i t y I n t e r n a l T e a c h i n g U s e O n l y

嵌入式系统课程设计报告材料

嵌入式系统课程设计报告 课程名称:嵌入式系统课程设计 项目名称:基于ARM实现MP3音乐盒 专业:电子科学与技术

一、设计容 基本功能:预存四首歌曲,实现循环播放; 每个按键对应一首歌曲。 拓展功能:通过按键简单演奏音乐,类似钢琴; 实现两个模式的切换,切歌模式和音量加减模式。 二、设计思路 基础功能: 将音频数据存储在SD卡中,使用FATFS文件系统进行数据的读写,通过SPI2总线将数据传到核。核再将数据通过SPI1总线传送到音频解码模块VS1053,输入的数据(即比特流数据)被解码后送到DAC发出声音。 将音乐存储在SD卡,通过文件的地址来判别将要播放哪一首音乐,通过地址的递增和循环来实现音乐的自动循环播放。按键对曲目的控制,可通过键盘扫描函数,判断哪一个键被按下,使键盘扫描函数返回不同的返回值,实现对文件地址的控制。将此返回值设置为全局变量,可实现在音乐播放中曲目的切换。 另外,我们还利用解码模块实现对音量的控制,使用按键控制音量的提高或降低。使用SPI1总线将TFT显示屏连接到核,显示按键功能、当前曲目、当前模式等信息。 由于开发板只有5个按键,按键数量有限,需要对按键实现曲目切换和音量功能的复用。我们小组设置了两种模式,切歌模式和音量模式,并定义左键为模式切换键,实现不同模式的选择和按键的复用。 拓展功能: 基本思路是通过定时器中断来产生一定频率的50%空占比的脉宽调制波,用此脉宽调制波激励扬声器,从而使扬声器发出一定频率的声音。 所以只要将不同按键的中断子程序设置为对定时器进行不同数据的配置,即可实现不同按键与不同扬声器发生频率的对应。 然后使一个按键的按下与松开均进入中断,且分别实现开启(扬声器发声)与关闭(扬声器不发声)定时器的功能,从而使课题的附加功能表现地更自然。 三、硬件配置 基础功能: (1)SD卡:存储音频数据

人工智能论文

重庆理工大学 专业选修课课程考查报告 《AI的发展与未来》 课程名称:《人工智能及应用》 专业:软件工程 学号: 学生姓名: 提交时间:2017年5月5日

进入人工智能 人工智能的话题,在近年尤其火热,很多人是因为在2016年看到AlphaGo打败了世界围棋冠军李世石。这使得大家对人工智能非常感兴趣,同时也有很多人思考人工智能是否应该继续无节制地发展下去?人们会担忧将来人工智能发展到一定的高度可能会取代人类。包括霍金、比尔·盖茨这样伟大的人物也怀疑人工智能。 我们谁都无法下结论说到底该不该发展人工智能,所以我们先来了解一下什么是人工智能,否则我们只会在对人工智能的恐惧中无法获得理性认知。 人工智能似乎没有明确的定义。人工智能就是研究如何使计算机去做过去只有人才能做的智能工作[1],这是美国麻省理工学院的温斯顿教授认为的人工智能。人工智能大概来说可能是有几个部分,首先是感知,感知是包括视觉、语音、语言;然后是决策,做一些预测,做一些判断;那当然如果你要做一套完整的系统,就像机器人或是自动驾驶,它会需要一个反馈[2]。 人工智能的发展 通过了解人工智能发展的主要里程碑,可能会更加直观的了解人工智能。在感知方面,比如我国的科大讯飞。该企业使命是让机器能听会说,能理解会思考;用人工智能建设美好世界[3]。正如他们的企业使命,讯飞语音识别软件现在已经能听懂人们所说的,而且正确率相当高,如果要打很多字完全可以不动手,直接念一遍就都以文字的形式输出来。以前电视里播的现场直播都是没有字幕的,现在已经可以在直播的时候也可以看到实时字幕。可见语音识别给我们带来了巨大的便利。还如微软的小冰,你可以在微信关注她,并且同她聊天,还可以和她语音聊天,她甚至可以为你唱歌。现在小冰会的东西越来越多,也越来越智能。 决策方面,从早期MicrosoftOffice里的工具到Google广告的推荐,然后到金融行业的很多智能决策公司的出现,进步迅速。现在的gamil,有时候收到email,Google会跳出来问要不要发回复,有时候它连回复都帮你写好了,而且写的很精确。这也是人工智能的体现。可能以后我们讲话都不用,助理能帮我们搞定。最后是反馈,比如无人驾驶汽车,它通过车载传感系统感知道路环境,并根据感知所获得的道路、车辆位置和信息,控制车辆的转向和速度,自动规划行车路线并控制车辆到达预定目标的。从而使车辆能够安全、可靠地在道路上行驶。 深度学习及其应用领域 提到人工智能就不得不提深度学习,它是一种神经网络,它的特点是使用了多层网络,能够学习抽象概念,同时融入自我学习,而且收敛相对快速。收敛快速可能是一种技巧,不见得是一个理论,但是有一批人通过它解决了很多重要的问题。简单的来说,如果我们有很多笑脸,然后我们把笑脸的像素输入到一个神经网络里面去,最后你那儿希望让机器能识别这是姚明,那是马云,但是因为你这个深度学习的网络很深,要一次性学会这么多也会比较困难,所以就需要用到一个比较快速收敛的技巧——自我学习。通过自我学习,机器会逐步从大量的样本中逐层抽象出相关的概念,然后做出理解,最终做出判断和决策。深度学习或者是任何的机器学习,它是不是超越人类的能力表现,如果超越的话,可能很多应用就会产生。比如在机场,如果机器识别人脸的准确度超过人,那么那些边防的人就可能不需要那么多。这并不是说机器不会犯错,而是说既然人不能比机器做的更好,那不妨就用机器取代。

90192-嵌入式-“嵌入式系统”之设计方法

目前,嵌入式实时系统已经渗透到社会的每个角落,不管在军事还是民用领域。由此,学者对嵌入式实时系统的研究也如火如荼,当然对其的设计方法也应密切关注。嵌入式设计阶段的主要任务是如何在给定的约束条件下完成系统的目标。当下,嵌入式实时系统的设计方法主要分为结构化设计方法、面向对象的设计方法和基于组件的设计方法。 结构化设计方法是嵌入式软件最成熟、使用最广泛的设计方法。由于应用系统可抽象成一个不断处理外部事件的过程,结构化设计方法就是按照结构化的设计原则分别设计好各个事件处理模块。其中,CODARTS(concurrent design approach for real-time systems,并发性实时系统结构设计方法)是最好的,它使用了信息隐藏技术,并适用于处理任务结构。 结构化设计方法的主要步骤为(1)开发系统的环境模型和行为模型,将大型系统分解成若干个子系统,并且确定子系统中对象和功能以及它们在外部事件序列场景下进行交互的方式;(2)应用任务结构化标准确定系统中的并发任务,主要内容包括并发任务的确定、任务间通信以及同步接口的确定;(3)应用模块结构化标准确定系统中信息隐藏模块;(4)根据任务划分和信息隐藏模块划分构造软件架构;(5)定义组件接口规范,以增量方式开发软件。 嵌入式实时系统的开发是面向对象技术的主要应用领域之一,采用面向对象的分析与设计方法,便于大型复杂的嵌入式系统的分解和设计。面向对象的设计方法将系统划分为对象,处理各对象之间的交互,完成系统的功能实现,同时实现信息隐藏。其中,ObjectGeode是目前嵌入式系统开发中较为流行的一套面向对象方法学,它既是方法学,又是CASE工具软件。 面向对象的设计方法主要步骤为(1)对象建模实现系统的静态模型,描述系统的静态关系,从而确定出与系统有关的实体,然后,动态建模通过用户实例建模来进行,以描述系统的动态行为和确定出系统与环境、系统内部各组成部分之间的交互关系;(2)定义应用的体系结构,使用自顶向下的分析方法将一个问题划分为比较容易解决的子问题,使用自底向上的分析方法来复用已存在的组件,同时确定并行对象之间的通信关系;(3)详细设计对系统行为进行全面描述,对并行对象和被动对象做进一步详细描述;(4)测试实例设计对并行对象的内部结

嵌入式系统设计与应用复习资料

嵌入式系统设计与应用复习资料 (一).单项选择题: 1.下面哪个系统属于嵌入式系统。( D ) A、“天河一号”计算机系统 B、联想T400笔记本计算机 C、联想S10上网本 D、联想OPhone手机 2.软硬件协同设计方法与传统设计方法的最大不同之处在于( B )。 A、软硬件分开描述 B、软硬件统一描述 C、协同测试 D、协同验证 3.下面关于哈佛结构描述正确的是( A )。 A、程序存储空间与数据存储空间分离 B、存储空间与IO空间分离 C、程序存储空间与数据存储空间合并 D、存储空间与IO空间合并 4.下面哪一种工作模式不属于ARM特权模式( A )。 A、用户模式 B、系统模式 C、软中断模式 D、FIQ模式 5.ARM7TDMI的工作状态包括( D )。 A、测试状态和运行状态 B、挂起状态和就绪状态 C、就绪状态和运行状态 D、ARM状态和Thumb状态 https://www.wendangku.net/doc/8610925634.html,B接口移动硬盘最合适的传输类型为( B )。 A、控制传输 B、批量传输 C、中断传输 D、等时传输 7.下面哪一种功能单元不属于I/O接口电路。( D ) A、USB控制器 B、UART控制器 C、以太网控制器 D、LED 8.下面哪个操作系统是嵌入式操作系统。( B ) A、Red-hat Linux B、μCLinux C、Ubuntu Linux D、SUSE Linux 9.使用Host-Target联合开发嵌入式应用,( B )不是必须的。 A、宿主机 B、银河麒麟操作系统 C、目标机 D、交叉编译器 10.下面哪个系统不属于嵌入式系统( D )。 A、MP3播放器 B、GPS接收机 C、“银河玉衡”核心路由器 D、“天河一号”计算机系统 11.在嵌入式系统设计中,嵌入式处理器选型是在进行( C )时完成。 A、需求分析 B、系统集成 C、体系结构设计 D、软硬件设计 12.下面哪一类嵌入式处理器最适合于用于工业控制( B )。 A、嵌入式微处理器 B、微控制器 C、DSP D、以上都不合适 13.关于ARM子程序和Thumb子程序互相调用描述正确的是( B )。 A、系统初始化之后,ARM处理器只能工作在一种状态,不存在互相调用。 B、只要遵循一定调用的规则,Thumb子程序和ARM子程序就可以互相调用。 C、只要遵循一定调用的规则,仅能Thumb子程序调用ARM子程序。 D、只要遵循一定调用的规则,仅能ARM子程序调用Thumb子程序。 14.关于ARM处理器的异常的描述不正确的是( C )。 A、复位属于异常 B、除数为零会引起异常 C、所有异常都要返回 D、外部中断会引起异常

人工智能论文机器学习与大数据

《人工智能》课程结课论文课题:机器学习与大数据 姓名: 学号: 班级: 指导老师: 2015年11月13日

机器学习与大数据 摘要 大数据并不仅仅是指海量数据,而更多的是指这些数据都是非结构化的、残缺的、无法用传统的方法进行处理的数据。大数据时代的来临,随着产业界数据量的爆炸式增长,大数据概念受到越来越多的关注。然而随着大数据“越来越大”的发展趋势,我们在分析和处理的过程中感觉到的困难也愈加的多了。这个时候我们想到了机器学习。机器学习几乎无处不在,即便我们没有专程调用它们,它们也经常出现在大数据应用之中,大数据环境下机器学习的创新和发展也倍加受到了关注。 关键词:大数据;机器学习;大数据时代 Machine learning and big data Abstract Big data is not only refers to the huge amounts of data, and to talk about these data are structured, broken, can't use the traditional method of processing of the era of big data, with the industry to the explosion of data volumes, large data concept is more and more , as the data, the development trend of "growing" in the process of analysis and processing we feel is more time we thought about the machine learning is almost everywhere, even if we don't have to call them specially, they are also often appear in the big data applications, large data machine learning under the environment of innovation and the development also has received

相关文档
相关文档 最新文档