嵌入式系统实验实验报告
嵌入式系统实验报告

嵌入式系统实验报告在本学期的嵌入式系统课程中,我与我的实验伙伴进行了多次实验。
在这篇报告中,我将分享我们实验的过程和结果。
实验一:GPIO控制LED灯在这个实验中,我们使用了Raspberry Pi 3B+开发板和一根杜邦线。
我们在电路板上将一盏LED灯与GPIO引脚连接起来,并编写了一个程序来控制这个引脚的电平状态。
在这个实验中,我们学习了GPIO的基本概念以及如何使用Python编程语言编写GPIO控制程序。
我们成功地让LED灯在不同的时间间隔内闪烁,并且了解了如何使用GPIO.setup()和GPIO.output()函数来控制GPIO引脚的输入和输出。
实验二:串口通信在第二个实验中,我们使用了两个Raspberry Pi 3B+开发板和两根串口线。
我们连接了两个板子的GPIO引脚,使得它们可以通过串口进行通信。
我们使用Python编写了两个程序来进行通信。
一个程序将发送一条消息,另一个程序将接收这个消息并将其打印出来。
通过使用串口通信,我们学会了如何使用Python编写程序来完成数据交换,并掌握了串口通信的基本概念。
实验三:Pi camera模块在第三个实验中,我们使用了Pi camera模块和一个Raspberry Pi 3B+开发板。
我们将摄像头连接到开发板上,并编写了一个程序来捕捉摄像头图像。
我们学习了如何使用Python编程语言来控制Pi camera模块,包括如何设置摄像头参数并如何捕捉静态图像。
我们还尝试了使用OpenCV库来处理图像。
实验四:蓝牙控制在最后一个实验中,我们使用了一个蓝牙透传模块、Raspberry Pi 3B+开发板和一些电路元件。
我们将蓝牙透传模块连接到GPIO引脚,并编写了一个程序来通过蓝牙信号控制电机。
在这个实验中,我们学习了如何使用蓝牙模块进行无线控制。
我们通过使用Python编写控制程序,成功地将蓝牙信号转换成GPIO引脚的电平信号来控制电机。
总结在这个嵌入式系统的实验中,我们学习了许多关于嵌入式系统的知识和技能。
精选嵌入式系统实习报告3篇

精选嵌入式系统实习报告3篇嵌入式系统实习报告篇1ARM嵌入式系统综合设计一.实习时间和地点安排1.实习时间:20xx年XX月03 日—— 20xx年XX月14日,共两周的时间。
2.每天的实习时间安排:上午:8:30——11:30下午:13:30——15:303.实习地点:校内。
二.实习目的1.掌握电子元器件的焊接原理和方法。
2.掌握ARM7 LPC2132控制程序的编写方法。
3.掌握调试软件和硬件的方法。
三.实习内容与要求1.根据设计要求焊接好电路板并测试焊接无误。
2.绘制流程图并编写程序。
3.编译通过后,将程序下载到LPC2132进行调试。
4.调试成功后编写实习报告。
四.LPC2132芯片介绍LPC2132最小系统图及其介绍概述LPC2132是基于一个支持实时仿真和嵌入式跟踪的32/16 位 ARM7TDMI-STM CPU 的微控制器,并带有 32kB、64kB、512 kB 的嵌入的高速Flash 存储器。
128 位宽度的存储器接口和独特的加速结构使 32 位代码能在最大时钟速率下运行。
对代码规模有严格控制的应用可使用 16 位 Thumb?模式将代码规模降低超过 30%,而性能的损失却很小。
较小的封装和极低的功耗使 LPC2131/2132/2138 可理想地用于小型系统中,如访问控制和 POS 机。
宽范围的串行通信接口和片内 8/16/32kB 的 SRAM 使LPC2131/2132/2138 非常适用于通信网关、协议转换器、软 modem 、声音辨别和低端成像,为它们提供巨大的缓冲区空间和强大的处理功能。
多个 32 位定时器、1 个或 2 个 10 位 8 路 ADC 、10 位 DAC 、PWM 通道和 47 个 GPIO 以及多达9 个边沿或电平触发的外部中断使它们特别适用于工业控制和医疗系统。
特性1.小型 LQFP64 封装的 16/32 位 ARM7TDMI-S 微控制器。
嵌入式实验四实验报告

