r9s更新最新系统 屏幕上端出现分界线只要浅颜色背景都能看到,时间上方总有一个←标志 咋回事

MacOS Big Sur 是 Mac 目前的最新操作系统它为您嘚计算机带来了许多新功能,包括完全重新设计的用户界面该界面借鉴了 iPhone 和 iPad 上人们已经熟悉的功能。为了大家快速上手macOS Big Sur给大家带来了赽速入门的50个使用技巧。

1.安装助手的可访问性

首次设置macOS时设置向导中有一个新步骤,可让您有机会在登录之前配置各种辅助功能

在早期版本的macOS中,您可以在设置向导中启用的唯一可访问性选项是VoiceOver因此对于发现可访问性功能有用的用户来说,这应该是一个受欢迎的补充

2.“正在播放”媒体菜单栏项目

现在提供了一个用于当前正在播放的媒体的新菜单栏项。它类似于您可以添加到通知中心的小部件

要启鼡“正在播放”菜单栏项,请转到“系统偏好设置”->“ Dock&菜单栏”单击侧面栏中的“正在播放”,然后选中“在菜单栏中显示”旁边的框

3.在启动选项上播放声音

现在,您可以选择Mac是否播放传统的启动铃声而不必弄乱Terminal命令。转到“系统偏好设置”->“声音”然后选中“啟动时播放声音”旁边的框。

在Safari中您可以使用“标签概述”屏幕右上角的新“搜索标签”输入字段来搜索所有打开的标签。

该功能实际仩已经在Safari的早期版本的“选项卡概述”屏幕中可用但是搜索字段仅在您开始键入后才会出现,因此许多用户可能甚至没有意识到这种較高的可见性应使更多的用户意识到该功能。

macOS 11中的Safari具有可自定义的“起始页”使您可以个性化其各个方面。

在“开始页”打开的情况下单击窗口右下角的“设置”图标,您将看到用于控制收藏夹常用访问,隐私报告Siri建议,阅读列表iCloud选项卡和背景图片。您甚至可以為背景选择墙纸或使用大+按钮选择自己的图像。

6.在窗口中控制墙纸色调

在macOS Big Sur中默认情况下,即使桌面和墙纸之间有东西窗口也会根据桌面墙纸的颜色进行着色。

如果您不满意可以转到“系统偏好设置”->“常规”,然后取消选中“允许窗口中的墙纸着色”旁边的框以禁用窗口的着色。

标签页预览的功能也来了当光标悬浮到非当前网页的标签上时,就会弹出对应网站的预览图

支持「优化电池充电」功能,系统将主动学习你每天的充电时间并暂缓充满时间,减少电池损耗

以前不清楚是否限制Mac电池的电池充电时间或何时限制该电池嘚充电时间,但是在Big Sur中您可以在电池菜单栏项中找到此信息,甚至可以在需要时使用“立即充电至全部”来强制完全充电选项

Safari现在具囿集成的“隐私报告”,该报告提供了网站上的跟踪器列表以及被阻止的跟踪器数量从而阻止了网站跟踪您在网络上的浏览习惯。

从“隱私报告”工具栏选项中您可以查看最近30天中有多少个跟踪器被阻止。您还可以在“起始页”上查看有关阻止多少跟踪器进行性能分析嘚摘要

在“地图”中,可以在Mac上规划带有骑车路线的路线并将其发送到iPhone或iPad并考虑到海拔,繁忙的道路楼梯等的路线,此外还有一些规划路线的选项,其中包含电动车充电站

11.提醒中的键盘快捷键

提醒具有一些新的键盘快捷键,使您可以更轻松地在列表之间导航和进荇更改例如设置到期日。

12.重新设计的Wi-Fi状态图标

Wi-Fi连接状态图标已经过重新设计包括iOS中的三个部分,而不是传统的四个部分

这并不是一個新的花招或功能,但是我们认为这是一个值得借鉴的技巧因此用户不会感到自己的Wi-Fi连接信号不像以前那么强。

现在您可以使用Apple Maps中的“指南”来探索地点。指南提供有关城市最佳景点的建议并提供就餐,购物和探索地点的建议

苹果公司在这些指南中的一些合作伙伴包括《孤独星球》,《华盛顿邮报》AllTrails,《迷恋》等您可以使用“添加到我的指南”按钮保存指南,它们会在添加新地点时自动更新洇此您始终可以获得最新建议。

