电玩圈游戏网 搜一搜

安卓手游去频道 >

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

安卓应用去频道 >

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

游戏视频去频道 >

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

资讯攻略去频道 >

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

专题合集去频道 >

游戏专题 应用专题

排行榜单去频道 >

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

首页>资讯>游戏攻略>深圳SHENZHENIO第22关加密货币存储终端攻略

深圳SHENZHENIO第22关加密货币存储终端攻略

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

深圳IO是一款硬核的编程游戏,有着严谨的游戏内容,那么一起来看看第22关的加密货币存储终端的攻略吧。

主界面

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

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

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

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

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

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

第 22 关:加密货币存储终端

关卡展示

本关的【读卡器】会不定期地发送一些数据包,有时候是长度为 8 的卡号数据,表示用户插卡;有时候是一个 -1,表示当前已插卡的用户退卡。在用户插着卡时,会塞入一些面值 20/50/100 元的纸币,我们需要记录用户在插卡期间存入了多少金额,并在用户退卡时,向【网络端口】输出长度为 9 的【卡号 + 存钱金额】数据包。

本关因为卡号是 8 位数字,单纯的 acc、dat 寄存器是存不下的。这时候我们必须要借助外部的随机存储器 RAM 来动态存储当前用户的卡号,存钱期间用 acc 寄存器记录存钱金额,等到用户退卡时,我们再从 RAM 中重新把卡号读出来,从 acc 里将存钱金额读出来,一起发送到【网络】端口。

电路图和代码如下:

一块芯片写不下所有的逻辑代码,必须分成两块芯片写。左边的 MC6000 用于处理用户插卡时的“记录卡号”和“记录已存金额”两项任务,而当用户退卡时,左边的芯片将当前用户的已存金额发给右边的 MC4000X,委托它将卡号和金额发送给网络端口。

我们先看左边的芯片。第 1~6 行的代码和第 13 关《古钱币付款终端》里统计投入金额的代码是一样的套路,都是为了计算当前用户迄今为止已投入的金额数量,我不再重复阐述。

从第 7 行开始,都是根据从读卡器读到的数字,进行相应的操作。首先,我们将当前时钟周期里读卡器的首数字放入 dat(mov x0 dat),然后判断首数字是 -999、-1 还是非负数。如果是 -999,表示读卡器中暂无数据,直接跳到最后休眠一秒(- jmp e)。如果读卡器是非负数,说明读到了卡号,我们将卡号的每一位数存入 RAM(+ mov dat x2),休眠一秒后继续读取(+ jmp e),直到卡号的所有位数都读取完毕,读卡器中无缓存数据,读到 -999 为止。而当首数字是 -1 时,我们关闭所有的 + - 号指令,跳到第 12 行:我们将当前用户的已存金额发送给右边的芯片(mov acc x3),同时清除 acc 寄存器,准备记录下一个客户的已存金额(mov 0 acc)。做完以上操作后,休眠一秒,进入下一个时钟周期(slp 1)。

现在我们看右边的芯片。右边的芯片用 acc 寄存器表示“上一次读取的卡号是第几位数”。首先等待左边芯片发送退卡信号(slx x3)。等待到了以后,从 RAM 里连续读取数字发往【网络】端口(mov x0 x2)。我们从第 0 位数开始读,当刚刚读的不是第 7 位数时(tcp acc 7),令下一次要读取的位数 +1(- add 1),并跳回到第 2 行继续读(- jmp 2),直到将所有 8 位数都读完后,将已读位数清零,准备迎接下一次任务(mov 0 acc),并将左边芯片发来的已存金额数量发给右边的【网络】端口(mov x3 x2)。

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

评论 (0)

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

上拉或点击查看更多