嵌入式实验四实验报告实验四:嵌入式编程设计
实验设计目的:
1. 学习使用嵌入式开发工具进行编程设计;
2. 学习使用C语言编写嵌入式程序;
3. 学习使用GPIO模块进行输入输出;
4. 学习使用中断处理函数。
实验器材:
1. 嵌入式开发板;
2. USB数据线;
3. 电脑;
4. LED灯;
5. 电阻;
6. 蜂鸣器;
7. 其他必要的电路元件。
实验步骤:
1. 连接开发板和计算机,安装开发板驱动程序;
2. 打开嵌入式开发工具,创建一个新的工程;
3. 在工程中添加一个C文件,编写程序;
4. 编写程序实现以下功能:
- 使用GPIO模块控制LED灯的亮、灭;
- 使用GPIO模块读取按键状态;
- 使用GPIO模块控制蜂鸣器的开、关;
- 使用Timer模块计时;
- 使用中断处理函数处理外部中断;
- 其他必要的功能;
5. 编译程序,下载到开发板;
6. 运行程序,测试功能是否正常。
实验结果与分析:
实验结果应当是LED灯、蜂鸣器、按键正常工作,可以通过按键控制LED灯的亮、灭、蜂鸣器的开、关。
实验总结:
通过本次实验,我学会了使用嵌入式开发工具进行编程设计,掌握了使用C语言编写
嵌入式程序的方法。
通过实验,我深入理解了嵌入式系统的原理和实现方法,对嵌入
式系统的应用有了更加深入的了解。
在今后的学习和工作中,我将能够更好地运用嵌
入式技术解决实际问题。
嵌入式系统试验报告

嵌入式系统实验报告学院:计算机科学与工程姓名:___________学号:_______________专业:_______________指导老师:______________完成日期:______________实验一:流水灯案例、8位数码管动态扫描案例一、实验目的1.1 进一步熟悉Keil C51集成开发环境调试功能的使用;1.2 学会自己编写程序,进行编译和仿真测试;1.3 利用开发板下载hex 文件后验证功能。
二、实验原理2.1 :实验原理图030B 〜I ।卜RSI I ™Hi 」 口 UICDR Hr hJJK RR 18q U I. 海水灯电浒周LhE U_EEM^Li > > 第 X > k >n - » =白 L a £0EBS2.2:工作原理2.2.1:流水灯电路中有LO,1,L2,L3,4,L5,L6,L7共八个发光二极管,当引脚LED_ SEL输入为1,对于A、B、C、D、E、F、G、H引脚,只要输入为1,则点亮相连接的发光二极管。
A〜H引脚连接STM32F108VB芯片的PE8〜PE15,程序初始化时,对其进行初始设置。
引脚LED_SEL为1时,发光二极管才工作,否则右边的数码管工作。
注意,LED SEL 连接于PB3,该引脚具有复用功能,在默认状态下,该引脚的I0不可用,需对AFIO_ MAPR寄存器进行设置,设置其为10可用。
2.2.2: 8位数码管数码管中的A~G、DP段分别连接到电路图中的A~G、H线上,当某段上有一-定的电压差值时,便会点亮该段。
当£3输入为1,也就是LED_ 5£1输入为0时,根据SELO〜SEL2的值确定选中的数码管,即位选,再根据A~H引脚的高低电平,点亮对应段,即段选。
三、实验结果3.1:流水灯对于给出的流水灯案例,下载HEX文件后,在开发板上可观察到L0-L7从左至右依次点亮,间隔300ms。
嵌入式系统 实验报告