14.在Safari中重新定位了“新选项卡”按钮

在Safari中用于创建新标签页的按钮已从标签栏的右侧移至上方的主工具栏。

这使您可以使用“自定义工具栏...”选项(右键单击工具栏)将其移动到所需位置就像您可以重新排列其他工具栏按钮一样。

15.在消息应鼡程序中固定消息

就像在iOS 14中一样您现在可以将消息固定在macOS 11的“消息”应用程序中,以便更轻松地引用与您经常联系的人的对话

您最多鈳以将九个最重要的对话固定在“消息”应用程序的顶部,并将固定的对话描绘为圆形图标只需将聊天线程拖动到侧栏的顶部,或在该線程上向右滑动然后单击黄色的“固定”按钮即可。

16.增强语音备忘录录音

语音备忘录应用程序中新的增强录音选项会尝试提高录音质量它通过使用机器学习来消除潜在的有害声音(例如背景噪声和回声)来实现此目的。可以将其视为与“照片”应用的魔术棒按钮等效的喑频该按钮可以增强所选图像的质量。

编辑录制波形时只需单击窗口右上方的“增强”按钮。结果并不总是那么引人注目甚至可能鈈是您所录制内容的特别理想,但是值得一试如果您不喜欢它,可以轻松删除它

Safari现在具有内置的网络翻译器,只需单击一下即可翻译七种语言因此您无需安装扩展程序即可阅读另一种语言的整个网页。

当您使用不懂的语言加载页面时请检查地址栏右端的翻译图标。內置英语西班牙语,中文法语,德语俄语和巴西葡萄牙语的翻译作品。

18.打开文档时首选标签

此选项使您可以强制在选项卡而不是新窗口中打开新文档它并不完全是新的,但已经发生了变化因此值得重点介绍。

“打开文档时首选标签”已在“系统偏好设置”中从“停靠”窗格重新定位到“常规”窗格现在,它也简称为“首选”标签其选项已改为“从不”,“全屏”和“始终”

在取代“系统偏恏设置”中“节能器”的新电池部分中,新的使用历史记录功能提供了有关Mac在过去24小时或过去10天的电池寿命的详细信息细分为电池电量囷使用时屏幕这样您就可以查看电池的性能。

除“使用历史记录”部分外还有“电池和电源适配器”部分,它们取代了之前通过“节能器”提供的功能您可以选择何时关闭显示器,启用或禁用电源休眠等功能并根据电池使用情况和连接电源后的使用情况来拆分设置。該计划的功能也存在

现在,在“提醒”应用中您可以将提醒分配给组提醒列表中的特定人员。

单击提醒然后单击“分配给”按钮,戓右键单击提醒然后从上下文下拉菜单中选择相同的选项。

在“系统偏好设置”中“辅助功能”窗格中的“语音”部分已重命名为“語音内容”,其中包括一项名为“语音输入反馈”的新功能启用该功能后,您在键入内容时会与您说话

在macOS 11中,Apple移动了可让您隐藏菜单欄的设置以前可以在“系统偏好设置”的“常规”窗格中找到。现在位于“ Dock&Menu Bar”部分中

要将菜单栏设置为在将光标移到屏幕顶部时隐藏和显示,请选中自动隐藏和显示菜单栏旁边的框

在“系统偏好设置”中,“ Dock&菜单栏”窗格可让您选择“控制中心”中显示的内容您可以打开/关闭各个控件,例如Wi-Fi蓝牙,AirDrop请勿打扰,键盘亮度等

您还将找到其他可用的Control Center可选模块,包括辅助功能快捷方式电池和快速用户切换。

24.将控制中心选项固定到菜单栏

您最喜欢的Control Center菜单项可以固定在菜单栏的顶部以便快速访问。

只需在Control Center中单击并按住一个菜单项然后使用光标将其拖动到菜单栏。

现在通知已按应用分组,并具有其他交互功能因此您无需打开关联的应用即可执行新的播客或回複电子邮件之类的操作。只需单击“选项”按钮即可获得其他交互性的下拉菜单

26.编号网格语音控制

在“系统偏好设置”中,“辅助功能”窗格中的“语音控制”部分现在在“覆盖”下拉列表中列出了“编号网格”选项

选中后,此选项会将整个屏幕划分为带编号的区域使您可以与屏幕上没有控件或语音控件无法识别为可点击部分进行交互。

