首页>资讯>游戏攻略>深圳SHENZHENIO第6关调谐最优化引擎攻略
深圳IO是一款硬核的编程游戏,有着严谨的游戏内容,那么一起来看看第6关:调谐最优化引擎的攻略吧。
概念MAIL:任务中心,游戏的主题都在其中,为了仿照认真工作的样子,所有的任务背景和内容都模拟邮件的形式进行
数据手册:嵌入式开发必经之路,相当于正常游戏的新手引导,哈哈,读起来很有感觉呢
控制面板:就是控制台啦,这不需要过多叙述了
纸牌游戏:这个会在游戏前期解锁,一旦解锁,这个游戏可能就变成了一款蜘蛛牌游戏。
主界面
由于游戏过分硬核,先放个手册中的图看看冰山一角:
游戏中DX300参考
像这样的器件足足有17个!!!! 哈哈,有没有已经感觉到挑战了呢?
不过这也正对应了嵌入式开发中会遇到的海量数据手册,相当程度上还原了嵌入式日常开发的情景。
游戏中设计到部分的编程有些类似于汇编语言,这里上手还是有一些些难度的,大家请做好准备,继续直接扔核弹:
游戏中主要使用的编程语言
不用害怕,在游戏过程中,会逐步引导你学会使用新的指令,对于新的器件,也是随着主线的进行逐步开放的
在游戏中,你不仅可以完成指定的基本目标,还可以挑战全网玩家,看谁能达成最佳优化目标。
鱼和熊掌不可兼得,多数情况下想要达成更好的性能就要增加成本啦,不过这正是优秀的嵌入式开发人员的意义所在——比你好,还比你的便宜。
第1关:安全摄像头
第2关:信号放大器
第3关:脉冲发生器
第4关:动画 ESPORTS 标志
第5关:游戏积分器
第6关:调谐最优化引擎
关卡展示
这一关我们需要参考一下数据手册来决定该如何编写我们的代码
这一页的核心就一句话:AUDIO_OUT = (AUDIO_IN - 50) × 4 + 50
然后我们观察时序图,发现当【最优化】端口信号为 0 时,我们将声音信号原样输出;而当【最优化】端口信号为 100 时,我们需要将声音信号按照上面的公式进行最优化处理后输出。
首先我们遇到了第一个难题,就是这一关有三个简单 IO 信号,但是我们的芯片只有两个 p 口可以使用。这时候,我们发现【最优化】这个端口只有 0 和 100 两种信号,因此可以用之前提到的 DX-300 转换成 X 口信号,这样同一块芯片就能接收 3 个简单 IO 口的信号了。如图所示:
因为最优化接在 DX-300 的 p2 接口上,DX-300 里的三位数只有百位会受影响,所以原始的 0/100 信号都会原样输出到 MC4000 的 x0 口上。
然后,有了以往的经验后,我们很容易写出这样的代码:
首先使用 tcp 测试指令让 x0 和 50 比大小。比 50 小说明最优化信号为 0,直接将 p0 的信号原样输出给 p1(- mov p0 p1)。比 50 大说明最优化信号为 100,需要将 p0 的信号处理后再发送给 p1。此时,我们将 p0 的值存入 acc(+ mov p0 acc),然后依次进行 -50(+ sub 50),×4(+ mul 4)和 +50(+ add 50)的运算后,将运算后的结果发送给 p1(+ mov acc p1)。以上指令执行完毕后,休眠一个周期(slp 1),准备进入下一个周期。
一个很容易想到的优化方案
有没有觉得以上算术过程过于繁琐?其实数据手册里给我们的公式并没有化简到最简形式。这个公式其实小学生都会化简:
AUDIO_OUT
= (AUDIO_IN - 50) × 4 + 50
= AUDIO_IN × 4 - 200 + 50
= AUDIO_IN × 4 - 150
最优化的过程只需要乘和减两步运算就行了,不需要三步运算。因此以上代码中的
+ sub 50
+ mul 4
+ add 50
可以缩减为以下两行:
+ mul 4
+ sub 150
最终的设计方案如下
点击左下角的【模拟】,稍等片刻,便会弹出结算界面:
评论 (0)分享