人人范文网 范文大全

嵌入式程序设计课程设计

发布时间:2020-03-02 11:38:39 来源:范文大全 收藏本文 下载本文 手机版

课程设计

课 程 名嵌入式软件开发技术

题 目 基于嵌入式Linux的温度监测系统的

设计与实现

专 业 计算机科学与技术(嵌入式系统方向) 班 级 13计算机嵌入式系统班 学 号 学生姓名

2016年6月

摘要

温度是个很普遍而又非常重要的参数,在日常生活、工农业生产以及科研领域都有着广泛的应用。因此,研制能够准确地测量和记录这个参数值的系统具有十分重要的意义。

基于ARM的嵌入式温度监测系统是采用嵌入式Linux作为操作系统,针对以S5PV210为处理器的开发板设计的一个嵌入式温度监测系统。论文在分析了Linux设备驱动程序的基本工作原理基础上,讨论了开发中经常会碰到的中断处理、拥塞处理、I/O端口,并在此基础上实现了基于S5PV210嵌入式处理器的开、读、写、关外部RAM的字符设备驱动和网络驱动。结合高精度温度传感器DS18B20,实现温度的正确采集,并通过以太网络将数据上传给上位机客户端。

论文首先介绍了通信网络中各种设备特性、总线结构及传输技术,然后根据单片机与PC机之间的串行通信原理,用ubantu完成温度监测系统的软件设计与实现,为用户提供一个友好的人机界面,对监测系统进行控制并显示采集后的数据。本系统还通过多线程实现了多个客户端与服务器的通信。

关键词:S5PV210;嵌入式Linux操作系统;DS18B20;网络编程

I

Abstract

Temperature is a very common and very important parameter, in daily life, industrial and agricultural production and scientific research fields have a wide range of applications.Therefore, it is very important to develop a system that can accurately measure and record the value of this parameter.The temperature monitoring system of base on the ARM is use of embedded Linux as the operating system for the proceor to S5PV210 development board designed for an embedded temperature monitoring system.Based on the analysis of the basic working principle based on the Linux device drivers discued development often encounter interrupt handling, congestion handling, I / O ports, and on this basis to achieve the embedded proceor based on open S5PV210 reading, writing, characters off the external RAM device driver and network drives.Combined with precision temperature sensor DS18B20, to achieve the correct temperature acquisition, and upload the data via Ethernet to a PC client.At first,the paper introduces the characteristics of various devices in a communication network, the bus structure and transmiion technology, and according to the principle of serial communication between SCM and PC, with ubantu complete temperature monitoring system software design and implementation, to provide users with a friendly man-machine interface, the monitoring system to control and display the data after collection.The system also enables communication via a plurality of multi-threaded client and the server.Key words:S5PV210; embedded Linux operating system; DS18B20; Network programming

II

1.引言.......................................................................................................................................1 1.1 设计背景及意义 ...............................................................................................................1 1.2 设计的主要内容 ................................................................................................................2 2.相关技术 ...............................................................................................................................2 2.1 嵌入式Linux ......................................................................................................................2 2.2 S5PV210 .............................................................................................................................3 2.3 socket网络编程 ..............................................................................................................3 3.具体实现功能 .......................................................................................................................4 3.1总体框架图 ........................................................................................................................4 3.2客户端功能 ........................................................................................................................5 3.3 服务器功能 ........................................................................................................................5 3.4 实验板输出信息 ...............................................................................................................5 4.具体实现过程 .......................................................................................................................6 4.1 交叉编译工具的安装 .......................................................................................................6 4.2 客户端模块的设计 ...........................................................................................................7 4.3 服务器模块 .......................................................................................................................8 4.4 LED点亮模块 ..................................................................................................................10 4.5 温度感应模块 .................................................................................................................11 5.测试结果分析 .....................................................................................................................13 5.1 各模块运行的效果 .........................................................................................................13 5.2 可扩展功能 ......................................................................................................................15 6.总结与展望 .......................................................................................................................15

第一章 引言

1.1 设计背景及意义

温度作为工业、农业、国防和科研等部门最普遍的测量项目。它在工农业生产、现代科学研究以及高新技术开发过程中也是一个极其普遍而又非

1

常重要的参数。因此,在这些领域中,对于这个参数的测量与控制就显得尤为重要,特别是在纺织工业、冶金、化工、食品、温室种植,汽车制造以及气象预报和科研实验室等许多地方,都具有举足轻重的作用。

