专栏首页用户1880875的专栏计算机实验室之树莓派:课程 6 屏幕01

计算机实验室之树莓派:课程 6 屏幕01

欢迎来到屏幕系列课程。在本系列中,你将学习在树莓派中如何使用汇编代码控制屏幕,从显示随机数据开始,接着学习显示一个固定的图像和显示文本,然后格式化数字为文本。假设你已经完成了 OK 系列课程的学习,所以在本系列中出现的有些知识将不再重复。

第一节的屏幕课程教你一些关于图形的基础理论,然后用这些理论在屏幕或电视上显示一个图案。

1、入门

预期你已经完成了 OK 系列的课程,以及那个系列课程中在 gpio.ssystemTimer.s 文件中调用的函数。如果你没有完成这些,或你喜欢完美的实现,可以去下载 OK05.s 解决方案。在这里也要使用 main.s 文件中从开始到包含 mov sp,#0x8000 的这一行之前的代码。请删除这一行以后的部分。

2、计算机图形

正如你所认识到的,从根本上来说,计算机是非常愚蠢的。它们只能执行有限数量的指令,仅仅能做一些数学,但是它们也能以某种方式来做很多很多的事情。而在这些事情中,我们目前想知道的是,计算机是如何将一个图像显示到屏幕上的。我们如何将这个问题转换成二进制?答案相当简单;我们为每个颜色设计一些编码方法,然后我们为在屏幕上的每个像素保存一个编码。一个像素就是你的屏幕上的一个非常小的点。如果你离屏幕足够近,你或许能够辨别出你的屏幕上的单个像素,能够看到每个图像都是由这些像素组成的。

将颜色表示为数字有几种方法。在这里我们专注于 RGB 方法,但 HSL 也是很常用的另一种方法。

随着计算机时代的进步,人们希望显示越来越复杂的图形,于是发明了图形卡的概念。图形卡是你的计算机上用来在屏幕上专门绘制图像的第二个处理器。它的任务就是将像素值信息转换成显示在屏幕上的亮度级别。在现代计算机中,图形卡已经能够做更多更复杂的事情了,比如绘制三维图形。但是在本系列教程中,我们只专注于图形卡的基本使用;从内存中取得像素然后把它显示到屏幕上。

不管使用哪种方法,现在马上出现的一个问题就是我们使用的颜色编码。这里有几种选择,每个产生不同的输出质量。为了完整起见,我在这里只是简单概述它们。

在本教程中,我们将从使用高色值开始。这样你就可以看到图像的构成,它的形成过程清楚,图像质量好,又不像真彩色那样占用太多的空间。也就是说,显示一个比较小的 800x600 像素的图像,它只需要小于 1 MiB 的空间。它另外的好处是它的大小是 2 次幂的倍数,相比真彩色这将极大地降低了获取信息的复杂度。

树莓派和它的图形处理器有一种特殊而奇怪的关系。在树莓派上,首先运行的事实上是图形处理器,它负责启动主处理器。这是很不常见的。最终它不会有太大的差别,但在许多交互中,它经常给人感觉主处理器是次要的,而图形处理器才是主要的。在树莓派上这两者之间依靠一个叫 “邮箱” 的东西来通讯。它们中的每一个都可以为对方投放邮件,这个邮件将在未来的某个时刻被对方收集并处理。我们将使用这个邮箱去向图形处理器请求一个地址。这个地址将是一个我们在屏幕上写入像素颜色信息的位置,我们称为帧缓冲,图形卡将定期检查这个位置,然后更新屏幕上相应的像素。

保存 帧缓冲(frame buffer)给计算机带来了很大的内存负担。基于这种原因,早期计算机经常作弊,比如,保存一屏幕文本,在每次单独刷新时,它只绘制刷新了的字母。

3、编写邮差程序

接下来我们做的第一件事情就是编写一个“邮差”程序。它有两个方法:MailboxRead,从寄存器 r0中的邮箱通道读取一个消息。而 MailboxWrite,将寄存器 r0 中的头 28 位的值写到寄存器 r1 中的邮箱通道。树莓派有 7 个与图形处理器进行通讯的邮箱通道。但仅第一个对我们有用,因为它用于协调帧缓冲。

消息传递是组件间通讯时使用的常见方法。一些操作系统在程序之间使用虚拟消息进行通讯。

下列的表和示意图描述了邮箱的操作。

表 3.1 邮箱

