news 2026/7/31 23:22:07

飞凌嵌入式ElfBoard-LCD显示图片(bmp)编程示例之基础概念介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
飞凌嵌入式ElfBoard-LCD显示图片(bmp)编程示例之基础概念介绍

介绍framebuffer

Framebuffer 字面意思就是帧缓存的意思,即显存,里面保存着一帧图像。事实上,对于嵌入式系统而言。没有真正意义上的显存,Framebuffer 是通过内存模拟出来的。

1.LCD FrameBuffer里的若干字节表示(具体根据驱动适配),LCD屏幕上的一个像素点。

1)RGB888:32bpp,占4字节,分别是A8、R8、G8、B8,一般只用其中低24位,高8位表示透明度。

2)RGB565:16bpp,占2字节,分别是R5、G6、B5,比较常用的一种颜色

3)RGB555:很少用。

假设LCD屏幕分辨率是800x600,每个像素占4字节,那么framebuffer 大小就是:

800x600x4=1920000字节

2.fb与应用程序的互交

对于应用程序而言,它和其它的设备并没有什么区别,用户可以把fb看成是一块内存,既可以向内存中写数据,也可以读数据。fb的显示缓冲区位于内核空间。应用程序可以把此空间映射到自己的用户空间,再进行操作。

3.在应用程序中,操作/dev/fbn的一般步骤

1)打开/dev/fbn设备文件。

2)用ioctl操作取得当前显示屏幕的参数,如屏幕的分辨率、每个像素点的比特数。根据屏幕的参数可计算屏幕缓冲区的大小。

3)用mmap函数,将屏幕缓冲区映射到用户空间。

4)映射后就可以直接读/写屏幕缓冲区,进行绘图和图片显示。

介绍mmap

mmap概念

存储映射 I/O这种高级 I/O方式,它的一个非常经典的使用场景便是用在 Framebuffer 应用编程中。通过 mmap()将显示器的显示缓冲区(显存)映射到进程的地址空间中,这样应用程序便可直接对显示缓冲区进行读写操作。

为什么这里需要使用存储映射 I/O 这种方式呢?其实使用普通的 I/O 方式(譬如直接 read、write)也是可以的,只是,当数据量比较大时,普通 I/O 方式效率较低。假设某一显示器的分辨率为 1920 * 1080,像素格式为ARGB8888,针对该显示器,刷一帧图像的数据量为 1920 x 1080 x 32 / 8 = 8294400 个字节(约等于 8MB),这还只是一帧的图像数据,而对于显示器来说,显示的图像往往是动态改变的,意味着图像数据会被不断更新。

在这种情况下,数据量是比较庞大的,使用普通 I/O 方式必然导致效率低下,所以才会采用存储映射I/O 方式。

用法

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);

下面介绍一下 mmap 函数的各个参数作用:

addr:指定映射的虚拟内存地址,可以设置为 NULL,让 Linux 内核自动选择合适的虚拟内存地址。

length:映射的长度;

prot:映射内存的保护模式,可选值如下:

PROT_EXEC:可以被执行;

PROT_READ:可以被读取;

PROT_WRITE:可以被写入;

PROT_NONE:不可访问;

flags:指定映射的类型,常用的可选值如下:

MAP_FIXED:使用指定的起始虚拟内存地址进行映射;

MAP_SHARED:与其它所有映射到这个文件的进程共享映射空间(可实现共享内存);

MAP_PRIVATE:建立一个写时复制(Copy on Write)的私有映射空间;

MAP_LOCKED:锁定映射区的页面,从而防止页面被交换出内存;

fd:进行映射的文件句柄;

offset:文件偏移量(从文件的何处开始映射);

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 23:17:19

2027国际消费电子展预定AI算力专区

2027国际消费电子展(赛逸展)专属AI算力展区展位预定正式启动,预定入驻企业可提前预约亦庄5000P公共算力平台测试权限,完成产品大模型训练、算法适配、硬件仿真调试,三星等国际科技企业已规划携AI算力硬件产品入驻&…

作者头像 李华
网站建设 2026/7/31 23:13:57

改进灰狼算法在V2G微电网调度中的优化应用

1. 项目背景与核心挑战微电网作为分布式能源系统的重要实现形式,正在经历从简单供电单元向智能能量管理系统的转型。我去年参与的一个海岛微电网项目就深刻体现了这一点——当风光发电占比超过40%时,传统调度方法已经无法应对功率波动的冲击。这个现实痛…

作者头像 李华
网站建设 2026/7/31 23:11:48

Sablono与Hiccup对比:为什么它是React模板的更好选择?

Sablono与Hiccup对比:为什么它是React模板的更好选择? 【免费下载链接】sablono Lisp/Hiccup style templating for Facebooks React in ClojureScript. 项目地址: https://gitcode.com/gh_mirrors/sa/sablono Sablono是一个为Facebook React框架…

作者头像 李华
网站建设 2026/7/31 23:10:31

免费音乐生成Minimax实测,说唱流行Lofi一键创作

# 免费音乐生成Minimax实测:说唱、流行、Lofi一键创作,真能省掉编曲钱?## 引言AI音乐生成在2024年迎来了爆发,从Suno到Udio,专业级的生成质量已经让不少音乐创作者感到压力。但也正因为这些工具的门槛(付费…

作者头像 李华
网站建设 2026/7/31 23:10:05

Style2Paints V4.5:终极AI草图上色工具完整指南

Style2Paints V4.5:终极AI草图上色工具完整指南 【免费下载链接】style2paints sketch style paints :art: (TOG2018/SIGGRAPH2018ASIA) 项目地址: https://gitcode.com/gh_mirrors/st/style2paints 还在为线稿上色而烦恼吗?你是否曾花费数小时…

作者头像 李华
网站建设 2026/7/31 22:57:30

测试转大模型:为什么权限与日志成了我接手的“鬼门关”?

聊《我用测试经验做了次 AI 项目,最先失效的是旧方法》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。 摘要 摘要:从传统测试到大模型工程,我发现最难的并非模型调优&#xff0…

作者头像 李华