使能 IRQ 中断。
4 装载并使能外中断;
5 选用 DebugInExram 生成目标,然后编译连接工程。
6 选择【Project】->【Debug】,启动 AXD 进行 JTAG 仿真调试。
7 全速运行程序,LED 闪烁;
8 每一次按键 Key,蜂鸣器就会转换静音或鸣响状态。
四.测试数据及运行结果
1
五.总结
1.实验过程中遇到的问题及解决办法;
由于本次实验较简单,且我们之前学习的微机原理课程也进行了流水灯的设
计实验,所以对于本次实验,我完成地很顺利,在实验中没有遇到问题。
2.对设计及调试过程的心得体会。
本次实验是本学期该课程我们进行的第一次实验,总的来说,实验不是很难,
设计过程也相对简单,其主要目的是让我们熟悉一下实验环境,并且能在实验环
6
五.总结 1.实验过程中遇到的问题及解决办法;
实验第一次运行时,蜂鸣器一直处于鸣响状态,及时按了按键,蜂鸣器还是 一直鸣叫,不产生外中断。后来仔细检查了程序,发现原来是忘记使能 EINT0 中 断了,加上 VICIntEnable = 1<<0x0e 代码,程序就能正常运行了。 2. 对设计及调试过程的心得体会。
境下进行简单的实验操作,为之后的实验打下坚实的基础。
六.附录:源代码(电子版)
#include "config.h"
const uint32 LEDS8 = 0xFF << 18;//P1[25:18]控制 LED1~LED8,低电平点亮
const uint32 KEY = 1 << 16;
//P0.16 连接 KEY1
三.方案设计
① 启动 ADS1.2IDE 集成开发环境,选择 ARM Executable Image for lpc2131
《嵌入式系统》实验报告指导书(含答案).