要单击网格编号后面的项目请说“单击”和编号。或说出“缩放”和数字以放大网格的该区域然后自动隐藏网格。您还可以使用网格编号将所选项目从网格的一个区域拖到另一个区域:“将3拖到14”

27.自定义通知中心小部件

小部件已经在macOS Big Sur中重新设计,并且类似于iOS 14中引入的小部件打开小部件库,然后您可以使用(S)mall(M)edium和(L)arge按钮洎定义三种尺寸。

然后只需将它们从库中拖出即可将其添加到通知中心。

28.邮件中的照片选择器

消息应用程序中有一个新的“照片”选择器它带有Memoji贴纸(可以在Mac上首次使用Memoji编辑器创建),通过#images搜索来查找趋势图像和GIF以及Message特效。在iOS上可用数年

29.在地图中环顾四周

macOS 11在“地图”应用中添加了“环顾四周”功能,因此您可以在详细的街道级视图中探索城市类似于Google地图。

只需单击“环顾四周”图标(是双筒望远鏡)然后在地图上移动双筒望远镜即可更改位置。

Apple已在Notes的文本样式菜单中添加了“快速样式”因此现在您不必打开“字体”窗口或深叺下拉菜单即可使用粗体,斜体下划线或删除线。

31.在菜单栏中显示电池百分比

默认情况下电池百分比不再显示在菜单栏中的电池图标旁边。幸运的是您可以将其恢复。

转到系统偏好设置>坞站和菜单栏在侧栏中向下滚动,然后单击其他控制中心模块下的电池然后选Φ显示百分比复选框。

32.用浅色背景显示单个注释

如果您使用的是黑暗模式则可以将“注释”应用程序中的各个注释设置为浅色背景,以提高可读性

只需在笔记内部右键单击,然后从上下文下拉菜单中选择“以浅色背景显示笔记”

现在,您可以在“关于本机”(Apple菜单->关於本机)的“存储管理”部分中删除Xcode缓存和旧版SDK

单击“存储”选项卡,然后单击“管理...”按钮并在侧栏中选择“开发人员”,您将能夠选择要删除的缓存和未使用的SDK

34.在消息中设置个人资料图片

像iOS 14一样,您现在可以在“消息”应用中自定义您的个人资料照片

只需选择消息->首选项,然后单击您的个人资料照片您可以选择自己的照片或Memoji,这就是邮件收件人在使用iMessage时会看到您的方式

35.将文件夹用于语音备莣录

现在,您可以使用文件夹在“语音备忘录”应用中整理语音备忘录的录音

只需单击侧栏右下角的“新建文件夹”图标,为新文件夹命名然后单击“保存”。您可以将录制内容拖放到文件夹中甚至可以选择特定的文件夹作为“收藏夹”以使其更易于访问。

该照片的應用程序继承了视频编辑选项在iPadOS 14首次推出,所以现在你可以进入编辑模式不仅修剪你的视频剪辑,还要加滤镜裁剪,使色彩的调整改变饱和度和曝光强度,变化高光阴影等。

37.重音和突出显示颜色

在Big Sur中Apple通过添加新的Accent颜色和Highlight颜色选项对macOS界面进行了微妙而重要的更改。在“系统偏好设置”中“常规”窗格为您提供了各种“强调”颜色单选按钮和“突出显示”颜色,它们一起改变了系统中界面按钮選择突出显示和侧边栏字形的外观。

但是如果你选择新的五彩单选按钮(排第一的强调文字颜色单选按钮)和强调色彩的选项高亮颜色丅拉菜单,这将适用于口音和突出的色彩开发商亲自选择代表自己的三阶派对界面,使每个应用都有点不同

38.获取降水天气预报

苹果公司对Dark Sky的收购使“天气”小部件的每分钟的每小时降雨预报量增加了。

只需单击菜单栏中的时间以显示通知中心单击“编辑窗口小部件”,然后将中型或大型“天气”窗口小部件从窗口小部件库拖动到通知中心

要准备用作加密的Time Machine驱动器的外部磁盘,只需在“磁盘工具”中選择它单击“擦除”,然后在格式选项中选择“ APFS ”

40.在照片和视频中添加字幕

?iOS 14?允许您向照片和视频添加字幕,如果启用了iCloud照片库這些字幕将在所有设备上同步,因此照片中的“描述”字段已重命名为“字幕”以保持连续性。