以往这些工作大多是由人工完成,不但工作量大,记录的数据少,对温度的调节缺乏实时性,而且电路复杂,标定和校准也比较麻烦,难以满足现代温度测量的要求[1]。自从传感器技术、微控制器技术和计算机技术日渐成熟之后,现代的温度测量与控制系统克服了以往系统中存在的一些问题,比如对环境温度的控制与调节以及数据的记录都由微控制器或计算机自动完成,人们的工作量大大地降低,而且测得的数据也更加的精确,对环境温度的调节更具有实时性[2]。

1.2 设计的主要内容

此次主要采用嵌入式Linux作为操作系统,针对以S5PV210为处理器的开发板设计的一个嵌入式温度监测系统。在Linux设备驱动程序的基本工作原理基础上,讨论了开发中经常会碰到的中断处理、拥塞处理、I/O端口,并在此基础上实现了基于S5PV210嵌入式处理器的开、读、写、关外部RAM的字符设备驱动和网络驱动。结合高精度温度传感器DS18B20,实现温度的正确采集,并通过以太网络将数据上传给上位机客户端。

温度监测系统根据Linux中的网络通信技术和串口通信技术来传输数据。用ubantu完成温度监测系统的软件设计与实现,为用户提供一个友好的人机界面,对监测系统进行控制并显示采集后的数据。本系统还通过多线程实现了多个客户端与服务器的通信。

第二章 相关技术

2.1 嵌入式Linux Linux是UNIX系统的一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它诞生与1991年的10月5日。以后借助与Internet

2

网,并进过全世界各地计算机爱好者的共同努力下,现已成为世界上使用最多的一种UNIX类操作系统,并且使用人数还在迅猛增涨。

本次设计采用Linux作为嵌入式操作系统的原因有以下几点:[3] 1) 低成本开发系统: 2) 可应用于多种硬件平台 3) 可定制的内核 4) 性能优异 5) 良好的网络支持

2.2 S5PV210

S5PV210又名“蜂鸟”(Hummingbird),是三星推出的一款适用于智能手机和平板电脑等多媒体设备的应用处理器。

S5PV210采用了ARM CortexTM-A8内核,ARM V7指令集,主频可达1GHZ,64/32位内部总线结构,32/32KB的数据/指令一级缓存,512KB的二级缓存,可以实现2000DMIPS(每秒运算20亿条指令集)的高性能运算能力。

包含很多强大的硬件编解码功能,内建MFC(Multi Format Codec),支持MPEG-1/2/4,H.263,H.264等格式视频的编解码,支持模拟/数字TV输出。JPEG硬件编解码,最大支持8000x8000分辨率

内建高性能PowerVR SGX540 3D图形引擎和2D图形引擎,支持2D/3D图形加速,是第五代PowerVR产品,其多边形生成率为2800万多边形/秒,像素填充率可达2.5亿/秒,在3D和多媒体方面比以往大幅提升,能够支持DX9,SM3.0,OpenGL2.0等PC级别显示技术。

具备IVA3硬件加速器,具备出色的图形解码性能,可以支持全高清、多标准的视频编码,流畅播放和录制30帧/秒的1920×1080像素(1080p)的视频文件,可以更快解码更高质量的图像和视频,同时,内建的HDMIv1.3,可以将高清视频输出到外部显示器上。

2.3 socket网络编程

Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换。[4] 几个定义:

(1)IP地址:即依照TCP/IP协议分配给本地主机的网络地址,两个进程要通讯,任一进程首先要知道通讯对方的位置,即对方的IP。

3

(2)端口号:用来辨别本地通讯进程,一个本地的进程在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通讯前必须要分配一个没有被访问的端口号。

(3)连接:指两个进程间的通讯链路。

(4)半相关:网络中用一个三元组可以在全局唯一标志一个进程:(协议,本地地址,本地端口号)

这样一个三元组,叫做一个半相关,它指定连接的每半部分。 (4)全相关:一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,不可能通信的一端用TCP协议,而另一端用UDP协议。因此一个完整的网间通信需要一个五元组来标识:(协议,本地地址,本地端口号,远地地址,远地端口号)

这样一个五元组,叫做一个相关(aociation),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。

第三章 具体实现功能

3.1总体框架图

图1 项目总体框架图

4

3.2客户端功能

1) 显示简单的用户界面 2) 发送命令给服务器 3) 接收服务器传输的数据 4) 显示温度数据

