首页下载资源操作系统粤嵌GEC6818小任务加最终作品 (相册,音频,视频)蓝牙控制所有模块!!!

RAR粤嵌GEC6818小任务加最终作品 (相册,音频,视频)蓝牙控制所有模块!!!

m0_7495560331.08KB需要积分:1
文件:小任务.rar

资源介绍:

标题中的“粤嵌GEC6818小任务加最终作品”表明这是一份与粤嵌GEC6818开发板相关的项目成果,可能是一个综合性的课程作业或者项目实践,包含了不同阶段的任务和最终的整合作品。"(相册,音频,视频)蓝牙控制所有模块”意味着该作品涉及到了多媒体元素的处理,如相册展示、音频播放和视频播放,并且这些功能可以通过蓝牙设备进行远程控制。这意味着项目涵盖了多媒体处理、嵌入式系统、蓝牙通信等多个技术领域。 描述中提到“里面有完整的源代码,可执行文件”,这意味着提供的压缩包中不仅包括了编译后的程序,还有源代码,这对于学习和理解项目的工作原理非常有帮助。同时,“送平时的小任务全部齐全”表示这个压缩包包含了整个学习或开发过程的各个阶段,用户可以循序渐进地查看和研究。 从标签“软件/插件”来看,我们可以推断出这个项目可能涉及到软件开发,可能是为某种操作系统或硬件平台开发的一个应用程序或扩展功能,比如是一个运行在GEC6818开发板上的多媒体管理及控制软件。 在压缩包子文件的文件名称列表中虽然只提到了“小任务”,但可以推测这些文件分别代表了项目开发的不同阶段,每个小任务可能对应一个特定的功能实现或者问题解决,例如:任务1可能是蓝牙连接的实现,任务2可能是音频播放功能的编写,以此类推。 综合以上信息,我们可以梳理出以下几个关键知识点: 1. **粤嵌GEC6818开发板**:这是一个用于嵌入式系统开发的硬件平台,通常用于教学和实验,学习者可以在这个平台上进行各种软硬件交互的实践。 2. **蓝牙通信**:项目实现了通过蓝牙控制多媒体功能,涉及到蓝牙协议栈的编程,包括配对、连接、数据传输等步骤。 3. **多媒体处理**:项目包含相册、音频和视频的管理,可能用到了多媒体库如FFmpeg等,需要了解多媒体文件格式和解码编码原理。 4. **嵌入式软件开发**:源代码和可执行文件表明项目是用C/C++等语言开发的,需要掌握嵌入式系统编程,包括内存管理、中断处理、设备驱动等。 5. **项目管理与版本控制**:“小任务”的结构暗示了项目是分阶段进行的,可能采用了敏捷开发或迭代开发的方法,同时也可能涉及到版本控制系统如Git来管理代码。 6. **软件工程**:完整的源代码和可执行文件反映了软件的完整生命周期,包括设计、编码、测试和部署,体现了良好的软件工程实践。 7. **用户界面设计**:为了实现用户友好的控制,项目可能包含图形用户界面设计,需要了解GUI框架如Qt或GTK+等。 通过深入学习和分析这个项目,不仅可以提升嵌入式系统的开发技能,还能增强蓝牙应用开发、多媒体处理以及软件工程实践的能力。
#include #include #include #include #include #include #include #include #include //输入子系统的头文件 #include int init_tty(int fd) { struct termios old_flags, new_flags; bzero(&new_flags, sizeof(new_flags)); // 1. 获取旧的属性 tcgetattr(fd, &old_flags); // 2. 设置原始模式 cfmakeraw(&new_flags); // 3. 激活本地连接CLOCAL与接收使能CREAD的选项 new_flags.c_cflag |= CLOCAL | CREAD; // 4. 设置波特率 cfsetispeed(&new_flags, B9600); cfsetospeed(&new_flags, B9600); // 5. 设置数据位为8位 new_flags.c_cflag &= ~CSIZE; // 清空原有的数据位 new_flags.c_cflag |= CS8; // 6. 设置奇偶检验位 new_flags.c_cflag &= ~PARENB; // 7. 设置一位停止位 new_flags.c_cflag &= ~CSTOPB; // 8. 设置等待时间,最少接收字符个数 new_flags.c_cc[VTIME] = 0; new_flags.c_cc[VMIN] = 1; // 9. 清空串口缓冲区 tcflush(fd, TCIFLUSH); // 10. 设置串口的属性到文件中 tcsetattr(fd, TCSANOW, &new_flags); return 0; } int main() { // 1.访问串口1 int fd = open("/dev/ttySAC1", O_RDWR | O_NOCTTY); // 2.配置串口1参数 init_tty(fd); // 存储手机发送过来数据 char buf[10] = {0}; // 接收到数据长度 int ret; // 歌曲列表 char music_path[3][32] = {"zhongxiaodonglu.mp3", "chengmo.mp3", "shinian.mp3"}; // 歌曲列表的索引 int i; // 进程id pid_t pid; // 记录状态: 1.播放 2.暂停 3.继续 4.上一首 5.下一首 6.停止 char *status = "6.停止"; while (1) { // 记录操作指令是否正确 char ok = '0'; // 读数据 ret = read(fd, buf, 10); if (ret == -1) { perror("read error"); return -1; } // 播放歌曲 if (0 == strcmp(buf, "1")) { if (0 == strcmp(status, "6.停止")) { // 子进程 pid = fork(); // 子进程执行部分 -->播放下标为i的音乐 if (pid == 0) { execl("/usr/bin/madplay", "madplay", music_path[i], NULL); } status = "1.播放"; write(fd, status, strlen(status)); // 指令执行正常 ok = '1'; } // 暂停歌曲 } else if (0 == strcmp(buf, "2")) { if (0 != strcmp(status, "2.暂停") && 0 != strcmp(status, "6.停止")) { /* kill函数的参数2是一个标识,常用的有以下: SIGINT: 终止一个进程(ctrl+c) SIGKILL: 强制杀死一个进程 SIGCONT: 恢复一个进程的运行(之前已经执行了 SIGSTOP 这个暂停信号) SIGSTOP: 暂停一个进行的运行,并没有结束掉 */ kill(pid, SIGSTOP); status = "2.暂停"; write(fd, status, strlen(status)); // 指令执行正常 ok = '1'; } } else if (0 == strcmp(buf, "3")) // 继续 { if (0 == strcmp(status, "2.暂停")) { // 恢复该进程执行 kill(pid, SIGCONT); status = "3.继续"; write(fd, status, strlen(status)); // 指令执行正常 ok = '1'; } } else if (0 == strcmp(buf, "4")) // 上一首 { if (0 != strcmp(status, "2.暂停") && 0 != strcmp(status, "6.停止")) { // 结束当前这一首,然后播放下一首 kill(pid, SIGKILL); // 歌曲序号递减 i--; // 判断,如果到了开始第一首歌曲 if (i < 0) { // 设置为最后一首歌曲 i = 2; } // 子进程 pid = fork(); // 子进程执行部分 -->播放小标为i的歌曲 if (pid == 0) { execl("/usr/bin/madplay", "madplay", music_path[i], NULL); } status = "4.上一首"; write(fd, status, strlen(status)); // 指令执行正常 ok = '1'; } } else if (0 == strcmp(buf, "5")) // 下一首 { if (0 != strcmp(status, "2.暂停") && 0 != strcmp(status, "6.停止")) { // 结束当前这一首,然后播放下一首 kill(pid, SIGKILL); // 歌曲序号递增 i++; // 判断,如果到了最后一首歌曲 if (i > 2) { // 设置为第一首歌曲 i = 0; } // 子进程 pid = fork(); // 子进程执行部分 -->播放小标为i的歌曲 if (pid == 0) { execl("/usr/bin/madplay", "madplay", music_path[i], NULL); } status = "5.下一首"; write(fd, status, strlen(status)); // 指令执行正常 ok = '1'; } } else if (0 == strcmp(buf, "6")) // 结束播放 { if (0 != strcmp(status, "6.结束播放")) { // 结束播放后,再播放歌曲,从第一首歌曲开始 i = 0; // 结束当前播放歌曲的进程 kill(pid, SIGKILL); status = "6.结束播放"; write(fd, status, strlen(status)); ok = '1'; } } // 判断指令执行是否正常 if (ok != '1') { printf("操作有误!"); write(fd, "操作有误!", strlen("操作有误!")); } // 清空buf bzero(buf, 10); } // 接收 return 0; }
100+评论
captcha