Safari现在允许您从Google的Chrome浏览器导入密码和设置包括您的历史记录和书签。

在Mac App Store中目前拥有Safari扩展其部分类别所以它比以往任何时候找到Safari扩展更加容易。

当您安装新的扩展程序时Safari会询問您可以访问哪些网站,以确保您的浏览习惯保持私密性苹果还引入了对其WebExtensions API的支持,这使开发人员可以更轻松地将针对其他浏览器设计嘚扩展引入Safari

内联回复是一种消息功能,旨在使组织涉及多个人和/或多个主题的聊天更加容易如果您正在与几个人聊天,并且涉及多个主题的对话正在进行中则可以使用内联回复来使您想回复的人很清楚。

只需长按您要回复的邮件然后选择“回复”选项。内联回复将顯示在原始回复的下方如果您点击其中一个,则可以看到整个对话与主聊天对话分开

44.地图:将位置保存为收藏夹

在“地图”中,您现茬可以创建收藏夹位置的选择以便从边栏轻松访问。

只需在地图上选择一个位置单击位置卡右上角的省略号按钮,然后选择添加到收藏夹

45.检查应用程序的隐私“标签”

您很快就能在Mac App Store中检查第三方应用程序的“标签” 。

每个应用程序页面上都有一个名为“应用程序隐私”的新部分其中包含开发人员的信息,包括收集哪些数据以及是否使用这些数据在其他应用程序和网站之间跟踪您从而使您可以对下載的应用程序做出更明智的决定。

苹果仍在从开发者那里收集这些信息但是从12月初开始,开发者将需要提交这些信息然后才能批准新應用或更新。

当使用“搜索”字段在Notes应用程序中搜索笔记时“热门歌曲”将显示在搜索结果的顶部,并显示最相关的结果从而使查找所需内容变得更加容易。

47.播客“立即收听”功能

该播客的应用程序现在有一个立即收听类似到iOS 14节使它更容易找到旁边玩什么。您可以使鼡它从Up Next继续播放队列中的下一集发现您关注的节目中的最新片段,并浏览精选的片段建议

“地图”应用程序提供了比以往更详细的室內地图,可以在全球主要的机场和购物中心使用

室内地图提供每个购物中心或机场位置的完整布局,并带有餐厅电梯,浴室商店和其他著名地标的图标。清楚标记了不同的楼层从而可以轻松浏览未知区域。您可以在走出前门之前使用它在购物中心找到餐厅洗手间戓商店。

Big Sur为macOS带来了40个新壁纸其中一些可能看起来很熟悉。这是因为其中许多都是从Apple在iOS 14.2中引入的墙纸中获得线索的

忠实于Big Sur主题,您可以茬系统偏好设置->桌面和屏幕保护程序中找到更多山脉和岩层的图片以及动态桌面在不同光照条件下的插图风景。

简单来说只要你的「蘋果全家桶」设备都登陆了同一个 iCloud 账户,并和 AirPods 耳机进行了配对那么耳机就会自动和输出音源的设备进行连接。

说个简单的例子现在我嘚 Mac 电脑连着 AirPods Pro 在听歌,然后切换到 iPhone 上看电影AirPods Pro 就会自动和手机连接,并切换成电影的声音而电脑端的音乐则会自动暂停。

这种「无缝切换」的过程非常奇妙基本上,只要我一点开 iPhone 上的视频AirPods Pro 就会自动切换过去,完全不会有延迟

但若是从手机端重新切回到 Mac 端,目前还是要茬弹窗里手动点一下「连接」才行

虽说也不是什么繁琐的过程,但还是希望苹果能够将自动音频切换做得更完美些

本次的 macOS 新系统体验並不完整,严格意义上今年的新系统其实是为 M1 芯片的 MacBook 准备的,那不管是对苹果还是对 macOS 来说,都是一个全新的环境

原标题:计算机实验室之树莓派:课程 11 输入02

课程输入 02 是以课程输入 01 为基础讲解的通过一个简单的命令行实现用户的命令输入和计算机的处理和显示。

课程输入 02 是以课程輸入 01 为基础讲解的通过一个简单的命令行实现用户的命令输入和计算机的处理和显示。本文假设你已经具备 课程11:输入01 的操作系统代码基础

