电玩圈游戏网 搜一搜

安卓手游去频道 >

角色扮演 射击枪战 棋牌卡牌 体育运动 角色扮演 赛车竞速 休闲益智 音乐舞蹈 模拟经营 战棋塔防 推理解谜 策略战争

安卓应用去频道 >

社交通讯 系统工具 影音视听 拍摄美化 效率办公 学习教育 生活服务 旅游出行 资讯阅读 金融理财 网络购物 游戏助手

游戏视频去频道 >

动作冒险 射击枪战 棋牌卡牌 体育运动 角色扮演 赛车竞速 音乐舞蹈 模拟经营 战棋塔防 推理解谜 策略战争 休闲益智

资讯攻略去频道 >

手游资讯 手游攻略 手游问答 游戏资讯 游戏杂谈 游戏攻略 软件教程 软件资讯

专题合集去频道 >

游戏专题 应用专题

排行榜单去频道 >

游戏排行 应用排行
首页 游戏 应用 视频 资讯 专题 榜单

首页>资讯>游戏攻略>深圳SHENZHENIO第27关深海探测网格攻略

深圳SHENZHENIO第27关深海探测网格攻略

作者:佚名来源:百度2022/06/10

深圳IO是一款硬核的编程游戏,有着严谨的游戏内容,那么一起来看看第27关深海探测网格的攻略吧。

主界面

由于游戏过分硬核,先放个手册中的图看看冰山一角:

不过这也正对应了嵌入式开发中会遇到的海量数据手册,相当程度上还原了嵌入式日常开发的情景。

游戏中设计到部分的编程有些类似于汇编语言,这里上手还是有一些些难度的,大家请做好准备,继续直接扔核弹:

不用害怕,在游戏过程中,会逐步引导你学会使用新的指令,对于新的器件,也是随着主线的进行逐步开放的

在游戏中,你不仅可以完成指定的基本目标,还可以挑战全网玩家,看谁能达成最佳优化目标。

鱼和熊掌不可兼得,多数情况下想要达成更好的性能就要增加成本啦,不过这正是优秀的嵌入式开发人员的意义所在——比你好,还比你的便宜。

第27关:深海探测网格

关卡展示

本关有【声纳】和【磁】两个波形输入,同时 C2S-RF901 会不定期地提供一些长度为 2 的数据包。仅当收到的数据包的首数字和锁中的数字相等时才向 tx 端口输出数据包,要输出的数据包的内容和收到的数据包的第二个数字有关:第二个数字为 1 时,输出(包括当前时间在内的)前 6 秒的【声纳】值;第二个数字为 2 时,输出前 6 秒的【磁】值。

思路:由于 p 口数据“一旦错过就不再”,所以对于两种波形数据,我们只能像下面这样“错位存储”:

当我们读取数据的时候,也必须“隔行扫描”错位读取。

声纳数据只放在偶数地址里,磁数据只放在奇数地址里。如果需要读取前 6 秒内的【声纳】数据,我们需要将地址指针前移 12 格(或者后移 2 格)后,读取一格,舍弃一格,如此循环 6 次,就成功发送了【声纳】的数据包。如果需要读取前 6 秒内的【磁】数据,则改为将地址指针前移 11 格(后移 3 格),循环部分同样读取一格,舍弃一格,如此循环 6 次,就成功发送了【磁】的数据包。电路图和代码如下:

首先我们将当前的声纳和磁数据存入 RAM(mov p1 x0, mov p0 x0),然后判定当前数据包的首数字是否和锁中的数字一致(teq x2 x3)。如果首数字和锁中的数字不一致,直接跳到最后休眠(slp 1)。一致的情况下,根据数据包的第二个数字决定需要让地址指针向前前进多少格。我们之前分析过,第二个数字是 1 时,需要跳 2 格;第二个数字是 2 时,需要跳 3 格。但如果我们将循环节变为“先舍弃、后读取”的话,就变成了这样:第一个数字是 1 时跳 1 格,第二个数字是 2 时跳 2 格。跳的格数和第二个数字完全一致了。我们的 4~6 行代码正是这样的逻辑:得到现在的地址(+ mov x1 acc),数据包的第二个数字是多少就向前跳多少格(+ add x2),然后将新地址重新放回地址寄存器(+ mov acc x1)。然后我们准备进入循环,令 acc 作为循环次数计数器,初始值设为 6,表示要执行 6 次循环(+ mov 6 acc)。

第 8~12 行是个循环,这里我们用到了一个特殊的寄存器:null。它的作用是,如果你从这个寄存器读数字,那么会读到恒 0;如果你往这个寄存器里写数字,那么相应的数字会被丢弃。null 寄存器通常都是和 ROM/RAM 配合使用的,我们从 ROM/RAM 的数据口里读一个数据,但是送往 null 寄存器,直接舍弃掉,这样可以很方便地让地址自增。当我们只想让地址自增,不想对获得的数据做处理时,比起“将地址读入 acc、令 acc +1、将新的 acc 送回地址寄存器”这三步来说,读一次数据口,然后舍弃掉获得的数字,是更优的做法。

我们的循环节正是“先舍弃”(+ mov x0 null),“后读取”(+ mov x0 x3),“循环 6 次”(+ tcp acc 1, + sub 1, + jmp 8)。循环完成后,休眠一秒,进入下一个时钟周期(slp 1)。

点击左下角的【模拟】,稍等片刻,便会弹出结算界面:

评论 (0)

相关阅读
网友评论0条评论

上拉或点击查看更多