嵌入式硬件综合设计课程设计报告

上传人:第*** 文档编号:55663248 上传时间:2018-10-03 格式:DOC 页数:27 大小:5.52MB
返回 下载 相关 举报
嵌入式硬件综合设计课程设计报告_第1页
第1页 / 共27页
嵌入式硬件综合设计课程设计报告_第2页
第2页 / 共27页
嵌入式硬件综合设计课程设计报告_第3页
第3页 / 共27页
嵌入式硬件综合设计课程设计报告_第4页
第4页 / 共27页
嵌入式硬件综合设计课程设计报告_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《嵌入式硬件综合设计课程设计报告》由会员分享,可在线阅读,更多相关《嵌入式硬件综合设计课程设计报告(27页珍藏版)》请在金锄头文库上搜索。

1、教学实习报告教学实习报告实习单位: 信息安全工程学院 实习时间: 2016 年 3 月 6 日 至 2016 年 5 月 19 日学 院: 信息安全工程学院 专 业: 物联网工程 学生姓名: 赵玉平 学号: 2013124068 2016 年 5 月 19 日成都信息工程大学成都信息工程大学 教务处制教务处制一、实习目的(要求言简意赅,点明主题)本次的实习目的是为了让我们熟悉嵌入式驱动的开发流程,并编写了 LED 驱动,按键驱动。二、实习单位及岗位介绍(要求详略得当、重点突出,着重介绍实习岗位)实习单位:信息安全工程学院实习岗位:嵌入式软件开发工程师三、实习内容及过程(要求内容详实、层次清楚;

2、侧重实际动手能力和技能的培养、锻炼和提高)编写了嵌入式 LED 驱动,嵌入式按键驱动。四、实习总结及体会(要求条理清楚、逻辑性强;着重写出对实习内容的总结、体会和感受,特别是自己所学的专业理论与实践的差距和今后应努力的方向)这次实习中,熟悉了 linux 字符驱动的基本框架,和嵌入式驱动的开发流程,并把所学的专业理论与实践相结合,完成了目标。在编写驱动的过程中,有很多东西都是自己没学过的,上网查了才了解,以前只是知道理论,并没有动手实践,实践了才知道,理论和实践存在一定的差距。在以后的学习中,一定要多动手,不能光看书和听课,要实践和理论相结合,才能有更高的学习效率。物物 联联 网网 硬硬 件件

3、 设设 计计 与与 开开 发发 综综 合合 实实 践践 课课 程程 设设 计计题目:基于嵌入式题目:基于嵌入式 Linux 平台的按键驱动平台的按键驱动 程序设计与实现程序设计与实现作者姓名:作者姓名:赵玉平赵玉平班班 级:级:物联网工程物联网工程 132132 班班学学 号:号:20131240682013124068指指导导教教师师:石磊石磊日日 期:期:20162016 年年 5 5 月月 1919 日日指导老师评阅成绩表指导老师评阅成绩表项目方案(10%)设计质量(35%)合作情况(5%)答辩(20%)设计报告(30%)总分课程答辩记录课程答辩记录教师主要提问记录1.编译驱动与编译应用