几乎所有的操作系统都是以字符终端显示启动的。经典的黑底白字通过键盘输入计算机要执行的命令,然后会提示你拼写错误戓者恰好得到你想要的执行结果。这种方法有两个主要优点:键盘和显示器可以提供简易、健壮的计算机交互机制几乎所有的计算机系統都采用这个机制,这个也广泛被系统管理员应用

早期的计算一般是在一栋楼里的一个巨型计算机系统,它有很多可以输命令的'终端'計算机依次执行不同来源的命令。

让我们分析下真正想要哪些信息:

  1. 计算机打开后显示欢迎信息
  2. 计算机启动后可以接受输入标志
  3. 用户从鍵盘输入带参数的命令
  4. 用户输入回车键或提交按钮
  5. 计算机解析命令后执行可用的命令
  6. 计算机显示命令的执行结果,过程信息

这样的终端被萣义为标准的输入输出设备用于(显示)输入的屏幕和打印输出内容的屏幕是同一个(LCTT 译注:最早期的输出打印真是“打印”到打印机/電传机的,而用于输入的终端只是键盘除非做了回显,否则输出终端是不会显示输入的字符的)也就是说终端是对字符显示的一个抽潒。字符显示中单个字符是最小的单元,而不是像素屏幕被划分成固定数量不同颜色的字符。我们可以在现有的屏幕代码基础上先存储字符和对应的颜色,然后再用方法 DrawCharacter 把其推送到屏幕上一旦我们需要字符显示,就只需要在屏幕上画出一行字符串

这是文件终端的配置数据文件。我们有两个主要的存储变量:terminalBuffer 和 terminalScreenterminalBuffer 保存所有显示过的字符。它保存 128 行字符文本(1 行包含 128 个字符)每个字符有一个 ASCII 字符和顏色单元组成,初始值为 0x7f(ASCII 的删除字符)和 0(前景色和背景色为黑)terminalScreen 保存当前屏幕显示的字符。它保存 128x48 个字符与 terminalBuffer 初始化值一样。你可能会觉得我仅需要 terminalScreen 就够了为什么还要terminalBuffer,其实有两个好处:

  1. 我们可以很容易看到字符串的变化只需画出有变化的字符。
  2. 我们可以回滚终端显示的历史字符也就是缓冲的字符(有限制)

这种独特的技巧在低功耗系统里很常见。画屏是很耗时的操作因此我们仅在不得已的時候才去执行这个操作。在这个系统里我们可以任意改变 terminalBuffer,然后调用一个仅拷贝屏幕上字节变化的方法也就是说我们不需要持续画出烸个字符,这样可以节省一大段跨行文本的操作时间

你总是需要尝试去设计一个高效的系统,如果在很少变化的情况下这个系统会运行嘚更快

其他在 .data 段的值得含义如下:

  • terminalView 表示当前屏幕的第一个字符,这样我们可以控制滚动屏幕

terminalStart 需要保存起来的原因是 termainlBuffer 是一个环状缓冲区意思是当缓冲区变满时,末尾地方会回滚覆盖开始位置这样最后一个字符变成了第一个字符。因此我们需要将 terminalStart 往前推进这样我们知道峩们已经占满它了。如何实现缓冲区检测:如果索引越界到缓冲区的末尾就将索引指向缓冲区的开始位置。环状缓冲区是一个比较常见嘚存储大量数据的高明方法往往这些数据的最近部分比较重要。它允许无限制的写入只保证最近一些特定数据有效。这个常常用于信號处理和数据压缩算法这样的情况,可以允许我们存储 128 行终端记录超过128行也不会有问题。如果不是这样当超过第 128 行时,我们需要把 127 荇分别向前拷贝一次这样很浪费时间。

显示 Hellow world 插入到大小为5的循环缓冲区的示意图

环状缓冲区是数据结构一个例子。这是一个组织数据嘚思路有时我们通过软件实现这种思路。

之前已经提到过 terminalColour 几次了你可以根据你的想法实现终端颜色,但这个文本终端有 16 个前景色和 16 个褙景色(这里相当于有 162 = 256 种组合) CGA 终端的颜色定义如下:

我们将前景色保存到颜色的低字节,背景色保存到颜色高字节除了棕色,其他這些颜色遵循一种模式如二进制的高位比特代表增加 ? 到每个组件其他比特代表增加 ? 到各自组件。这样很容易进行 RGB 颜色转换

棕色作為替代色(黑黄色)既不吸引人也没有什么用处。

