#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. Maven项目jar和war部署

    Spring Boot可以打成jar包,也可以打成war包.启动方式类有main函数做为入口,比如:java -jar xxx.jar.Spring Boot默认内置Tomcat服务器,当然也可以将w ...

  2. 基于vue上传base64图片,通过canvas压缩base64

    其实和vue关系不大,和我们之前做上传压缩性质是一样的 当然下面的代码是没有处理ios横屏拍照的bug的 有兴趣的可以多搜一下  网上都有相应的解答 .. var that = this if (e. ...

  3. js中或者vue中 Object.assign()用法详解

    Object.assign()是浅拷贝. 合并对象 var o1 = { a: 1 }; var o2 = { b: 2 }; var o3 = { c: 3 }; var obj = Object. ...

  4. 【NOIP2016提高A组8.11】自然数

    题目 分析 \(O(n)\)求出mex(1,i)(1<=i<=n): 虽然0<=ai<=10^9,但只有n个数,所以mex一定小于等于n for(long long j=1;j ...

  5. logstash+redis收集负载均衡模式下多台服务器的多个web日志

    一.logstash的简介 一般我们看日志来解决问题的时候要么 tail+grep 要么 把日志下载下来再搜索,可以应付不多的主机和应用不多的部署场景.但对于多机多应用部署就不合适了.这里的多机多应用 ...

  6. Intraweb IIS发布,数据连接问题

    日前,用IW做了小东西,开始用单独的执行程序发布,一切都没有什么问题,但是发布到正式环境中,用windows IIS发布,怎么也获取不了程序所在的物理路径,而后看了万一的博客,试了一下程序能正常运行, ...

  7. handy源码阅读(六):udp类

    分为UdpServer类和UdpConn类. struct UdpServer : public std::enable_shared_from_this<UdpServer>, priv ...

  8. echart--如何自定义提示框的内容和样式实例

    图例的大概样子 具体设置代码为:

  9. 开发 .swan 文件

    这部分是每个智能小程序页面的展现模板,类似于 Web 开发中的 HTML ,SWAN 模板中使用的标签均为 SWAN 组件规定的标签. <view s-for="item in ite ...

  10. Laya 使list渲染支持分帧的思路

    Laya 使list渲染支持分帧的思路 @author ixenos 2019-09-06 1.由于Laya的list渲染时没有做分帧处理,只做了延迟帧处理,所以当单页元素较多时,会有大量运算卡帧的情 ...