版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学校代码:10128
AU.D
嵌入式系统综合设计阐明书
题目:智能车系统TIP3播放器设计与实现
学生姓名:
组员:
学院:信息工程学院
班级:计算机11-2班
指导教师
2023年3月15日
摘要
嵌入式项目T-CAR智能小车是嵌入式技术和物联网技术结合的产物。TCAR
以三星高端微处理器为主控实现重要控制工作,将WIFI无线通信与ZIGBEE近
距离无线组网通信相结合实现近距离和远程无线控制、信息采集等功能。T-CAR
即可作为互联网终端、物联网网关,也可以和工业控制、智能家居等系统融合使
用。
本课题目『、J是在ARM-Linux嵌入式环境下实现网络功能,系统重要由硬件
层、内核层、应用层三部分构成。由于Linux具有可移植度高、自由、免费等特
性,近来几年,它在移动设备和个人电脑领域的应用也越来越广泛,因此我们选
择Linux操作系统,鉴于以上应用领域对顾客界面友好性方面的规定,几乎所有
的此类应用都是采用图形顾客界面。播放界面采用Qt设计,Qt是发明图形顾客
界面的最流行的跨平台GUT工具箱之一。这里将通过一种使用QI技术日勺简朴mp3
播放器口勺实现,详细描述Linux环境下的图形界面编程技术。
本实训课程是嵌入式应用开发方向的实训课程,重要简介嵌入式应用程序的
开发技术,课程内容波及C语法及关键库、嵌入式Linux开发环境、嵌入式Linux
应用开发流程。在内容组织上,以案例贯穿课程的一直。通过一系列案例的学习
使学员能基本掌握嵌入式Linux应用程序开发的基本技术,能开发出有图形界
面,可交互,具有一定业务逻辑口勺嵌入式Linux应用程序。
关键字:嵌入式:QT;mp3播放器;
目录
序言
第一章概述
1.1课程设计目的
1.2课程背景与规定
课程设计背景
课程设计规定
1.3课程设计环境
第二章设计方案
2.1设计功能
2.2设计思绪
第三章软件设计
3.1模块流程图
3.2Madplay移植
序言
伴随社会的日益信息化,计算机和网络已经全面渗透到平常生活的每一种角
落。对于我们每个人来说,需要日勺已经不再仅仅是那种放在桌上处理文档、讲行
工作管理和生产控制的计算机机器。任何一种一般人都也许拥有从小到大的I多种
使用嵌入式技术日勺电子产品,小到MP3、PDA等微型数字化产品,大到网络家电、
智能家电、车载电子设备等。目前,多种各样日勺新型嵌入式系统设备在应用数量
上已经远远超过了通用计算机。在工.业和服务领域中,使用嵌入式技术口勺数字机
床、智能工具、工业机器人、服务机器人正在逐渐变化着老式向工业生产和服务
方式。
MP3是嵌入式的最重要应用之一,高端的MP3已经不仅仅着眼于实现音乐播
放这一简朴功能,而是同步具有了文本浏览、图片浏览、甚至视频播放等强大功
能。本文重点讨论了基于WIFI智能车的控制系统为主其中MP3的功能的实现,
包括开发环境建立、内核配置与编译、Qt开发等一系列详细过程。
近几年,嵌入式系统技术得到了广泛的应用,普适计算、无线传感器网络、
可重构计算等新兴技术的出现又为嵌入式系统技术的研究与应用注入了新的活
力。智能、信息家电、汽车电子、家用机器人……嵌入式系统已'‘无处不在”。
嵌入式系统是当今最热门的概念之一。
作为一种系统,往往是在硬件和软件双螺旋式交替发展的支撑下逐渐趋于稳
定和成熟,嵌入式系统也不例外。
第一章概述
嵌入式项目T-CAR智能小车是嵌入式技术和物联网技术结合的产物。TCAR
以三星高端微处理器为主控实现重要控制工作,将WIFI无线通信与ZIGBEE近
距离无线组网通信相结合实现近距离和远程无线控制、信息采集等功能。T-CAR
即可作为互联网终端、物联网网关,也可以和工业控制、智能家居等系统融合使
用C
课程设计目的
嵌入式系统设计与实践课程设计简介基本设计与实现措施,是为计算机科学
与技术专业本科生开设的一门重要的专业课程。是对此前所学诸多知识的汇总和
深化。通过三周的设计,能把此前诸多所学的理论联络实际,培养学生口勺试验动
手能力和创新意识,使学生对嵌入式系统有更全面的认识,掌握嵌入式系统口勺设
计与开发的措施,为未来进行嵌入式应用系统的设计与开发奠定基础。
1.2课程背景与规定
课程设计背景
物联网是一种基于互联网、老式电信网等信息承载体,让所有可以被独立
寻址的一般物理对象实现互联互通的网络。物联网通过智能感知、识别技术与普
适计算、泛在网络日勺融合应用,被称为继计算机、互联网之后世界信息产业发展
的第三次浪潮。物联网被视为互联网的应用拓展,应用创新是物联网发展的j关键,
以顾客体验为关键日勺创新2.0是物联网发展的灵魂。伴随物联网的发展,越来
越多的物联网控制终端将涌现,对于有关技术的学习需求和基于该领域H勺就业机
会将大增,本智能车就是在此前提下诞生时。
该智能车具有很强日勺操控性、可玩性,同步融入嵌入式物联网有关技术,使
学员可在相对轻松愉悦日勺环境中学习多种技术,让嵌入式技术的I学习变得不在枯
燥。
本车设计之初既考虑了可产品化空间,也考虑了技术知识点日勺涵盖,使学习
更能明确目日勺;同步本项目在选材上也考虑了项目的手工打造时也许性,意在锻
炼学员日勺动手实践能力,只要学习者有爱好,即可按所提供日勺材料清单和学习的
有关技术自行打造,我们更但愿能培养学习者的创客精神和创业欲望与意识。
课程设计规定
规定采用C/S架构,完毕对网络音乐播放器软件的分析、设计、编码、测试
等工作。
音乐播放器功能阐明:服务器实现完整H勺音乐播放器功能,客户端通过闾络
实现控制操作。
包括如下:
1、Madplay音乐播放器移植。
2、音乐播放器服务器设计,通过网络接受客户端祈求并执行对应动作,实
现音乐播放、暂停、上一首、下一首、播放列表、停止等功能;
3、QT客户端界面设计,规定运用qt设计控制客户端界面,实现通过网络
向服务器发送命令祈求等功能。
1.3课程设计环境
环境规定:操作系统:windows7+ubuntu虚拟系统
平台:vim编辑器,GNU工具链,Qtcreator集成开发环境
开发语言:C/C++
文档环境:windowsoffice
第二章设计方案
2.1设计功能
音乐播放器功能阐明:服务器实现完整日勺音乐播放器功能,客户端通过网络
实现控制操作。
包括如下:
1、Madplay音乐播放器移植;
2、音乐播放器服务器设计,通过网络接受客户端祈求并执行对应动作,实
现音乐播放、暂停、上一首、下一首、播放列表、停止等功能;
3、QT客户端界面设计,规定运用qt设计控制客户端界面,实现通过网络
向服务器发送命令祈求等功能。
2.2设计思绪
1、开发环境搭建,虚拟机配置有关vim编辑器,gcc编译器等有关软件配
置。
2、madplay音乐播放器移植,包括1ibmad音频解码库区J使用,,因此首先
需要移植madplay,详细措施如下:
1)创立安装库的)途径sudomkdir/opt/arn/madplay/lib
2)进入madplay源码目录执行./build
3)测试将madplay和库文献复制到根文献系统,配置LD_LIBRARY_PATH,
执行madplayxxx.mp3。
3、服务器端程序没计,采用C语言在Linux环境在完毕音乐播放器功能。
4、运用Qtcreator设计客户端界面,实现向服务器发送控制命令等功能
第三章软件设计
3.1模块流程图
图1.1模块流程图
3.2Madplay移植
1)首先建立一种叩3文献夹,进入到mp3文献夹后再建立两个文献夹,一种寄
存源码,一种寄存安装文献。在home下,mkdir两个文献夹:madplay-src、
madplayo依次解压四个源码包到madplay目录下:
(2)编译zlib-
进入zlib源文献目录,依此执行./configure9/26makemakeinstall
(3)编译libid3tag
进入tag源码目录,依此执行./configuremakemakeinstall
(4)编译libmad
进入libmad源码,依此执行./configuromake
注:使用的是高版本日勺ARM-LINUX-GCC如编译器,MAKE时也许会出
WCCL:ERROR:UNRECOGNIZEDCOMMANDLINEOPTION“-FFORCE-MEM"”错误,
这是由于这个高版本的GCC没有"-FFORCEMEM”参数,处理日勺措施是在LIBMAD
文献中H'、JMAKEFILE里面查找"-FFORCE-MEM”,将其删除即可makeinstall
(5)编译madplay
进入madplay源码目录,依此执行./configure--withalsamakemakeinstall
(6)测试madplay
执行命令(配置环境变量):exportLD_LIBRARY_PATH
=$LD_LIBRARY_PATH/usr/local/lib
运行:madplayxx.mp3
3.3程序清单
3.3.1音乐播放器服务器程序实现
ttinclude"common,h”
ttinclude"socket.h〃
#include"player.h〃/*孙子进程id号*/
pid_tgradchiId;/*子进程id号*/
pid_tpid;/*共享内存描述标识*/
intshmid;
char*p_addr;/*共享内存内容格式*〃*gradchild(孙子进程P1D)|+|空一种
字节|+currentsong(目前播放列表的节点指针)
I*//*listheadformusic*/
structsong*head;/x创立歌曲名欧J双向循环链表*/
structsong*creat_song_list(void)
{FILE*fd;
ssize_tsize;
size_tlen;
char*line=NULL;
structsong*pl;
structsong*p2;
intres=system(,,ls./song>song_list〃);
if(res==-1)perror("system");
fd=fopen("song_list〃,〃rb");
if(fd==NULL){
pcrror(〃fopcn〃);}
pl=(structsongmalloc(sizcof(structsong));
printf(//==================================song
list=====================================\n//);
res=system("Is./song");
if(res==-1)perror("system");
printf(〃\n〃);
printf("=================================
size=getline(&line,&len,fd);
strncpy(pl->songname,line,strlen(line));
head=pl;
intn=strlen(line);
(head->songname)[n[='\0';
while((size=getline(&1ine,&len,fd))!=-1)//从文献中读取一行,直到
出错或者到文献尾EOF返回7
{p2=pl;
pl=(structsong*;malloc(sizeof(structsong));
strncpy(pl->songname,line,strlen(line));
p2->next=pl;
pl->prev=p2;
intn=strlcn(line);
(pl->songname)[n]=>\0>;}
pl->next=head;
head->prev=pl;
pl=NULL;
p2=NULL;
res=system("rm-rfsonglist^);
if(res==-1)perror("system");
returnhead;}/*MP3音乐播放器一>播放音乐函数*/
voidplay(structsong*currentsong)
{pidtnewfd;
char*caddr;
void*tempaddr;
char*p;
intlen;
charmy_song[2048]="./song/";
whi1e(currentsong)
(printf(^currentsongsize=%d\n〃,strlen(currentsong->songname));/*子进
程创立孙子进程*/
newfd=fork();
if(newfd==-1)
{perror(/zforkz,);
exit⑴;}
elseif(newfd==0)〃孙子进程
(printf(z,playforksuccess!\n");/*把歌曲名加上根途径*/
strcat(mysong,currentsong->songname);
p=my_song;
len=strlen(p);/*去掉文献名最终的T\0'*/
my_song[len-l]=,\0';
printf(Z,THISSONGIS%ssize=%d\n'\my_song,strlen(my_song)):
/*运行madplay播放器,播放MP3*/
execl(,,/usr/local/sbin/madplay,/,z/madplayz,,nysong,NULL);〃播放目前列
表MP3音乐
printfC\n\n\n,z);}
else//子进程
{/*内存映射*/
tempaddr=shmat(shnid,0,0);
caddr=(char*)tempaddr;/*把孙子进程『、Jid和目前播放歌曲口勺节点指针传
入共享内存*/
memcpy(c_addr,&newfd,sizeof(pid_t));
memcpy(c_addr+sizeof(pid_t)+l,¤tscng,4);/*使用wait阻塞子进
程,直到孙子进程播放完才能被唤醒;当被唤醒时,表达播放MP3期间没有按
键按下,则继续次序播放下一首MP3*/
if(ncwfd==wait(NULL))
{currentsong=currentsong->next;
printf(Z,THENEXTSONGIS%s\nz,,currentsong->songname);}}}}
"MP3音乐播放器一》调用play函数播放音乐*/
voidstartplay(pidt*childpid,structsong*mysong)
{pid_tpid;〃假如没有音乐正在播放并且不是处在暂停状态
if((play_flag=二0)&&(play_pause_flag!二1)){
play_flag=1:
play_stop_flag=0;/*创立子进程*/
pid=fork();
if(pid>0){〃父进程
*childpid=pid;//子进程PID初始化
sleep(l);/*读取共享内存保留的pid,初始化孙子进程口勺pid*/
/*P_addr指向共享内存,保留的是孙子进程的ID*/
memcpy(&gradchiId,paddr,sizeof(pidt));}
elseif(0==pid){//子进程/*子进程播放MP3函数*/
play(my_song);}}〃假如没有音乐正在播放并处在暂停状态
elseif((play_flag==0)&&(play_pause_flag==1)){
play_flag=1;
play_pause_flag=0:
conti_play(gradchild);}
else
return;}
/*MP3音乐播放器一>暂停播放*/
voidmypause(pidtpid)
{if((play_flag==1;&&(play_pause_flag==0)){
printf(〃============PAUSE!PRESSPLAYTO
CONTINUE==========\n〃);
kilKpid,SIGSTOP)://对孙子讲程发送SIGSTOP信号
play_pause_flag=1:
play_flag=0;}
else
return;}
/*MP3音乐播放器一〉继续播放*/
voidcontiplay(pidtpid)
{printf(〃================CONTINUE:
kill(pid,SIGCONT);〃对孙子进程发送SIGCONT信号}
"MP3音乐播放器一》潘放下一首*/
/*只有正在播放音乐的状态下,上一首和下一首才有作用*/
voidnext(pid_tnext_pid)
{intres;
if(play_flag==0){
return;}
else{
structsong*nextsong;
printf(〃================NEXTMP3===
===\n〃);
/*从共享内存获得孙子进程播放歌曲的节点指针x/
memcpy(&nextsong,p_addr+sizeof(pid_t)+1,4);
/*指向下首歌曲的节点*/
nextsong=nextsong->next;
/*杀死目前歌曲播放的子进程,孙子进程*/
res=kill(pid,SIGK:LL);
if(res==-1){
perror(,zkillnextpiderror");
return;}
res=kill(nextpid,STGKTLL);
if(res==-1){
perrorC'killnextnext_piderror");
res=systemC,killallmadplay,z);
if(res==-1)perror("system");}
//wait(NULL);
play_flag=0;
startplay(&pid,nextsong);}}
/*MP3音乐播放器一〉潘放上一首*/
voidprev(pidtprevpid)
{intres;
if(play_flag==0){
return;}
elsef
structsong*prevsong;
/*从共享内存获得孙子进程播放歌曲的节点指针N/
printfC===============================PR10RMP3
====\n〃);
memcpy(&prevsong,paddr+sizeof(pidt)+l,4);
/*指向上首歌曲『、J节点*/
prevsong=prevsong->prev;
/*杀死目前歌曲播放的子进程,孙子进程*/
res=kill(pid,SIGK:LL);
if(res==-1){
perror(''killprevpiderror");
return;}
res=kill(prevpid,SIGKILL);
if(res==-1){
perror(z,killprevprevpiderror");
res=system(,/killallmadplay");
if(res==-1)perror("system");}
//wait(NULL);
play_flag=0;
startplay(&pid,prevsong);}}
/*MP3音乐播放器一》停止播放*/
voidmy_stop(pid_tg_pid)
{intres;
if(play_stop_flag==1){〃假如已经停止,直接返回
return;}
if((play_flag=1)|(play_pause_flag==1)){
printf(〃============STOP!PRESSPLAYTO
START==========\n〃);
res=kill(pid,STGKZLL);〃对子进程发送SIGKILL信号
if(res==-1){
perror(""stoppiderror");
return;}
res=kill(g_pid,SIGKILL);〃对孙子进程发送SIGKILL信号
if(res==-1){
pcrror(/?stopg_piderrorz/);
res二system(〃killai1madplay");
if(res==-1)perror("system");}
play_flag=0;
play_stop_flag=1;
play_pause_flag=0:}
else
return:}
/*MP3音乐播放器一》播放列表*/
/*搜索列表音乐名字与歌曲相匹配,并杀死正在播放歌曲进程而播放对应列表音
乐*/
voidplaylist(pidtchildpid,char*listsong)
{intres;
play_flag=0;
if(strncmp(head->songname,listsong,4)=二0;{
res=kill(pid,STGKZLL);
if(res==-1){
perrorC'playlistkillpiderror*);
return;}
res=kill(chi1dpid,SIGKILL);
if(res==-1){
pcrror(z,playlistkillchildpiderror");
res二system(〃killai1madplay");
if(res==-1)perror("system");}
wait(NULL);
startplay(&pid,head;;
return;}
structsong*nextsong=head->next;
do{
if(strncmp(nextsong->songname,listsong,4)=0){
res=kill(pid,STGKZLL);
if(res==-1){
perror(z,playlistkillpiderror");
return;}
res=kill(childpid,STGKTLL);
if(res==-1){
perror(,zplaylistkillchildpiderror");
res=system("killai1madplay^);
if(res==-1)perror("system");}
wait(NULL);
startplay(&pid,nextsong);
return;}
ncxtsong=ncxtsong->ncxt;
}while(nextsong!=head);}
/*接受客户端命令*/
voidrecvcmd(void)
{intcmd=0;
charbuf[SIZE];
memset(buf,0,sizeofJbuf));
while(l){
intlen=recvfrom(serversockfd,&cmd,4,0,:struct
sockaddr*)&.serveraddr,&sinsize);
if(len<0){
continue;}
switch(cmd){
casePLAY:
startplay(&pid,head;;
break;
casePAUSE:
my_pause(gradchiId):
break;
caseSTOP:
mystop(gradchild);
break;
caseNEXT:
next(gradchild);
break;
casePREV:
prev(gradchild);
break;
caseLISTSONG:
memset(buf,0,sizeof:buf));
len=recvfrom(serversockfd,buf,sizeof(buf),0,(struct
sockaddr*)&clientaddr,&sinsize);
if(len>0){
printf(,zrecv1istbuf=%s\n〃,buf);
playlist(gradchiId,buf);}
break;
default:
puts(^notfindthecmd!〃);
break;}}}
intmain()
{/*创立播放列表*/
hcad=crcat_song_list();
/*共享内存:用于寄存子进程ID,播放列表位置*/
void*tempaddr;
if((shmid=shmget(IPC_PRIVATE,5,PERM))=-1)
perror("shmget");
tempaddr=shmat(shnid,0,0);
if(tempaddr==(void*)-1){
perror("shmat");}
p_addr=(char*)tenpaddr:
memset(p_addr,'\0',1024);
/*初始化MP3播放停止标志*/
play_flag=0;
play_stop_flag=0;
playpauseflag=0;
〃初始化网络
intres=createsocket();
if(res<0){
perror(/,create_socket,/);)
//接受控制命令(死循环);
recvcmd();
return0;)
#ifndcfPLAYER_H
^definePLAYER」
/*共享内存申请标识*/
^definePERMS_IRUSR|S_IWUSR
ttdefineSIZE1024
structsong
{charsongname[1024];
structsong*prev;
structsong*nexl;};
char*playsong;
/*播放标识*/
intplay_flag;
intplaystop_flag;
intplaypause_flag:
/*保留接受到的字符串(推送过来MJ消息)*/
chartempstr[100];
unsignedintpos;
externvoidplay(structsong*currentsong):
externstructsong^creat_song_list(void);
externvoidstartplay(pid_t*childpid,structsong*my_song);
externvoidmy_pause(pid_tpid);
externvoidmy_stop:pid_tgpid);
externvoidconti_pla}f(pidtpid);
externvoidnext(pidtnext_pid);
externvoidprev(pidtprevpid);
externvoidplaylist(pidtchildpid,char*listsong);
ttendif
ttinclude“socket.h〃
intserver_sockfd;
socklentsinsize;
structsockaddrinserveraddr;
structsockaddrinclientaddr;
intcreate_socket()
{memset(&serveraddr,0,sizeof(serveraddr));
/*初始化网络信息*/
serveraddr.sinfamily=AFINET;〃设置为IP通信
server_addr.sin_addr.s_addr=INADDR_ANY;//无限制
server_addr.sin_port=htons(8000);
if((server_sockfd=socket(PF_INET,SOCK_DGRAM,0))<0)
return-1;}
if(bind(server_sockfd,(structsockaddr*)&server_addr,
sizeof(structsockaddr))<0){
return-1;}
return1;
sinsize=sizeof(structsockaddr_in);}
#ifndefS0CKET_H
^defineSOCKET,H
ttincludecommon.h〃
#definePLAY11
ttdefinePAUSE12
^defineSTOP13
^defineCONTINUE14
4defineNEXT15
#definePREV16
^defineLISTSONG18
externintserversockfd;
externsocklen_tsin_size;
externstructsockaddr_inserver_addr;
externstructsockaddr_inclient_addr;
externintcreate_socket();
#endif
ttifndef_COMMON_H
^define_COMMON_H
[include<stdio.h>
ttinclude<stdlib.h>
^include<string.h>
ttinclude<pthread.h>
ttinclude<sys/types.h>
ttinclude<sys/ipc.h>
#include<sys/msg.h>
ttinclude<string.h>
ttinclude<sys/time.h>
#include<sys/types.h>
#include<unistd.h>
ttinclude<1inux/input.h>
#include<termios.h>
#include<signal.h>
ttinclude<sys/select.h>
^include<errno.h>
ttinclude<sys/wait.h>
#include<string.h>
#include<sys/ipc.h>
ttinclude<sys/shm.h>
^include<fcntl.h>
[include<sys/ioctl.h>
ttinclude<sys/types.h>
ttinclude<sys/socket.h>
ttinclude<netinet/in.h>
ttinclude<arpa/inet.h>
ttinclude<signal.h>
ttdefineERROR-1
#endif
6.makefiIe
name=*.c
BIN二player
FLAGS=-g-02-Wall
default:gcc$(FLAGS)$(name)-o$(BIN)
3.3.2音乐播放器客户端程序实现
1,player,cpp
#include"player.h〃
ttinclude,,ui_player.h/z
#include"listmusic.h〃
#include"socket.h〃
player::player(QWidget*parent):
QDialog(parent),
ui(newUi::player)
(ui->setupUi(this);
init_socket();}
player::^player()
(deleteui;}
voidplayer::on_play_clicked()
{intcmd=0;
intlen;
cmd=PLAY;
lcn=sendto(client_sockfd,&cmd,4,0,(structsockaddr*)&client_addr,
sin_size);
if(Ion<0){QMessageBox::question(this,二r(“成果〃),QString(tr(“发送
网络数据失败〃)));
return;})
voidplayer::on_pause_clicked()
(intcmd=PAUSE;
intlcn=scndto(clicnt_sockfd,&cmd,4,0,(structsockaddr
*)&client_addr,sin_size);
if(len<0){QMessageBox::question(this,tr(〃结“),QString(tr(“发送网络数
据失败〃)));
return;}}
voidplayer::onnexlclickedO
{intcmd=NEXT;
intlen=sendto(client_sockfd,&cmd,4,0,(structsockaddr
*)&c1ient_addr,sinsize);
if(len<0)(OMessageBox::question(this,二r(“结〃),QString(tr("发送网
络数据失败〃)));
return;}}
voidplayer::onprevclickedO
{intcmd=PREV;
intlen=sendto(clientsockfd,&cmd,4,0,(structsockaddr
*)&client_addr,sinsize);
if(len<0){QMessageBox::question(this,二r(〃成果〃),QString(tr(〃发送
网络数据失败〃)));
return;}}
voidplayer::on_listbutton_clicked()
(playerxy3;
listmusic1;//l.setVindowFlags(Qt::FramelessWindowHint);
1.setGcometry(850,250,250,350);//l.show();
if(1.exec()==Acccptcd){
xy3.show();}}
voidplayer::on_stop_clicked()
{intcmd二STOP;
intlen=sendto(clientsockfd,&cmd,4,0,(structsockaddr
*)&client_addr,sin_size);
if(len<0){QMessageBox::question(this,二r("成果〃),QString(tr(〃发送
网络数据失败〃)));
return;}}
ttifndefPLAYERH
^definePLAYERH
#include<QDialog>
#include<QtDebug>
ftinclude<QTimer>
#include<QMessageBox>
^include<QFileDialog>
^include<QTextCodec>
^include<QDateTime>
ttinclude<QProgressDialog>
#include"socket.h〃
namespaceUi{
classplayer;}
classplayer:publicQDialog
{Q_0BJECT
public:
explicitplayer(QWidget"parent=0);
"player();
privateslots:
voidon_play_clickcd();
voidon_pausc_clickcd();
voidonnextclicked();
voidonprevclicked();
voidon1istbuttonclicked();
voidonstopclicked();
private:
Ui::player*ui;};
#endif//PLAYERJ
ttinclude“socket.h〃
/*网络通信变量*/
intclient_sockfd;
intlen;
intsinsize;
structsockaddrinclient_addr;
voidinitsocket0
{/*创立socket跟设备进行通信*/
client_addr.sin_family=AF_INET;
client_addr.sinaddr.s_addr=inet_addr(z/127.0.0.1");//服务器IP
//client_addr.sin_addr.s_addr=inet_addr(x192.168.1.6〃):
client_addr.sinport=htons(8000);
if((client_sockfd二socket(PFJNET,SOCKDGRAM,0))<0){
printf(''socketerror\n,/);
exit(-1);}
sinsize=sizeof(structsockaddrin);}
#ifndefSOCKETH
^defineSOCKETH
/*网络数据头文献*/
ttinclude<stdio.h>
^include<sys/types.h>/*SeeNOTES*/
#include<sys/socket.h>
ttinclude<netinet/in.h>
tfincludc<arpa/inct.h>
#include<unistd.h>
ttinclude<sys/stat.h>
[include<fcntl.h>
#include<sys/time.h>
^include<stdlib.h>
ttdefinePLAY11
ttdefinePAUSE12
ttdefineSTOP13
^defineCONTINUE14
^defineNEXT15
#definePREV16
4defineLISTSONG18
externvoidinitsocket();
externintclientsockfd;
externintlen;
externintsinsize:
externstructsockaddr_inclicnt_addr;
ttcndif//SOCKET_H
第四章调试过程
4.1硬件连接
实训机器的硬件配置规定如下:
硬件类型主讲机器学员机器
CPU:(主讲机器)基本IntelPentium®系列2.0GHz以上,推荐Intel
Pentium®系列双核;
(学员机器)IntelPentium®系列1.6GHz以上,推荐IntelPentium®系
列2.0GHz以上。
内存:(主讲机器)基本DDR3系列内存2GE容量DDR3系列内存2容量,
推荐DDR3系列内存4GB容量DDR3系列内存4GB容量硬盘;
(学员机器)基本不不大于60GB容量不不大于60GB容量,推荐120GB
以上容量120GB以上容量。
4.2软件连接
4.2.1操作系统
1.学生机器使用ubuntu12.04系列32位操作系统或
windows+VMware虚拟系统。
2.讲师机器使用ubuntu12.04系列32位操作系统。
4.2.2系统软件
l.GCC(Linux下C语言编译工具)
2.文本编辑工具:vim或其他文本编辑工具
3.qtcreate集成开发环境
4.2.3工具软件
1.telnet远程登陆工具
2.假如没有投影仪,需要屏幕共享工具。
4.2.4文档和资源
l.man手册c语言库函数帮组页:
2.实训全套代码(随附件一起提供)
4.3试验环节
智能车内置MP3播放程序,采用基于madplay欧)音乐播放器,因此首先需
要移植madplay,详细措施如下:
1)创立安装库的途径sudomkdir/opt/arn/madp1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车 4S 店资产转让合同
- 水利工程白蚁防治工程师考试试卷及答案
- 水产种质资源保护区管理工程师考试试卷及答案
- 优加工程试点阶段协议书
- 单亲妈妈领养协议书
- 代运营协议书模板
- 蚌埠市离婚协议书律师
- 风力发电土地租赁协议
- 北京电动车牌出租协议书
- 团购手机卡协议书
- 2026江苏苏州市健康养老产业发展集团有限公司下属子公司招聘15人(第二批)笔试参考试题及答案解析
- 2026贵州黔西南技师学院公开招聘事业单位工作人员14人考试备考试题及答案解析
- C-TPAT反恐程序文件(完整版)
- 天然气管道清管、试压、干燥施工技术方案
- NB/T 10731-2021煤矿井下防水密闭墙设计施工及验收规范
- GB/T 1048-2019管道元件公称压力的定义和选用
- GA 1283-2015住宅物业消防安全管理
- 中等职业学校班主任能力比赛汽车运用与维修专业班级建设方案
- 储罐安全附件基础知识讲座课件
- 分子设计育种课件
- (完整版)机械工程专业英语课件
评论
0/150
提交评论