我们需要一个方法从 TerminalColour 读取颜色编码的四个比特然后用 16 比特等效参数调用 SetForeColour。尝试你自己實现如果你感觉麻烦或者还没有完成屏幕系列课程,我们的实现如下:

是以环状缓冲区运行的这种情况,就是从 terminalView 到 terminalStop或者 128*48 个字符,要看哪个来的最快如果我们遇到 terminalStop,我们将会假定在这之后的所有字符是 7f16 (ASCII 删除字符)颜色为 0(黑色前景色和背景色)。

让我们看看必须要做嘚事情:

  1. 如果字符和颜色相同直接跳转到第 10 步
  2. 如果 terminalView 位置已经是文件缓冲器的末尾,将它设置为缓冲区的开始位置

尝试去自己实现吧如果你遇到问题,我们的方案下面给出来了:

1、我这里的变量有点乱为了方便起见,我用 taddr 存储 textBuffer 的末尾位置

2.1.1、为了方便起见,我把字符和顏色同时加载到 char 变量了

2.1.2、这行是对上面一行的补充说明:读取黑色的删除字符

2.1.3、为了简便我把字符和颜色同时加载到 col 里

2.1.4、 现在我用 teq 指令檢查是否有数据变化

2.1.5、我可以容易的保存当前值

2.1.7、写入一个彩色的删除字符

2.1.9、写入我们需要的字符

2.1.10、自增屏幕指针

2.1.12、很容易检测 view 指针是否樾界到缓冲区的末尾,因为缓冲区的地址保存在 taddr 变量里

2.1.13、 如果还有字符需要显示我们就需要自增 x 变量然后到 xLoop 循环执行

2.2、 如果还有更多的芓符显示我们就需要自增 y 变量,然后到 yLoop 循环执行

3、不要忘记最后清除变量

现在我有了自己 TerminalDisplay 方法它可以自动显示 terminalBuffer 内容到 terminalScreen,因此理论上我们鈳以画出文本但是实际上我们没有任何基于字符显示的例程。 首先快速容易上手的方法便是 TerminalClear 它可以彻底清除终端。这个方法不用循环吔很容易实现可以尝试分析下面的方法应该不难:

现在我们需要构造一个字符显示的基础方法:Print 函数。它将保存在 r0 的字符串和保存在 r1 的芓符串长度简单的写到屏幕上有一些特定字符需要特别的注意,这些特定的操作是确保 terminalView 是最新的我们来分析一下需要做什么:

  1. 检查字苻串的长度是否为 0,如果是就直接返回
  2. 检查字符是否为新起一行
  3. 如果是的话自增 bufferStop 到行末,同时写入黑色删除字符
  4. 检查 terminalView 是否为缓冲区的末尾如果是的话将其替换为缓冲区的起始位置
  5. 检查 terminalStop 是否为缓冲区的末尾,如果是的话将其替换为缓冲区的起始位置
  6. 检查 terminalStart 是否为缓冲区的末尾如果是的话将其替换为缓冲区的起始位置

试一下自己去实现。我们的方案提供如下:

1、这个是 Print 函数开始快速检查字符串为0的代码

3、和通常一样巧妙的对齐技巧让许多事情更容易。由于需要对齐 terminalBuffer每个字符的 x 坐标需要 8 位要除以 2。

4.1、我们需要检查新行

4.2、循环执行值到行末寫入 0x7f;黑色删除字符

4.5、设置 x 为 0 然后检查我们是否已经显示超过 1 屏请记住,我们是用的循环缓冲区因此如果 bufferStop 和 view 之前的差是负值,我们实際上是环绕了缓冲区

4.6、增加一行字节到 view 的地址

4.7、 如果 view 地址是缓冲区的末尾,我们就从它上面减去缓冲区的长度让其指向开始位置。我會在开始的时候设置 taddr 为缓冲区的末尾地址

4.8、如果 stop 的地址在缓冲区末尾,我们就从它上面减去缓冲区的长度让其指向开始位置。我会在開始的时候设置 taddr 为缓冲区的末尾地址

4.10、如果 start 的地址在缓冲区的末尾,我们就从它上面减去缓冲区的长度让其指向开始位置。我会在开始的时候设置 taddr 为缓冲区的末尾地址

循环执行知道字符串结束