原文链接:https://zhuanlan.zhihu.com/p/56882014

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 7月Top10树莓派改装项目:跨界改装无人机、GPS接收器、Game Boy

    树莓派(Raspberry Pi)由英国树莓派基金会开发,希望通过低价硬件和免费软件来促进学校的基本计算机科学教育。

    新智元
  • 你们想要「打造」的树莓派电脑,刚发布了官方版:性能更强大,只卖70美元

    可编程计算机「大厂」树莓派的产品一直以便宜好用著称,但对于从未开过机箱,装过内存条的电脑新手们来说,上来就给你一块主板有时会显得难以上手。今天发布的 Raspb...

    代码医生工作室
  • 1:1还原,自制树莓派复古街机:教程已开源

    八九个月前,来自 Combient Mix 的数据科学家 Max Fischer 开始了一个从头开始构建全尺寸街机的项目,这台街机的核心计算设备就是树莓派。

    机器之心
  • 树莓派4b性能怎么样,值不值得买

    树莓派自2012问世以来,从第一款Pi 1到现在的Pi 4经历了4个大版本,在RAM大小和外围设备支持方面都发生了很大的变化。那么2019年千呼万唤始出来的树莓...

    用户6968133
  • 基于树莓派以及语音与人脸识别的迎宾机器人交互系统开发计划(已完结github中)

    作品未来设想:并不是制作一个能自由行走的智能管家机器人之类的,那样的科技以及成本是不一个寒假可以ko!我们希望创造出智能机器人的头。

    我在鹅厂做安全
  • 如何组装、搭建一台永久运行的个人服务器?

    由于本人在这段时候,看到了一个叫做树莓派的东东,初步了解之后觉得很有意思,于是想把整个过程记录下来。

    Leetcode名企之路
  • 夏日专属:我在西瓜里装了个口袋妖怪!

    不过,如果你去超市买水果的时候,看到一个小哥在西瓜专区站了半个小时愣是没换个姿势,你的表情可能也会和这些路人一样,认为自己怕不是遇到了一个傻子:

    大数据文摘
  • Scratch:人人都能玩转的编程指南

    微软创始人比尔.盖茨曾说过孩子编程要从小开始,从兴趣出发,通过计算机编程来培养创造力,未来我们的下一代才具有竞争力。为此,欧美发达国家掀起一股青少年学习计算机编...

    博文视点Broadview
  • “为了看星星,我自己做了一个行星观测器”

    观测器从 NASA 获取已知行星的坐标数据,然后可以自动调整角度,聚焦这颗行星,让我们很方便地观测它们。

    树枝990
  • 用树莓派,我做了一台和红牛罐儿一样高的迷你iMac

    在树莓派的帮助下,计算机正发展的红红火火,因为树莓派能将大量的计算能力整合到一块体型不大的硅片中。最近的一次升级中,它甚至获得了可观的RAM。

    CDA数据分析师
  • 实践干货 | 自动化视觉跟踪

    在之前的某个教程里,我们探讨了如何控制Pan/Tilt Servo设备来安置一个PiCam(树莓派的相机)。这次,我们将使用你的设备来帮助相机自动地跟踪某种颜色...

    AI研习社
  • 树莓派随身工具箱:中间人劫持获取控制权

    上文讲解了树莓派随身工具箱的环境搭建,这段时间又对其进行了一些优化,主要是从便携美观上面改进。同时,在实际使用中发现了一些问题,并做了小小的改动。

    FB客服
  • 树莓派4 rt-thread实现SPI屏人机交互界面

    树莓派4的rt-thread一直在不断的更新,充分挖掘可以树莓派底层硬件的特性,同时借助各种外设,使得树莓派4成为一个更加适合学习嵌入式开发,验证各种外设功能,...

    bigmagic
  • 树莓派综合项目3:AI视觉机械臂小车(一)蜂鸣器

    在树莓派项目2中,我学到了很多东西,主要是通过实践掌握了树莓派小车的无线电控制和自动化避障控制,虽然不是特别的高深和难懂,但是增强了我学习的动力和信心,万丈高楼...

    张国平
  • 极客DIY:制作一款智能家用温控器(PART 2)

    引文 在上一部分,我主要是对于外壳以及如何利用树莓派完成了一些简单的计划任务,下面将会对其余的计划任务进行制作。 写在前面 这里主要是需要了解作者用到了两个部分...

    FB客服
  • 树莓派使用Android系统

    这篇文章详细记录了下怎么在树莓派上安装安卓系统,使用了LineageOS版本的Android。

    用户6968133
  • 如何制作一款智能家用温控器?(part 1)

    引文 我现在想要利用手里的树莓派制作一款WiFi智能温控器,这样我就可以将设备接上电源安装在大厅,然后随时可以监控室内温度,同时这款DIY制作的温控器价格比较便...

    FB客服
  • 想自己搭建服务器,永久运行网站?一个 U 盘大小的树莓派就够了!

    用我的话理解就是树莓派就是一台主机,你可以外接显示器,键盘鼠标,u盘等等外设,因为它体积很小,而且又有很多串口和外接的口,可以直接调用很多底层硬件。

    全栈程序员站长
  • 树莓派基础实验29:I2C LCD1602实验

       众所周知,虽然液晶显示器和其他显示器大大的丰富了人机交互,但他们有一个共同的弱点。当它们连接到控制器时,需要占用大量的IO口,但是一般的控制器没有那么多的...

    张国平

扫码关注云+社区

领取腾讯云代金券