3.3 服务器功能

1) 接收客户端发送的命令 2) 处理命令

3) 把命令转发给硬件 4) 获取硬件处理所得的数据 5) 把该数据传给客户端

3.4 实验板输出信息

1) LED灯按照客户端的指令亮灭 2) 蜂鸣器唱歌

3) 核心板控制输出温度传感器的数据到服务器

5

第四章 具体实现过程

个应用系统要完成各项功能,首先必须有较完善的硬件作保证。同时还必须得到相应设计合理的软件的支持,尤其是微机应用高速发展的今天,许多由硬件完成的工作,都可通过软件编程而代替。甚至有些必须采用很复杂的硬件电路才能完成的工作,用软件编和有时会变得很简单。因此充分利用其内部丰富的硬件资源和软件资源。

程序设计语言有三种:机器语言、汇编语言、高级语言。本系统运用的是高级语言所编写,也就是C语言。所用到的开发平台为ubuntu系统。

4.1 交叉编译工具的安装

(1) 考虑到现今Linux平台发展,交叉编译平台编统一为arm-linux-gcc-4.4.3 (2) 在windows系统下,建立一个共享目录,如:e:/linux_file (3) 将光盘目录linux\\中的arm-linux-gcc-4.4.3.tar.gz 复制到e:/linux_file (4) 注意在进行虚拟机设置时使共享目录的有效,并添加共享目录e:/linux_file (5) 进入linux操作系统,root目录下建立一个Armcode的子目录,将共享目录下的文件arm-linux-gcc-4.4.3.tar.gz复制到该目录 (6) 然后进入到该目录,执行解压命令:#cd /root/Armcode; #tar xvzf arm-linux-gcc-4.4.3.tgz –C /; 注意:C 后面有个空格,并且C 是大写的,它是英文单词“Change”的第一个字母,在此是改变目录的意思。 (7) 执行

arm-linux-gcc

到/opt/FriendlyARM/toolschain /4.4.3/bin 目录。

(8) 把编译器路径加入系统环境变量,运行命令:#gedit /root/.bashrc 编辑/root/.bashrc 文件,在最后一行添加:export PATH=$PATH: /opt/FriendlyARM/toolschain/4.4.3/bin (9) 重新登录系统(不必重启机器,开始->logout 即可),使以上设置生效,在命令行输入:arm-linux-gcc –v,会出现如下信息,这说明交叉编译环境已经成功安装。

6

4.2 客户端模块的设计

用户界面的显示:

void interface_print(char *temp) { system(\"clear\"); printf(\"\\e[31m*******************2016梧*********************\\e[0m\\n\"); printf(\"\\e[31m*

*\\e[0m\\n\"); printf(\"\\e[31m*\\e[0m \\e[32m点亮LED1: on1

on2\\e[0m\\e[31m

*\\e[0m\\n\"); printf(\"\\e[31m*\\e[0m \\e[33m关闭LED1: off1

off2\\e[0m\\e[31m

*\\e[0m\\n\"); printf(\"\\e[31m*\\e[0m \\e[34m开蜂鸣器: onb

song\\e[0m\\e[31m

*\\e[0m\\n\"); printf(\"\\e[31m*\\e[0m \\e[35m获取温度: get

\\e[31m *\\e[0m\\n\",temp); printf(\"\\e[31m*\\e[0m \\e[36m退

出: \\e[0m\\e[31m

*\\e[0m\\n\"); printf(\"\\e[31m*

*\\e[0m\\n\"); printf(\"\\e[31m******************未

来**********************\\e[0m\\n\"); }

发送命令给服务器:

/*5.调用I/O函数(read/write)与客户端通讯。*/ int i = 5; int pos; while(1) {

ret = poll(pfd,2,-1);

if(ret > 0){

if(pfd[0].revents == POLLIN){

interface_print(temp);

/*从终端读取数据*/

memset(buf,0,sizeof(buf));

ret = read(pfd[0].fd,buf,sizeof(buf)-1); 7

州学院

|

点亮LED2:

|

关闭LED2:

|

播放音乐:

|

温度:[%s]\\e[0m quit

|

} if(ret > 0){

}

/*发送数据给服务器*/ write(sockfd,buf,ret);

接受服务器传输的数据:

if(pfd[1].revents == POLLIN){

if(!strncmp(buf,\"get\",3)){

/*接收服务器发送的信息*/

memset(temp,0,sizeof(temp));

ret = read(pfd[1].fd,temp,sizeof(temp)-1);

if(ret > 0){

temp[ret-1] = \'\\0\';

/*把信息显示到终端*/

interface_print(temp);

}

} } 4.3 服务器模块

接收客户端发送的命令:

/*读取客户端信息*/

memset(buf,0,sizeof(buf));

ret = read(newfd,buf,sizeof(buf)-1);

if(ret > 0){

把命令转发给硬件:

/*发送命令给硬件*/

if(!strncasecmp(buf,\"on1\",3)){

cmd = LED_ON;

val = 3;

}else if(!strncasecmp(buf,\"on2\",3)){

cmd = LED_ON;

val = 4;

}else if(!strncasecmp(buf,\"off1\",4)){

cmd = LED_OFF;

val = 3;

}else if(!strncasecmp(buf,\"off2\",4)){

cmd = LED_OFF;

8

}

val = 4;

}else if(!strncasecmp(buf,\"onb\",3)){

pwm_on();

}else if(!strncasecmp(buf,\"song\",4)){

pwm_music_fun();

}

if(ioctl(fd_led,cmd,(unsigned long)val)

perror(\"ioctl failed\\n\");

exit(1);

} } } return (void *)0;

获取硬件处理所得的数据:

void *do_temp(void *arg) { int newfd = *(int *)arg; char buf[100]; int dev_fd; unsigned int temp[2]; float tempvalue=0; unsigned pos;

dev_fd = open(\"/dev/fs210_gpio\",O_RDWR | O_NONBLOCK); if (dev_fd

perror(\"open\");

exit(1); }

while(1) {

temp[1]= ioctl(dev_fd,GPIO_ON,temp);

/*

temp[1]&=0xffff;

tempvalue=(float)(temp[1])*0.0625;

*/

if(temp[1]&0x8000)

{

temp[1]= ~temp[1]+1;

temp[1]&=0xffff;

tempvalue=(float)(temp[1])*0.0625;

9

} } else {

temp[1]&=0xffff;

tempvalue=(float)(temp[1])*0.0625; } memset(buf,0,sizeof(buf)); sprintf(buf,\"%f\",tempvalue); strcat(buf,\"\\n\"); write(newfd,buf,strlen(buf)); memset(buf,0,sizeof(buf)); sleep(1); } return (void *)0; 4.4 LED点亮模块

/*参考内核,采用静态的方式实现点灯和灭灯*/ void led_on(unsigned long val) { printk(\" %ld %s\\n\",val,__func__); gpio_set_value(S5PV210_GPC0(val),1); }

void led_off(unsigned long val) { printk(\" %ld %s\\n\",val,__func__); gpio_set_value(S5PV210_GPC0(val),0); }

long test_ioctl(struct file *file, unsigned int cmd, unsigned long data) { unsigned long val = data; switch(cmd){

case LED_ON:

led_on(val);

break;

case LED_OFF:

led_off(val);

break;

default:

break;

10

}

} return 0; /*向系统注册申请设备号*/ ret = register_chrdev(LED_MAJOR,LED_NAME,&led_fops); if(ret){ printk(\"register chrdev failed!\\n\"); errno = -EBUSY;

goto err1; }

/*创建一个设备类*/ led_dev->led_cla = cla_create(THIS_MODULE, LED_MODULE); if(IS_ERR(led_dev->led_cla)){ printk(\"cla create failed\\n\"); errno = PTR_ERR(led_dev->led_cla); goto err2; } /*创建一个设备文件,之后系统会自动在/dev目录下自动创建一个设备文件*/ led_dev->led_device = device_create(led_dev->led_cla,NULL,MKDEV(LED_MAJOR,0),NULL,\"led\"); if(IS_ERR(led_dev->led_device)){

printk(\"cla create failed\\n\");

errno = PTR_ERR(led_dev->led_device);

goto err3; } led_init();

return 0;

4.5 温度感应模块

static void WriteOneChar(unsigned char dat) { unsigned char i=0;

writel((readl(gph1con) & 0xFFFFFFF0) | 0x1, gph1con);//gph1_0,output spin_lock(&lock); for(i=0;i

writel(readl(gph1dat) &(0xFFFFFFFE), gph1dat);

__udelay(15);

11

if(dat&0x01){

writel(readl(gph1dat) | 0x1 , gph1dat);

}

else{

writel(readl(gph1dat) &(0xFFFFFFFE), gph1dat);

}

__udelay(45);

writel(readl(gph1dat) | 0x1 , gph1dat);

__udelay(1);

dat>>=1; } spin_unlock(&lock); }

static unsigned int ReadTemp(void) { unsigned char T_h=0; unsigned char T_l=0; unsigned int temp=0;

writel((readl(gph1pud) & 0xFFFc) | 0x02, gph1pud);//gph1_0,pull-up enabled

spin_lock(&lock); Init_DS18B2O(); spin_unlock(&lock); __udelay(400); writel((readl(gph1con) & 0xFFFFFFF0) | 0x1, gph1con);//gph1_0,output writel(readl(gph1dat) | 0x1 , gph1dat); WriteOneChar(0xcc); WriteOneChar(0x44); mdelay(100); spin_lock(&lock); Init_DS18B2O(); spin_unlock(&lock); __udelay(400); writel((readl(gph1con) & 0xFFFFFFF0) | 0x1, gph1con);//gph1_0,output writel(readl(gph1dat) | 0x1 , gph1dat); WriteOneChar(0xcc); WriteOneChar(0xBE); T_l=ReadOneChar();//L T_h=ReadOneChar();//H

temp=(unsigned int) (((unsigned int)T_h

12

printk(\"temp=%x\\r\\n\",temp);

return temp; }

第五章5.1 各模块运行的效果

客户端:

测试结果分析13

图2 客户端运行效果

服务器:

图3 服务器运行效果

开发板:

14

图4 开发板的显示效果

5.2 可扩展功能

本项目的只是完成其中的一些功能,其可扩展性强,对进行加强完善,还可作如下扩展:

1.拓展成温度报警器,设定一个上限值和下下限值,当温度达到某个值时,如低于20摄氏度时,LED灯亮,高于40摄氏度时,蜂鸣器发出报警提示音。

2.可使开发板的核心板链接生活中的物件,如台灯,或者房间的灯,从而控制生活中物件的开关。

3.找到家庭电器中的接口,连接相应接口可实现远程控制家电。

第六章 总结与展望

通过这次的课程设计,让我受益匪浅,让我对智能硬件有了更深一层的了解,也体会了智能化在现实生活中的重要性,也让我了解和掌握了一些编程思想。让

15

我把理论知识用在实践中,实现了理论和实践相结合,从中更懂得理论的是实践的基础,实践有能检验理论的正确性,更激发了我对专业知识的渴求,这些对我以后参加工作或者继续学习都会有很大的帮助和影响。通过这次课程设计,让我意识到了自己的一些不足,从而让我认识到了学习的重要性。

虽然这次实训是那么短暂的1周时间,但是这几天我所学到的还是很多的,通过此次培训学生运用本专业所学的理论知识和专业知识来分析解决实际问题的重要教学环节,是对三年所学知识的复习和巩固。同时通过这次培训让我明白了一个很深刻的道理,让我意识到了团队合作的重要性,一个人不能完成的事情,团队能完成。团队精神有利于提高组织整体效能,只有通过发扬团队精神,才能取得更好的成绩。

因时间及精力有限,系统做的还不是很完善,还是有不足的地方,如果时间充足的话,还可以做得更完善,对其进行功能扩展。

以上这些收获对我来说是非常有帮助的,让我受益匪浅,它也是我人生中一笔宝贵的财富。

参考文献

[1] 李勇, 艾竹君, 刘巧云等.一种新型温度测量系统的设计[J].低温与超导, 2007, 35(5):451-454 [2] 马净, 李晓光,宁伟.几种常用温度传感器的原理及发展[J].中国仪器仪表, 2004, (6):1

16

[3] 曹忠明, 程姚根.从实践中学嵌入式Linux操作系统[M] .北京:电子工业出版社, 2014:8-9 [4] 陈刚 , 冯利美 .从实践中学嵌入式Linux应用程序开发[M].北京:电子工业出版社, 2012:193-192

嵌入式课程设计之触摸屏程序设计

嵌入式课程设计心得体会

嵌入式课程设计报告

嵌入式系统课程设计

VB程序设计课程设计

《嵌入式系统》课程设计题目

《嵌入式系统》课程设计题目

嵌入式系统课程设计教学大纲

可视化程序设计课程设计指导书

WEB程序设计课程设计指导书

嵌入式程序设计课程设计
《嵌入式程序设计课程设计.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档