1 / 22
文档名称:

嵌入式实训-LED显示+文件系统定制实验报告.pdf

格式:pdf   大小:2,012KB   页数:22页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

嵌入式实训-LED显示+文件系统定制实验报告.pdf

上传人:1781111**** 2024/5/11 文件大小:1.96 MB

下载得到文件列表

嵌入式实训-LED显示+文件系统定制实验报告.pdf

相关文档

文档介绍

文档介绍:该【嵌入式实训-LED显示+文件系统定制实验报告 】是由【1781111****】上传分享,文档一共【22】页,该文档可以免费在线阅读,需要了解更多关于【嵌入式实训-LED显示+文件系统定制实验报告 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..word格式-可编辑-感谢下载支持LED显示控制+文件系统定制系名:专业:指导教师:姓名:学号:班级:组员:科目:二○一年月:..word格式-可编辑-感谢下载支持目录一、设计任务和技术要求:.....................................................................................................................二、器件介绍……………………………………………………………………………………………三、设计代码:………………………………………………………………………………………….四、设计结果:.......................................................................................................................................五、系统评价:.......................................................................................................................................六、心得体会:.......................................................................................................................................一、设计任务和技术要求:?编写LED驱动程序,驱动程序采用手动定义设备名称(自己姓名拼音:..word格式-可编辑-感谢下载支持_led)和主设备号,设备号必须是系统尚未使用的设备号?编写对应驱动的makefile文件?将驱动程序编译成模块,并实现模块的加载及卸载?编写驱动测试程序,要求运行该测试程序后,能够对led设备打开成功与否做出判断;能够显示led控制菜单选项(至少2个控制选项),例如,选择“1”,led等循环点亮;选择“2”,指定led1灯点亮?编写对应测试程序的makefile文件文件系统定制要求:?制作文件系统类型为yaffs的文件系统;?文件系统启动时显示小组成员信息;?文件系统启动时需要按提示输入用户名信息;?文件系统成功挂载后,通过串口传送刚刚编写的led控制程序,并运行该led控制程序,要求能够按照规定的控制方式实现led灯的控制二、设计代码::#include<>#include<>:..word格式-可编辑-感谢下载支持#include<>#include<sys/>#defineIOCTL_LED_ON1#defineIOCTL_LED_OFF5#defineIOCTL_LED_RUN3voidusage(char*exename){}intmain(intargc,char**argv){unsignedintled_no;intfd=-1;unsignedintcount=10;if(argc>3||argc==1)gotoerr;//打开设备if(fd<0){return-1;}if(argc==2){{ioctl(fd,IOCTL_LED_RUN,count);//运行跑马灯}else{gotoerr;}}if(argc==3){led_no=strtoul(argv[1],NULL,0)-1;//操作哪个LED?if(led_no>3)gotoerr;ioctl(fd,IOCTL_LED_ON,led_no);//点亮ioctl(fd,IOCTL_LED_OFF,led_no);//熄灭}else{:..word格式-可编辑-感谢下载支持gotoerr;}}close(fd);return0;err:按键驱动:/**linux/drivers/char/**Thisprogramisfreesoftware;youcanredistributeitand/ormodify*itunderthetermsoftheGNUGeneralPublicLicenseversion2as*publishedbytheFreeSoftwareFoundation.*/#include<linux/>#include<linux/>#include<linux/>#include<linux/>#include<linux/>#include<linux/>#include<linux/>#include<asm/>#include<asm/>#include<linux/>#include<asm/>#include<mach/>#include<linux/>#include<linux/>#include<linux/>#include<mach/>:..word格式-可编辑-感谢下载支持#include<mach/>#include<mach/regs->#include<mach/regs->structbutton_desc{intgpio;intnumber;char*name;structtimer_listtimer;};staticstructbutton_descbuttons[]={};staticvolatilecharkey_values[]={'0','0','0','0','0','0','0','0'};staticDECLARE_WAIT_QUEUE_HEAD(button_waitq);staticvolatileintev_press=0;staticvoidmini210_buttons_timer(unsignedlong_data){structbutton_desc*bdata=(structbutton_desc*)_data;intdown;intnumber;:..word格式-可编辑-感谢下载支持unsignedtmp;tmp=gpio_get_value(bdata->gpio);/*activelow*/down=!tmp;number=bdata->number;if(down!=(key_values[number]&1)){key_values[number]='0'+down;ev_press=1;wake_up_interruptible(&button_waitq);}}staticirqreturn_tbutton_interrupt(intirq,void*dev_id){structbutton_desc*bdata=(structbutton_desc*)dev_id;mod_timer(&bdata->timer,jiffies+msecs_to_jiffies(40));returnIRQ_HANDLED;}staticintmini210_buttons_open(structinode*inode,structfile*file){intirq;inti;interr=0;for(i=0;i<ARRAY_SIZE(buttons);i++){if(!buttons[i].gpio)continue;setup_timer(&buttons[i].timer,mini210_buttons_timer,:..word格式-可编辑-感谢下载支持(unsignedlong)&buttons[i]);irq=gpio_to_irq(buttons[i].gpio);err=request_irq(irq,button_interrupt,IRQ_TYPE_EDGE_BOTH,buttons[i].name,(void*)&buttons[i]);if(err)break;}if(err){i--;for(;i>=0;i--){if(!buttons[i].gpio)continue;irq=gpio_to_irq(buttons[i].gpio);disable_irq(irq);free_irq(irq,(void*)&buttons[i]);del_timer_sync(&buttons[i].timer);}return-EBUSY;}ev_press=1;return0;}staticintmini210_buttons_close(structinode*inode,structfile*file){intirq,i;for(i=0;i<ARRAY_SIZE(buttons);i++){if(!buttons[i].gpio)continue;:..word格式-可编辑-感谢下载支持irq=gpio_to_irq(buttons[i].gpio);free_irq(irq,(void*)&buttons[i]);del_timer_sync(&buttons[i].timer);}return0;}staticintmini210_buttons_read(structfile*filp,char__user*buff,size_tcount,loff_t*offp){unsignedlongerr;if(!ev_press){if(filp->f_flags&O_NONBLOCK)return-EAGAIN;elsewait_event_interruptible(button_waitq,ev_press);}ev_press=0;err=copy_to_user((void*)buff,(constvoid*)(&key_values),min(sizeof(key_values),count));returnerr?-EFAULT:min(sizeof(key_values),count);}staticunsignedintmini210_buttons_poll(structfile*file,structpoll_table_struct*wait){unsignedintmask=0;poll_wait(file,&button_waitq,wait);if(ev_press)mask|=POLLIN|POLLRDNORM;:..-可编辑-感谢下载支持returnmask;}staticstructfile_operationsdev_fops={.owner=THIS_MODULE,.open=mini210_buttons_open,.release=mini210_buttons_close,.read=mini210_buttons_read,.poll=mini210_buttons_poll,};staticstructmiscdevicemisc={.minor=MISC_DYNAMIC_MINOR,.name=DEVICE_NAME,.fops=&dev_fops,};staticint__initbutton_dev_init(void){intret;ret=misc_register(&misc);returnret;}staticvoid__exitbutton_dev_exit(void){misc_deregister(&misc);}module_init(button_dev_init);module_exit(button_dev_exit);:..-可编辑-感谢下载支持:..-可编辑-(基于实验11的代码进行更改):#include<linux/>#include<linux/>#include<linux/>#include<linux/>#include<linux/>#include<linux/>#include<linux/>#include<linux/>#include<linux/>#include<linux/>#include<mach/>#include<mach/regs->#include<plat/gpio->#defineLED_MAJOR222:..-可编辑-感谢下载支持#defineIOCTL_LED_ON1#defineIOCTL_LED_OFF5#defineIOCTL_LED_RUN3%定义三个宏#defineLED_NUMARRAY_SIZE(led_gpios)staticintled_gpios[]={S5PV210_GPJ2(0),S5PV210_GPJ2(1),S5PV210_GPJ2(2),S5PV210_GPJ2(3),};staticlongmini210_leds_ioctl(structfile*filp,unsignedintcmd,unsignedlongarg){inti;intj;:..-可编辑-感谢下载支持switch(cmd){caseIOCTL_LED_RUN:%定义RUN,用了两个for循环。for(i=0;i<arg;i++){for(j=0;j<4;j++){gpio_set_value(led_gpios[j],0);msleep(100);gpio_set_value(led_gpios[j],1);}}break;caseIOCTL_LED_ON:if(arg>LED_NUM){return-EINVAL;:..-可编辑-感谢下载支持}gpio_set_value(led_gpios[arg],0);break;caseIOCTL_LED_OFF:if(arg>LED_NUM){return-EINVAL;}gpio_set_value(led_gpios[arg],1);break;default:return-EINVAL;}return0;}staticstructfile_operationsmini210_led_dev_fops={.owner=THIS_MODULE,:..word格式-可编辑-=mini210_leds_ioctl,};staticint__initmini210_led_dev_init(void){intret;inti;for(i=0;i<LED_NUM;i++){if(ret){returnret;}s3c_gpio_cfgpin(led_gpios[i],S3C_GPIO_OUTPUT);:..word格式-可编辑-感谢下载支持gpio_set_value(led_gpios[i],1);}ret=register_chrdev(LED_MAJOR,DEVICE_NAME,&mini210_led_dev_fops);if(ret<0){returnret;}return0;}staticvoid__exitmini210_led_dev_exit(void){inti;for(i=0;i<LED_NUM;i++){gpio_free(led_gpios[i]);}unregister_chrdev(LED_MAJOR,DEVICE_NAME);:..word格式-可编辑-感谢下载支持}module_init(mini210_led_dev_init);module_exit(mini210_led_dev_exit);:Makefile:..word格式-可编辑-感谢下载支持1命令代码:..word格式-可编辑-感谢下载支持第一盏灯亮第二盏灯亮:..word格式-可编辑-感谢下载支持第三盏灯亮显示小组成员信息(文件系统)用户名122014021登陆:..word格式-可编辑-:在了解了基础知识之后,我开始进行上机操作,当然,其中遇到很多的难题,很多东西都是第一次接触,又没有别人在旁边指导操作,完全凭借自己去摸索练****其中的困难可想而知。然而坚持就是胜利,牙一咬眼一闭坚持做下去,而通过本次实验,我感觉收获还是蛮多的。可能我对于嵌入式的知识学****的还是不太多,但是这之外的东西收获颇丰。它让我学会了如何通过自己的努力去认知一个新事物,更重要的是端正自己的学****态度,只有真正下功夫去学****才能有收获,正所谓“一份耕耘,一份收获。”没有付出,何谈回报呢?再者,通过本次实验,我也学会了如何去分析问题,如何找出自己设计中的不足,继而去排除解决问题,这就是一个自我学****的过程。当我们通过实验去学****理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们对此的记忆。学****到一个实验的完成过程。更深刻地了解arm的工作原理及其应用,对比出之前单片机系统应用的不同。