4、程序有什么区别。2.wake_up_interruptible(s3c2410_gpio_setpin(led_tablearg,!cmd);return 0;default:return -EINVAL;设备结构体,当应用程序调用相应的系统调用后,就会调用驱动里对应的函数。static struct file_operations s3c2440_leds_fops=.owner=THIS_MODULE,.ioctl=s3c2440_leds_ioctl,;3.23.2 按键驱动按键驱动按键驱动框架如图 3-2。图 3-2在这里,按键采用中断的方式,不占用处理器的资源。第 12 页驱动代码:

5、OPEN 函数,在这个函数里实现了 IO 口的配置,中断的申请,中断的注册,初始化按键的初始状态,初始化了三个按键消抖定时器。static int keys_open(struct inode *inode,struct file *file)int i;int ret;for(i=0;i=0;i-)disable_irq(key_irqi.irq);free_irq(key_irqi.irq,(void*)i);return -EBUSY;第 13 页return 0;读取函数,返回三个按键的状态。static int keys_read(struct file *file,char _us

6、er *buf,size_t count,loff_t *offp)unsigned long ret;if(!rd_flag)if(file-f_flagselsewait_event_interruptible(key_waitq,rd_flag);rd_flag=0;ret=copy_to_user(buf,(void *)key_status,min(sizeof(key_status),count);return ret ? -EFAULT:min(sizeof(key_status),count);驱动中的轮询。这个与应用程序的 select 使用相对应。static unsign

7、ed int keys_poll(struct file *file,struct poll_table_struct *wait)unsigned int mask=0;poll_wait(file,if(rd_flag)mask|=POLLIN|POLLRDNORM;第 14 页return mask;关闭函数,在应用程序调用 close()关闭文件时调用。static int keys_close(struct inode *inode,struct file *file)int i;for(i=0;iKEY_COUNT;i+)del_timer(disable_irq(key_irqi

8、.irq);free_irq(key_irqi.irq,(void *)i);return 0;设备操作结构体的定义,由于按键是输入设备,所以没有 write,因为程序中要实时监测哪个键按下,所以这里用 poll 来在内核中遍历,来提供给应用程序的select 判断资源是否可读取。static struct file_operations keys_fops=.owner=THIS_MODULE,.open=keys_open,.release=keys_close,.read=keys_read,.poll=keys_poll,;按键中断处理函数。用 request_irq()将相应的中断和

9、中断处理函数关联起来,当有按键按下进入这个函数,然后启动一个消抖定时器。static irqreturn_t keys_interrupt(int irq,void *dev_id)int key=(int)dev_id;第 15 页if(key_statuskey=KEY_UP)key_statuskey=KEY_UNCERTAIN;key_timerskey.expires=jiffies+KEY_TIMER_DELAY1;add_timer(return IRQ_RETVAL(IRQ_HANDLED);定时器中断处理函数。消抖之后进入这里,再读取按键的状态,如果按下,就把可读标志置 1。

10、static void keys_timer(unsigned long arg)int key=arg;int up=s3c2410_gpio_getpin(key_irqkey.pin);if(!up)if(key_statuskey=KEY_UNCERTAIN)key_statuskey=KEY_DOWN;rd_flag=1;wake_up_interruptible(key_timerskey.expires=jiffies+KEY_TIMER_DELAY2;add_timer(elsekey_statuskey=KEY_UP;第 16 页3.33.3 应用程序应用程序编写用户程序过程

11、中,通过 open 函数打开设备,通过调用相应的函数控制设备。程序流程如图 3-3图 3-3应用程序与驱动调用关系如图 3-4。第 17 页图 3-4程序代码:跑马灯线程函数void *ledpth(void *arg)int *p=(int *)arg;int fd=*p;while(1)ledshow(fd);第 18 页主函数,创建两个线程。分别是 LED 线程是 16 进制定时器线程。int main()err=pthread_create(err=pthread_create(while(1)ret=select(keyfd+1,if(FD_ISSET(keyfd,if(ret!=s

12、izeof(key_status)printf(“read failn”);elseif(key_statusKEY1=0)ledflag=1;if(key_statusKEY2=0)timeflag=1;if(key_statusKEY3=0)if(ledflag=1)ledflag=0;if(timeflag=1)timeflag=0;第 19 页4 4 测试与问题测试与问题加载驱动图 4-1图 4-2建立设备文件节点先 cat /proc/devices 驱动的主设备号图 4-3然后在/dev 目录下建立节点图 4-4按下 S2,跑马灯开启图 4-5第 20 页图 4-6按下 S3,输出

13、 2s 定时信息图 4-7按下 S4,定时输出暂停,跑马灯暂停,并且灯的状态就是暂停的那个状态图 4-8第 21 页图 4-9再按下 S2,跑马灯启动图 4-10再按下 S3,输出 2s 定时信息图 4-11第 22 页结结 论论本设计经过一个多月的努力,基本实现了题目的要求。实现了按键控制跑马灯开启与暂停,并且暂停跑马灯是暂停的那个状态。按键暂停定时 2s 等功能。在编写驱动期间,学习到很多课堂上没有的知识,还积累了很多实践经验,增强了动手能力和解决实际问题的能力。在此之前,对于驱动和其他的编程知识只是略知皮毛,都没有编过驱动程序,对驱动也没有深入了解。在短短两个月时间里,认真的学习了 li

14、nux 下字符驱动的编写,还有在驱动中申请中断,以及内核空间向用户空间传递数据等相关的编程知识,初步认识到驱动程序对于应用程序的重要性,对编程思想有了进一步的体会,养成了良好的编程习惯。课程设计虽然完成,但是距离优秀还有一定差距,编写驱动还需要继续学习。希望自己不断学习和实践,争取以后做的更好。限于作者知识水平和经验有限,此系统还有许多有待完善和改正的地方,恳请各位老师和读者批评指正。参考文献参考文献1 ARM9 嵌入式系统设计与应用,李新荣,清华大学出版社,2011 年;2 嵌入式系统原理与设计,陈文智,清华大学出版社,2012 年;3 基于 ARM 的嵌入式系统设计实验与实践教程,武俊鹏,清华大学出版社,2011 年;4 嵌入式 Linux 实时操作系统及应用编程,熊茂华等,清华大学出版社 2011 年;5 ARM 嵌入式 Linux 系统开发详解,弓雷,清华大学出版社,2009 年;6 Linux 驱动开发入门与实战,郑强, 清华大学出版社,2010 年;7 linux 设备驱动开发详解(第 2 版),宋宝华,人民邮电出版社,2010年;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号