LCD应用程序测试
#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应用程序测试的更多相关文章
- pc端和android端应用程序测试有什么区别?(ps面试题)
pc端和android端应用程序测试有什么区别?(ps面试题) [VIP7]大连-凭海临风(215687736) 2014/4/10 8:56:171.测试环境不同PC平台一般都是windows an ...
- 自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试
关于 Redis ,下面来自百度百科: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set( ...
- 自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试(转)
关于 Redis ,下面来自百度百科: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set( ...
- 十大免费移动程序测试框架(Android/iOS)
十大免费移动程序测试框架(Android/iOS) 概述:本文将介绍10款免费移动程序测试框架,帮助开发人员简化测试流程,一起来看看吧. Bug是移动开发者最头痛的一大问题.不同于Web应用程序开发, ...
- Selenium也是一个用于Web应用程序测试的工具
Selenium也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Firefox.Mozilla Suite ...
- iOS 程序测试、程序优化、提交前检测
1. 数据显示如果是数值要考虑到0的情况 2. 数据变化对前一个页面及相关页面的影响,也即数据同步问题.如果是有其它设备改变数据,那数据请求就应该在willappear(视图将要显示事件)进行请求,以 ...
- 互联网App应用程序测试流程及测试总结
互联网App应用程序测试流程及测试总结 1. APP测试基本流程 1.1流程图 仍然为测试环境 Pass 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日 ...
- inner join on (程序测试验证结果。) _学习贴
inner join on 两张表:机制就是第一张表的每一条数据,都会去和第二章表的每一条数据 依次进行匹配.匹配成功,就会显示出来. (程序测试验证结果.) 数据库连接 1 对 1 create ...
- 第一次java程序测试感受
第一次JAVA程序设计测试,检验了一个暑假的成果.显而易见,我做的并不是很好,程序最起码的输入输出以及方法的定义还是没有问题的,但是考到了文件输入输出便看出来了.对于文件的输入输出,虽然我预习到那里, ...
随机推荐
- 组件通信 Provide&&inject
在父组件中利用Provide 注入数据,在所有的子组件都可以拿到这个数据 可以在vue 中用来刷新页面 <!DOCTYPE html> <html lang="en&quo ...
- vue项目中打包background背景路径问题
项目中图片都放在src/img文件夹,img和background-image引用都用相对路径,即../../这种形式 在打包build的设置路径assetsPublicPath: ‘./‘,然后那些 ...
- P4716 【模板】最小树形图
题意 说一下我对朱刘算法的理解: 首先我们考虑树形图的性质:每个点除了根节以外都含有一条入边. 因此我们可以有一个贪心的想法:对每个点(除了根节点)找到一条最短的入边,但是这样会出现环,如下图: 我们 ...
- MongoDB的安装以及启动
1.首先什么是MongoDB? MongoDB是一个基于分布式文件存储的数据库,是由c++语言编写的.为web应用提供可扩展的高性能数据的存储方案.是一个介于关系型数据库和非关系型数据库 的中间产品, ...
- shell练习--PAT题目1002:写出这个数(失败案例)
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1. 输出格式: 在一行内输出 n 的 ...
- springboot日期转换器
注:该功能并非springboot特有的功能,springmvc同样具有 一.使用方法 创建一个DateConverter类实现Converter接口 注:importorg. ...
- python-jsonpath、findall返回值提取
findall import re """ "d"表示取数字0-9, "D"表示不要数字, "w"在正则里面代 ...
- react native 之 redux 使用套路
redux是什么?他是一个state容器 redux的运作方式是怎样的? 接入方式: 1. npm install 下列内容: npm install --save redux npm install ...
- 863D - Yet Another Array Queries Problem(思维)
原题连接:http://codeforces.com/problemset/problem/863/D 题意:对a数列有两种操作: 1 l r ,[l, r] 区间的数字滚动,即a[i+1]=a[i] ...
- Windows 搭建Hadoop 2.7.3开发环境
1.安装配置Java环境 1.1.安装Windows版本的jkd应用程序 当前的系统环境是64位Windows 7,因此下载64位JDK,下载地址:http://download.oracle.com ...