基于Linux6818开发版的智能车库(可提供源码)

111道嵌入式面试题答案汇总专栏链接(承诺免费技术答疑) --> 《嵌入式/C++面试题解析大全》

需要嵌入式Linux应用层项目源码(附说明文档) --> 《基于Linux6818开发版的智能车库》

简介

本人2020年本硕毕业于广东工业大学:嵌入式许乔丹,牛客高级专栏作者,牛客大学讲师,本科阶段搞了4年单片机、曾参加全国大学生恩智浦汽车竞赛,发表4个硬件专利。研究生阶段找了嵌入式linux的实习,毕业后拿到珠海格力,云从科技,CVTE,小米,美的,华为的嵌入式offer,签约CVTE嵌入式岗位。在CVTE先后做过嵌入式Linux开发和安卓系统开发,参与过TV板卡、显示屏板卡、智能家居板卡、希沃网课学习机的开发。

整理111道嵌入式面试题目答案解析(链接见文章开头),本专栏内容主要是面试过程口头提问的问题答案汇总,承诺提供免费技术答疑:

需要嵌入式Linux项目的同学可以看看智能车库项目,属于进阶版项目,涉及多进程多线程编程,网络编程,数据库编程,使用到显示屏,摄像头,RFID读卡器,蜂鸣器等硬件,并结合openCV和车牌识别库和科大讯飞语音库。可以帮助你掌握嵌入式linux多进程多线程编程,数据库编程和网络编程,也可以将项目写在简历上。

基于Linux6818开发版的视频播放器(可提供源码)

1、项目描述

本项目基于嵌入式linux6818开发板,制作一个智能车库。搭配触摸屏、USB摄像头、音响,模拟实现真实场景中的智能车库常见功能:

  • 实时视频监控
  • 自动识别车牌
  • 自动语音播报
  • 停车计费

需要使用到V4L2子系统,FrameBuffer子系统、OpenCV、多进程多线程编程、ALSA子系统、智能语音引擎、网络编程、数据库编程等。

2、使用到的技术

  • 多进程通讯:有名管道、消息队列、信号量、条件变量、互斥锁;
  • 多线程通讯:互斥锁、条件变量;
  • 其他知识:C语言、链表、嵌入式开发;
  • mplayer:mplayer移植(自行百度,很多资料,跟着敲指令即可),语法(可参考:https://blog.csdn.net/weixin_43288201/article/details/105847664$ );

3、推荐人群

该项目适合正在学习嵌入式Linux系统编程的同学,可以让你更高效了解多进程、多线程通讯,如消息队列,信号量,互斥锁、条件变量等知识点。

4、项目源码讲解

4.1 运行

在命令行输入:./app video 即可。其中app是源码通过makefile编译出来的可执行文件,video是你自己去创建的一个目录,里面放着各种mp4视频,我这边没有提供这个目录。

4.2 文件目录

4.2.1 src目录

main.c:主文件secondary.c:副文件pthread.c:子线程文件lcd.c:对lcd显示屏的操作文件freetype.c:字符操作文件file_list.c:对照片的操作的文件,如如何打印,打印下一张或者上一张display_jpeg.c:存放对jpeg图片的打印函数,包括特效打印

4.2.2 include目录

src目录中的c文件对应的头文件,以及jpeg图像和freetype2字符库相关的头文件。

4.2.3 lib目录

jpeg图片库和freetype2字符库(本项目需要在显示屏显示图片和显示字符)。

4.2.4 data目录

simsun.ttc :宋体库,为了在屏幕上显示中文。

4.2.5 material目录

我在百度找到的一些图片,比如开始播放,停止播放的jpg图片。

4.3 源码逻辑

  1. 在main.c文件的主函数先初始化各种互斥锁,条件变量,FIFO管道,并且遍历material目录下的图片信息,主要是获取图片的像素信息,如图片高度/宽度。接着遍历video视频目录里的视频,获取视频信息,以及获取每个视频的一帧截图,遍历的结果都是放在链表里面;
  2. 初始化显示屏,并在显示屏上面:如right_display_picture()是在显示屏右边将视频截图显示出来,然后就可以点击每个截图来播放对应的视频;display_main_material()把material目录下的图片显示在屏幕上,
  3. 创建一个子进程,并使用mplayer播放视频;
  4. 创建3个子线程,这三个子线程的代码在pthread.c : 1)查询触屏指令的get_main_instrcution() 2)写指令来获取视频播放进度的write_command():该子线程一直写{"get_percent_pos\n","get_time_length\n"}来查询播放进度,为何是写这个指令,是mplayer工具规定的。可见上述参考链接; 3)获取视频播放进度信息的get_video_info():通过write_command和get_video_info两个子线程,就能实时获取播放进度,实时更新进度条啦。
  5. 最后就是在主函数的while循环里,等待get_main_instrcution子线程有触摸事件后,主函数再去执行对应操作,如“下一首”,“静音”等。
全部评论

相关推荐

10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
1 7 评论
分享
牛客网
牛客企业服务