#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> #include <sys/mman.h> #include <linux/fb.h> #define FB_DEV "/dev/fb0" #define SCREEN_RED 0xFF0000
#define SCREEN_GREEN 0x00FF00
#define SCREEN_BLUE 0x0000FF void draw_point(unsigned int x,unsigned int y,unsigned int color);
void draw_line(unsigned int x0,unsigned int y0,unsigned int x1,unsigned int y1,unsigned int color); static struct fb_var_screeninfo varScreenInfo = {};
static struct fb_fix_screeninfo fixScreenInfo = {};
static unsigned int *pfb_buffer = NULL;
int main(void)
{
int ret = -;
int fd = -;
fd = open(FB_DEV, O_RDWR);
if(fd < )
{
perror("open");
close(fd);
return -;
}
ret = ioctl(fd, FBIOGET_FSCREENINFO,&fixScreenInfo);
if(ret < )
{
perror("ioctl");
close(fd);
return ret;
} ret = ioctl(fd, FBIOGET_VSCREENINFO,&varScreenInfo);
if(ret < )
{
perror("ioctl");
close(fd);
return ret;
}
printf("smem_len = %d\n",fixScreenInfo.smem_len);
printf("xres = %d; yres = %d\n",varScreenInfo.xres,varScreenInfo.yres);
printf("xres_virtual = %d; yres_virtual = %d\n",varScreenInfo.xres_virtual,varScreenInfo.yres_virtual); pfb_buffer = mmap(NULL, fixScreenInfo.smem_len, PROT_READ|PROT_WRITE, MAP_SHARED,fd,);
printf("pfb_buffer = %p\n",pfb_buffer);
draw_line(,,,,SCREEN_RED); close(fd);
return ;
} void draw_point(unsigned int x,unsigned int y,unsigned int color)
{
x %=varScreenInfo.xres_virtual;
y %=varScreenInfo.yres_virtual;
// printf("x = %d y = %d %p\n",x,y,(pfb_buffer + x + (y*varScreenInfo.xres_virtual)));
*(pfb_buffer + x + y*varScreenInfo.xres_virtual) = color;
}
void draw_line(unsigned int x0,unsigned int y0,unsigned int x1,unsigned int y1,unsigned int color)
{
unsigned int x=,y=;
float setp = (y1-y0)/(float)(x1-x0);
for(x=x0,y=y0;x<x1;x++)
{
draw_point(x,y,color);
y = y0+setp*(x-x0) ;
}
}

一. OS下操作LCD

1.1. 在应用中通过framebuffer操作LCD

1.2. framebuffer帧缓冲(简称fb)是linux内核中虚拟出的一个设备

1.3. framebuffer向应用层提供一个统一标准接口的显示设备

1.4. 从驱动来看,fb是一个典型的字符设备,而且创建了一个类/sys/class/graphics

二. 操作步骤

2.1. 设备文件 /dev/fbx。 其中x代表0,1,2。。。

2.2. 获取设备信息 #include <linux/fb.h>

2.3. mmap做映射

2.4. 填充framebuffer

三. 应用层开发注意事项

3.1. 使用mmap函数时,参数int prot一定是PROT_READ|PROT_WRITE,我开发时笔误写成PROT_READ|PROT_READ,结果一直Segmentation fault。

3.2. *(pfb_buffer + x + y*varScreenInfo.xres_virtual) = color;这里地址不用转换为char*进行运算

LCD应用程序测试的更多相关文章

  1. pc端和android端应用程序测试有什么区别?(ps面试题)

    pc端和android端应用程序测试有什么区别?(ps面试题) [VIP7]大连-凭海临风(215687736) 2014/4/10 8:56:171.测试环境不同PC平台一般都是windows an ...

  2. 自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试

    关于 Redis ,下面来自百度百科: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set( ...

  3. 自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试(转)

    关于 Redis ,下面来自百度百科: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set( ...

  4. 十大免费移动程序测试框架(Android/iOS)

    十大免费移动程序测试框架(Android/iOS) 概述:本文将介绍10款免费移动程序测试框架,帮助开发人员简化测试流程,一起来看看吧. Bug是移动开发者最头痛的一大问题.不同于Web应用程序开发, ...

  5. Selenium也是一个用于Web应用程序测试的工具

    Selenium也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Firefox.Mozilla Suite ...

  6. iOS 程序测试、程序优化、提交前检测

    1. 数据显示如果是数值要考虑到0的情况 2. 数据变化对前一个页面及相关页面的影响,也即数据同步问题.如果是有其它设备改变数据,那数据请求就应该在willappear(视图将要显示事件)进行请求,以 ...

  7. 互联网App应用程序测试流程及测试总结

    互联网App应用程序测试流程及测试总结 1. APP测试基本流程 1.1流程图 仍然为测试环境 Pass 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日 ...

  8. inner join on (程序测试验证结果。) _学习贴

    inner join on  两张表:机制就是第一张表的每一条数据,都会去和第二章表的每一条数据 依次进行匹配.匹配成功,就会显示出来. (程序测试验证结果.) 数据库连接 1 对 1 create ...

  9. 第一次java程序测试感受

    第一次JAVA程序设计测试,检验了一个暑假的成果.显而易见,我做的并不是很好,程序最起码的输入输出以及方法的定义还是没有问题的,但是考到了文件输入输出便看出来了.对于文件的输入输出,虽然我预习到那里, ...

随机推荐

  1. Linux中查看某 个软件的安装路径

    本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...

  2. Java开发神器——MyEclipse CI 2019.4.0 全新发布(附下载)

    MyEclipse线上特惠,在线立享专属折扣!火热开启中>> MyEclipse 2019的升级版本中,推出对Java 11的支持.性能改进及新的连接器等. [MyEclipse CI 2 ...

  3. Spring Cloud(1)相关概念

    单点系统架构 传统项目架构 传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一个项目中. 优点:适合于个人或者小团队开发,不适合大团队开发. 分布式项目架构 根据业务需求进行拆分成N个子 ...

  4. 【机器人M号】题解

    题目 题目描述 3030年,Macsy正在火星部署一批机器人. 第1秒,他把机器人1号运到了火星,机器人1号可以制造其他的机器人. 第2秒,机器人1号造出了第一个机器人--机器人2号. 第3秒,机器人 ...

  5. C#与.NET Framework c#编程语言,和java是一样的。(c#,java) -->javaweb,asp.net

  6. Comet OJ - Contest #6 D. 另一道树题 并查集 + 思维 + 计数

    Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...

  7. [POJ1637]Sightseeing tour:混合图欧拉回路

    分析 混合图欧拉回路问题. 一个有向图有欧拉回路当且仅当图连通并且对于每个点,入度\(=\)出度. 入度和出度相等可以联想到(我也不知道是怎么联想到的)网络流除了源汇点均满足入流\(=\)出流.于是可 ...

  8. Oracle Fetch子句

    Oracle Fetch子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,将学习如何使用Oracle FETCH子句来限制查询返回的行数. ...

  9. vue-cli目录结构介绍

    一个vue-cli的项目结构如下: 文件结构细分: 1.build——[webpack配置] build文件主要是webpack的配置,主要启动文件是dev-server.js,当我们输入npm ru ...

  10. Maps.newHashMap 和 new HashMap的区别

    区别: (1)Map<String, Object> result = new HashMap<String,Object>(); 这种是java原生API写法,需要你手动加泛 ...