framebuffer 编程

研究生学习期间,作者开始接触ARM开发板,任务是实现图片显示。在没有现成API的情况下,选择了Framebuffer进行编程。文章介绍了尝试QT移植的放弃,转向Framebuffer的简单操作,并涉及jpeg库的移植。作者花费一天编写程序,两天重构,尽管遇到困难,但通过重构对代码有了更深入的理解。同时,分享了阅读《C专家编程》和《系统程序员成长计划》的心得,以及后续面临的视频播放功能实现的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


从第一 步跨进杭电,就表示了研究生的开始,我发过誓我不能才那么弱小,我要和以前不一样。研究生的学习让我觉得是一种充实感,让我觉得我对得起我自己,不是混时间,所以读研的开始的良好的。

研究生的生活其实很单一,就是待实验室学习,你可以做老师安排的,如果老师没安排的话你可以学习自己的。研究生也要上课,不过和大学不一样的是,上课只是为了修学分,因为连上课的老师也是这么觉得的。基本上我都不怎么会去上课的,因为实在是无聊的不行,老是想睡觉,老师讲课和念书差不多....不过这些老师也是牛人啊,只有4个同学上课他也能讲的很有味道...膜拜啊....哈哈哈....

还是说正事吧,开始读书以后基本上都是很忙的,很多新的发现也来不及写出来分享。

导师给我的任务是先把arm开发板的弄熟悉,这个板子其实暑假的时候老师就给我了,我基本上也没有怎么去玩这个,因为我以为只有台式机才能做开发的,哈哈,来了学校我发现我错了,其实只有一根网线,基本就ok了。真是蛋疼啊.....

导师说让我先在板子上实现关于图片的显示,我我觉得这个难度其实挺大的...毕竟以前都是有现成的API,所以关于底层的实现基本上是不清楚,给我的时候我觉得这个难度让我有点不知道怎么办。不过搞arm的好像就我一个人在我们实验室。本以为师兄他们也是搞arm的,可是他们竟然是搞FPGA,到现在我也不知道那是做什么的,哈哈,做他们那个的是真正搞硬件的,他们竟然连C语言都不会,哎...没人可问啊...那就问问Google吧。

首先进入我眼的是QT的移植,这样就可以调用现成API了,不过说要很到的空间,这个我有点慌张的,因为到现在我都不知道那个板子有多少的空间来放东西,反正我感觉是很小的,最近发现他的空间真的很小,大概是5m的空间,不过幸好他还是支持SDcard和U盘,不过这个那个时候也没想,觉得QT移植谁知道会发生什么错误呢。。。。那个时候就直接放弃了这个想法

第二个就是关于framebuffer编程了,我觉得这就体现了LINUX的优越之处了,把什么都看作文件,都可以出操作文件的手段来操作硬件....

关于framebuffer这个编程我也不想多说什么,其实蛮简单的,基本很固定的操作。还有就是关于jpeg库移植,网上有很多关于这个方面的教程,而且这个库的编译与移植问题也不是很大,再说它的使用也是很简单的。

这个程序我花了一天写完的,又花了两天想把他写的更加好看,能重复利用,因为真的要考虑以后忘里面填写的其他功能....所以花时间想写的好一点,不过基本还是很丑陋,因为在我一个一个模块写的过程,发现最后连接起来的时候n多error,让我很郁闷,而且这些问题真的是我没有遇见过的..所以最后还是放弃了大部分的重构。

不过上个星期老师说让我实现视频的播放,这个功能我也觉得难度很大啊,哎...我也没有什么想法,所以一直拖着....不过也不是什么事情都没有做,花了两天的时间看了自己的书藉,分别是<C专家编程>和国人的一本<系统程序员成长计划>,我觉得这两本书偏向的方面不一样,看<C专家编程>会让你懂得更多,但是真的如果说对你的编程能力有多少提高,我觉得没有,毕竟这个是要靠多写锻炼出来的,但是这本书真的很经典,因为他让你在写程序的时候了然于空的感觉...

而国人的那本书我觉得就是一本可以锻炼你编程水平的书,有的人写程序很多年,可是水平依然很水,比如我....惭愧啊....哈哈...它像一本让你成为高手的书籍,你使用它就必须要按他去做,不过看的太快,看一点就把他给你的任务完成,然后在往下看...他先教你方法,然后再让你去学习思考,反正我觉得这个书对于我来说真的很合适啊...

两天看书,后面的时间我就把我上次写的framebuffer 代码重新重构了一下,这个词我还是昨天才知道,叫做重构,好像的意思是对别人的代码进行重新封装之类的。做过重构以后让我更加的了解了重构的难的...我还是自己的code,如果是别人的code让就是一件很让人郁闷的事情了。


下面就贴一下我的code,有什么要改进的要说哦....(额...代码竟然在虚拟机中....郁闷....开了一下虚拟机,卡了我10min啊)

framebuffer.h<这部分主要是包含了对framebuffer文件的处理>

#ifndef FREAMBUFFER_H 
#define FRAMEBUFFER_H

struct _Fb0;
typedef struct _Fb0 Fb0;

Fb0* Fb0_create();
int Fb0_open(Fb0 *thiz);
int Fb0_destory(Fb0 *thiz);
int Fb0_get_info(Fb0 *thiz);
int Fb0_mmap(Fb0 *thiz);
int Fb0_unmmap(Fb0 *thiz);
int Fb0_display(Fb0 *thiz,unsigned char *pdata);


#endif

framebuffer.c

#include <stdio.h>
#include <linux/fb.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <sys/types.h>
#include <errno.h>
//#include "test.h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值