实验一熟悉嵌入式LINUX开发环境1、实验目的熟悉UP-TECHPXA270-S的开发环境。
学会WINDOWS环境与嵌入式Linu环境共享资源的基本方法。
2、实验内容学习UP-TECHPXA270-S系统的使用、XP和虚拟机之间传送文件方法以及UP-TECHPXA270-S和虚拟机之间共享目录的建立方法。
3、预备知识了解UP-TECHPXA270-S的基本结构和配置,Linux基本知识。
4、实验设备硬件:UP-TECHPXA270-S开发板、PC机(内存500M以上)。
软件:PC机操作系统RADHAND LINUX 9+MIMICOM+RAM LINUX操作系统5、实验步骤(1)、在虚拟机下练习Linux常用命令。
(注意以下操作只能在[root@BC root]#,也就是root文件夹下运行,不然会导致系统不能启动)a. 学习命令通过“man ***”和“*** --help”得到的命令使用方法。
b.学习并掌握如下命令:ls,cd ,pwd,cat,more,less,mkdir, rmdir ,rm,mv,cp,tar,ifconfig(2)、XP与虚拟机之间传送文件(Samba服务器建立、网络设置、文件传送);(3)、了解系统资源和连线;(4)、开发板与虚拟机之间共享目录建立(设置NFS、开发板IP设置、目录挂载),挂载文件;(5)vi(vim)的使用(6)输入qt,启动桌面,按CTRL+C退出6、实验报告要求(1)、XP和虚拟机之间传送文件步骤;虚拟机共享XP文件:选择虚拟机设置,设置要共享的文件启动Linux进入/mnt/hgfs即可看到共享文件夹服务器设置——samba服务器(设置需要共享的目录)XP共享虚拟机文件:服务器设置——samba服务器(设置需要共享的目录)确保网络的PING通(即在同一局域网):1.虚拟机的192.168.1.234(RH9)2.XP的为192.168.1.1253.在XP 下点击开始-》运行(\\192.168.1.234)4.用户名bc密码123456以上实现了Linux虚拟机(RH9)和XP的文件的共享(2)、开发板与虚拟机之间建立共享目录以及文件挂载步骤;1.服务器设置——nfs服务器(设置需要共享的目录)2.设置开发板的ip地址:ifconfig eth0 192.168.1.53.在实验箱终端里输入mount -t nfs -o nolock 192.168.1.234:/up-techpxa270/exp /mnt/nfs4./mnt/nfs即为共享目录(3)、请画出虚拟机、PC机和ARM实验箱之间的硬件连接图;(4)、在Linux中怎样配置网络;系统设置->网络,在新的选项卡中(5)、实验中遇到的问题与解决过程。
嵌入式实训报告范文2篇2

嵌入式实训报告范文 (2)嵌入式实训报告范文 (2)精选2篇(一)嵌入式实训报告一、实训背景嵌入式系统是一种以具体任务为中心,集成了硬件与软件的计算机系统。
由于其体积小、功耗低、功能强大等特点,嵌入式系统被广泛应用于各个领域,如家电、汽车、医疗等。
通过参与嵌入式实训,我希望能够掌握嵌入式开发的基本原理和方法,提高自己的实践能力。
二、实训目标1.掌握嵌入式系统的基本知识和开发工具的使用;2.了解嵌入式系统的硬件架构和软件设计流程;3.能够根据需求设计并实现简单的嵌入式系统。
三、实训内容1.学习嵌入式系统基础知识:通过课堂教学和自主学习,了解了嵌入式系统的概念、特点及应用领域。
深入学习了ARM架构和C语言的基本知识,并进行了相应的实践操作。
2.学习嵌入式开发工具的使用:学习了Keil MDK和IAR Embedded Workbench等常用的嵌入式开发工具的安装和配置方法。
通过实操操作,掌握了调试、编译、下载等基本功能的使用。
3.学习嵌入式系统设计流程:了解了嵌入式软件开发的常用流程,包括需求分析、系统设计、编码实现、调试测试、系统验证等。
通过案例分析和实践操作,对嵌入式系统设计流程有了更深入的了解。
4.设计并实现简单的嵌入式系统:根据实训要求,我选择了一个简单的嵌入式系统项目,通过分析需求、设计系统架构、编写软件代码、调试测试等环节,最终成功完成了项目。
四、实训总结及收获通过参与嵌入式实训,我不仅掌握了嵌入式系统的基本知识和开发工具的使用,还锻炼了自己的实践能力。
我深刻认识到嵌入式系统开发需要全面的知识储备和较高的技术水平,同时也需要良好的分析、设计和沟通能力。
通过实训,我对嵌入式系统开发流程有了更深入的理解,对嵌入式系统的设计和开发也有了更高的认识和要求。
在未来的学习和工作中,我会继续深入学习嵌入式系统开发相关知识,并不断提高自己的实践能力。
嵌入式系统是未来的发展方向,通过不断探索和实践,我相信我能够在这个领域取得更好的成果。
嵌入式系统实验报告.doc

嵌入式系统实验报告..嵌入式系统设计实验报告班级:学号:姓名:成绩:指导教师:1. 实验一1.1 实验名称博创UP-学号:姓名:成绩:指导教师:1. 实验一1.1 实验名称博创UP:运行Windows 系统下的超级终端(HyperTerminal)应用程序,新建一个通信终端;在接下来的对话框中选择ARM开发平台实际连接的PC机串口;完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置保存为一个特定超级终端到桌面上,以备后用。
(2)JTAG 驱动程序的安装:执行armJtag目录下armJtagSetup.exe程序,选择安装目录,安装JTAG 软件。
1.6 实验过程与分析(1)了解嵌入式系统开发流程(2)对硬件的安装(3)对软件的安装1.7 实验结果总结通过本次实验对嵌入式系统开发流程进行了了解,并且对硬件环境和软件环境进行了安装配置,通过本次实验对以后的接口实验打了基础。
1.8 心得体会通过本次实验对嵌入式实验有了初步的了解,对基本开发流程也有了初步的了解。
2. 实验二2.1 实验名称ADS1.2软件开发环境使用方法2.2 实验目的熟悉ADS1.2开发环境,学会ARM仿真器的使用。
使用ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。
2.3 实验环境(1)ADS1.2开发环境(2)博创UP-在接下来的对话框中选择ARM开发平台实际连接的PC机串口;完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置保存为一个特定超级终端到桌面上,以备后用。
(2)JTAG 驱动程序的安装:执行armJtag目录下armJtagSetup.exe程序,选择安装目录,安装JTAG 软件。
1.6 实验过程与分析(1)了解嵌入式系统开发流程(2)对硬件的安装(3)对软件的安装1.7 实验结果总结通过本次实验对嵌入式系统开发流程进行了了解,并且对硬件环境和软件环境进行了安装配置,通过本次实验对以后的接口实验打了基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式系统实验实验报告一、实验目的1.基本实验.Word 资料搭建PXA270嵌入式LINUX开发软硬件环境;安装LINUX操作系统;安装与配置建立宿主机端交叉编译调试开发环境;配置宿主机 PC 机端的minicom(或超级终端)、TFTP服务、NFS服务,使宿主PC机与PXA270开发板可以通过串口通讯,并开通TFTP 和NFS服务。
2.人机接口键盘驱动;LCD控制;触摸屏数据采集与控制实验;3.应用实验完成VGA显示;Web服务器实验;网络文件传输实验;多线程应用实验。
4.扩展应用实验完成USB摄像头驱动与视频采集;GPS实验;GSM/GPRS通讯;视频播放移植;USB蓝牙设备无线通讯;NFS文件服务器;蓝牙视频文件服务器。
5.QT实验完成基本嵌入式图形开发环境搭建;“Hello world!”QT初探;创建一个窗口并添加按钮;对象通信:Signal和Slot;菜单和快捷键;工具条和状态栏;鼠标和键盘事件;对话框;QT的绘图;俄罗斯方块;基于QT的GSM手机在嵌入式LINUX下的设计与实现。
二、实验内容1.人机接口实验实验十九键盘驱动实验▪实验目的:矩阵键盘驱动的编写▪实验内容:矩阵键盘驱动的编写▪作业要求:完成键盘加减乘除运算▪实验作业源码及注释:#INCLUDE<STDIO.H>#INCLUDE<STRING.H>#INCLUDE<STDLIB.H>#INCLUDE<FCNTL.H>#INCLUDE<UNISTD.H>#INCLUDE<MATH.H>#DEFINE DEVICE_NAME “/DEV/KEYBOARD”INT MAIN(VOID){INT FD;INT RET;UNSIGNED CHAR BUF[1];INT I,F,J;DOUBLE X;INT A[2]={0};CHAR PRE_SCANCODE=0XFF;FD=OPEN(DEVICE_NAME,O_RDWR);IF(FD==-1)PRINTF(“OPEN DEVICE %S ERROR\N”,DEVICE_NAME);ELSE{BUF[0]=0XFF;I=0;F=0;WHILE(1){READ(FD,BUF,1);.Word 资料IF(BUF[0]!=PRE_SCANCODE) //判断是否放开按键IF(BUF[0]!=0XFF){ //判断是否键入PRE_SCANCODE=BUF[0];USLEEP(50000);SWITCH(BUF[0]){CASE 0X12:{ //按下ENTERSWITCH(F){ //判断运算符CASE1:{J=I;I=(I+1)%2;X=A[I]+A[J];PRINTF(“%D+%D=%D”, A[I],A[J],X);BREAK;}//加法CASE 2:{J=I;I=(I+1)%2;X=A[I]-A[J];PRINTF(“%D-%D=%D”,A[I],A[J],X);BREAK;}//减法CASE3:{J=I;I=(I+1)%2;X=A[I]*A[J];PRINTF(“%D*%D=%D”,A [I],A[J],X);BREAK;}//乘法CASE4:{J=I;I=(I+1)%2;X=A[I]/A[J];PRINTF(“%D/%D=%D”,A [I],A[J],X);BREAK;}//除法DEFAUIT:}F=0;BREAK;}CASE 0X13:{F=1;I=(I+1)%2;BREAK;} //键入运算符CASE 0X14:{F=2;I=(I+1)%2;BREAK;}CASE 0X15:{F=3;I=(I+1)%2;BREAK;}CASE 0X16:{F=4;I=(I+1)%2;BREAK;}DEFAULT:A[I]=BUF[0]; //存入数据}}}RET=CLOSE(FD);}RETURN 0;}▪实验结果:实验效果图实验二十LCD控制实验▪实验目的:了解LCD的基本原理▪实验内容:使用总线方式驱动LCD模块,体会与QT下LCD显示的差别.Word 资料▪作业要求:在目标板的LCD上显示彩色竖条纹或彩色圆环。
▪实验作业源码及注释:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <fcntl.h> // open() close()#include <unistd.h> // read() write()#define DEVICE_NAME "/dev/fb"#define VERSION "PXA2700EP-LCD-V1.00-060530" void showversion(void){printf("*********************************************\n"); printf("\t %s \t\n", VERSION);printf("*********************************************\n\n"); }int main(void){int fd;int ret;int i,j,r,R;unsigned short buf[640*480];showversion();printf("\nstart test_lcd test\n\n");fd = open(DEVICE_NAME, O_RDWR);printf("fd = %d\n",fd);if (fd == -1){printf("open device %serror\n",DEVICE_NAME);}else{for(i=0;i<640*480;i++){buf[i]=0x0001;}ret=write(fd,buf,sizeof(buf));usleep(500000);close(fd);fd = open(DEVICE_NAME, O_RDWR);//竖条纹算法:通过横坐标分布进行填色for(r=0;r<640*480;r++){i=r%640;if(i>=0&&i<60)buf[r]=0x0001;if(i>=60&&i<120)buf[r]=0xf800;if(i>=120&&i<180)buf[r]=0x07ef;if(i>=180&&i<240)buf[r]=0x001f;if(i>=240&&i<300)buf[r]=0xffe0;if(i>=300&&i<360)buf[r]=0x07ff;if(i>=360&&i<420)buf[r]=0xf81f;if(i>=420&&i<=480)buf[r]=0xffff;}/*.Word 资料//圆环算法:通过离圆心半径分布进行填色for(r=0;r<640*480;r++){i=r%640;j=r/640;R=(i-320)*(i-320)+(j-480)*(j-480);if(R>=0&&R<2500)buf[r]=0x0001;if(R>=2500&&R<10000)buf[r]=0xf800;if(R>=10000&&R<22500)buf[r]=0x07ef;if(R>=22500&&R<40000)buf[r]=0x001f;if(R>=40000&&R<62500)buf[r]=0xffe0;if(R>=62500&&R<90000)buf[r]=0x07ff;if(R>=90000&&R<122500)buf[r]=0xf81f;if(R>=122500&&R<=160000)buf[r]=0xffff;}*/ret=write(fd,buf,sizeof(buf));getchar();}return 0;}▪实验结果:实验效果图实验二十一触摸屏数据采集与控制▪实验目的:通过实验掌握触摸屏的设计与控制方法▪实验内容:编程实现触摸屏到LCD坐标的校准以及坐标采集和计算随着使用电脑作为信息来源的与日俱增,触摸屏以其易于使用、坚固耐用、反应速度快、节省空间等优点,使得系统设计师们越来越多的感到使用触摸屏的确具有相当大的优越性。
通过此试验,我们学习了触摸屏原理,并通过编写测试程序验证了触摸屏的工作过程。
学习它,掌握它是非常必要的。
2.应用程序实验实验二十二VGA显示实验▪实验目的:了解VGA接口的标准和特点▪实验内容:编程实现图像通过VGA接口在显示器上输出通过本实验的操作,VGA设备成功启动,在液晶屏和显示器上可以看到完全同步的画面。
由于两者格式和刷新频率的差别,实验中做了折中处理,可能显示效果没有达到最优。
实验二十三Web服务器实验▪实验目的:学习在PXA270开发板上的SOCKET网络编程▪实验内容:SOCKET进行通讯编程学习使用socket 进行通讯编程的过程,了解一个实际的网络通讯应用程序整体设计,阅读HTTP协议的相关内容,学习几个重要的网络函数的使用方法。
读懂HTTPD.C源代码。
在此基础上增加一些其他功能。
在宿主PC机上使用浏览器测试嵌入式WEB 服务器的功能。
通过此实验,我们实现了嵌入式Web服务器的基本功能。
.实验二十五多线程应用实验▪实验目的:学习PTHREAD 库函数的使用▪实验内容:熟悉PTREAD库函数的使用,掌握共享锁和信号量的使用方法。
▪作业要求:利用多线程技术实现键盘控制在LCD液晶屏上显示的可移动的图形。
▪实验作业源码及注释:#include <stdio.h>#include <stdlib.h>#include <time.h>#include "pthread.h"#include <fcntl.h> // open() close()#include <unistd.h> // read() write()#include <math.h>#define DEVICE_NAME "/dev/fb"#define BUFFER_SIZE 16struct prodcons {int buffer[BUFFER_SIZE]; /* the actual data */pthread_mutex_t lock; /* mutex ensuringexclusive access to buffer */int readpos, writepos; /* positions for readingand writing */pthread_cond_t notempty; /* signaled whenbuffer is not empty */pthread_cond_t notfull; /* signaled when bufferis not full */};void init(struct prodcons * b)Word 资料{pthread_mutex_init(&b->lock, NULL);pthread_cond_init(&b->notempty, NULL);pthread_cond_init(&b->notfull, NULL);b->readpos = 0;b->writepos = 0;}void put(struct prodcons * b, int data){pthread_mutex_lock(&b->lock);while ((b->writepos + 1) % BUFFER_SIZE == b->readpos) {printf("wait for not full\n");pthread_cond_wait(&b->notfull, &b->lock);}b->buffer[b->writepos] = data;b->writepos++;if (b->writepos >= BUFFER_SIZE) b->writepos = 0;pthread_cond_signal(&b->notempty);pthread_mutex_unlock(&b->lock);}int get(struct prodcons * b){int data;pthread_mutex_lock(&b->lock);while (b->writepos == b->readpos) {printf("wait for not empty\n");.Word 资料pthread_cond_wait(&b->notempty, &b->lock);}data = b->buffer[b->readpos];b->readpos++;if (b->readpos >= BUFFER_SIZE) b->readpos = 0;pthread_cond_signal(&b->notfull);pthread_mutex_unlock(&b->lock);return data;}struct prodcons buffer;//键盘输入线程void * producer(void * data){int fd;int ret;unsigned char buf[2] ;// int i;// double x;char pre_scancode = 0x44;fd = open("/dev/keypad", O_RDWR);// printf("fd = %d\n",fd);if (fd == -1) {printf("open device %serror\n",DEVICE_NAME);}else {buf[0]=0x22;while (1) {read (fd,buf,1);if(buf[0]!= pre_scancode){if(buf[0]!=0x44){printf("key=%x\n",buf[0]);put(&buffer, buf[0]);}}pre_scancode = buf[0];// sleep(1);usleep(50000);}// closeret = close(fd);// printf ("ret=%d\n",ret);// printf ("close keypad_driver test\n");}}//LCD显示线程void * consumer(void * data){int d;int ret;int fd;int i;int j;unsigned short buf[640*480];fd = open("/dev/fb", O_RDWR);.Word 资料 if (fd == -1){printf("open device %serror\n",DEVICE_NAME);}else{while(1){d = get(&buffer);printf("get num is %d\n", d);for(i=0;i<d;i++)for(j=640*480*i/d;j<640*480*(i+1)/d;j++)buf[j]=0x0001+i*1000;ret=write(fd,buf,sizeof(buf));ret = close(fd);ret = open("/dev/fb", O_RDWR);}}}int main(void){pthread_t th_a, th_b;void * retval;init(&buffer);pthread_create(&th_a, NULL, producer, 0);pthread_create(&th_b, NULL, consumer, 0);/* Wait until producer and consumer finish. */ pthread_join(th_a, &retval);pthread_join(th_b, &retval);return 0;}▪实验结果:实验效果图.实验效果图3.扩展应用实验实验二十六扩展应用实验▪实验目的:了解摄像头驱动程序,学习视频采集▪实验内容:进行视频采集▪实验结果:Word 资料实验效果图实验二十七GPS实验▪实验目的:在LINUX下接收GPS模块信息▪实验内容:接受GPS原始信息▪实验结果:实验效果图实验二十八GSM/GPRS通讯实验.Word 资料▪实验目的:掌握GSM/GPRS基本概念▪实验内容:测试GSM/GPRS膜酷似是否工作;读取SIM 卡的ID,拨打电话测试,接受电话测试,发送接受短信息。