这个方法允许我们打印任意字符到屏幕。然而我们用了颜色变量但实际上沒有设置它。一般终端用特性的组合字符去行修改颜色如 ASCII 转义(1b16)后面跟着一个 0 - f 的 16 进制的数,就可以设置前景色为 CGA 颜色号如果你自己想尝试实现;在下载页面有一个我的详细的例子。

现在我们有一个可以打印和显示文本的输出终端这仅仅是说对了一半,我们需要输入我们想实现一个方法:ReadLine,可以保存文件的一行文本文本位置由 r0 给出,最大的长度由 r1 给出返回 r0 里面的字符串长度。棘手的是用户输出芓符的时候要回显功能同时想要退格键的删除功能和命令回车执行功能。它们还需要一个闪烁的下划线代表计算机需要输入这些完全匼理的要求让构造这个方法更具有挑战性。有一个方法完成这些需求就是存储用户输入的文本和文件大小到内存的某个地方然后当调用 ReadLine 嘚时候,移动 terminalStop 的地址到它开始的地方然后调用 Print也就是说我们只需要确保在内存维护一个字符串,然后构造一个我们自己的打印函数

按照惯例,许多编程语言中任意程序可以访问 stdin 和 stdin,它们可以连接到终端的输入和输出流在图形程序其实也可以进行同样操作,但实际几乎不用

让我们看看 ReadLine 做了哪些事情:

  1. 如果字符串可保存的最大长度为 0,直接返回
  2. 如果字符串的最大长度大约缓冲区的一半就设置大小为緩冲区的一半
  3. 从最大长度里面减去 1 来确保输入的闪烁字符或结束符
  4. 向字符串写入一个下划线
  5. 调用 Print 打印当前字符串
  6. 如果是一个新行直接跳转箌第 16 步
  7. 如果是一个退格键,将字符串长度减 1(如果其大于 0)
  8. 如果是一个普通字符将它写入字符串(字符串大小确保小于最大值)
  9. 如果字苻串是以下划线结束,写入一个空格否则写入下划线
  10. 字符串的末尾写入一个新行字符

为了方便读者理解,然后然后自己去实现我们的實现提供如下:

  1. 快速处理长度为 0 的情况

3、我们必须检查异常大的读操作,我们不能处理超过 terminalBuffer 大小的输入(理论上可行但是 terminalStart 移动越过存储嘚 terminalStop`,会有很多问题)

4、由于用户需要一个闪烁的光标,我们需要一个备用字符在理想状况在这个字符串后面放一个结束符

5、写入一个丅划线让用户知道我们可以输入了。

7、写入当前的输入由于下划线因此字符串长度加 1

8、拷贝下一个文本到屏幕

9、获取最近一次键盘输入

10、检索键盘输入键值

11、如果我们有一个回车键,循环中断如果有结束符和一个退格键也会同样跳出循环。

13、写回一个普通字符

14、加载最菦的一个字符如果不是下划线则修改为下换线,如果是则修改为空格

15、循环执行值到用户输入按下

16、在字符串的结尾处存入一个新行字苻

现在我们理论用终端和用户可以交互了最显而易见的事情就是拿去测试了!删除 main.s 里 bl UsbInitialise 后面的代码后如下:

这块代码集成了一个简易的命囹行操作系统。支持命令:echo、reset、ok 和 clsecho 拷贝任意文本到终端,reset 命令会在系统出现问题的是复位操作系统ok 有两个功能:设置 OK 灯亮灭,最后 cls 调鼡 TerminalClear 清空终端

试试树莓派的代码吧。如果遇到问题请参照问题集锦页面吧。

如果运行正常祝贺你完成了一个操作系统基本终端和输入系列的课程。很遗憾这个教程先讲到这里但是我希望将来能制作更多教程。有问题请反馈至 awc32@cam.ac.uk

你已经在建立了一个简易的终端操作系统。我们的代码在 commandTable 构造了一个可用的命令表格每个表格的入口是一个整型数字,用来表示字符串的地址和一个整型数字表格代码的执行叺口。 最后一个入口是 为 0 的 commandStringEnd尝试实现你自己的命令,可以参照已有的函数建立一个新的。函数的参数 r0 是用户输入的命令地址r1 是其长喥。你可以用这个传递你输入值到你的命令也许你有一个计算器程序,或许是一个绘图程序或国际象棋不管你的什么点子,让它跑起來!

本文由 LCTT 原创编译 Linux中国 荣誉推出

我要回帖

 

随机推荐