电玩圈游戏网 搜一搜

安卓手游去频道 >

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

安卓应用去频道 >

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

游戏视频去频道 >

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

资讯攻略去频道 >

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

专题合集去频道 >

游戏专题 应用专题

排行榜单去频道 >

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

首页>资讯>手游攻略>深圳SHENZHENIO第1关安全摄像头攻略

深圳SHENZHENIO第1关安全摄像头攻略

作者:佚名来源:百度2022/05/31

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

概念MAIL:任务中心,游戏的主题都在其中,为了仿照认真工作的样子,所有的任务背景和内容都模拟邮件的形式进行

数据手册: 嵌入式开发必经之路,相当于正常游戏的新手引导,哈哈,读起来很有感觉呢

控制面板:就是控制台啦,这不需要过多叙述了

纸牌游戏:这个会在游戏前期解锁,一旦解锁,这个游戏可能就变成了一款蜘蛛牌游戏。

主界面

由于游戏过分硬核,请大家做好心理准备,先放个手册中的图看看冰山一角:

游戏中DX300参考

像这样的器件足足有17个!!!! 哈哈,有没有已经感觉到挑战了呢?

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

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

游戏中主要使用的编程语言

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

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

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

第1关:安全摄像头

关卡展示

这一关是新手入门关卡。在这一关里我们需要掌握两条基本指令:mov 指令和 slp 指令

说明:指令中的 I 表示一个整数(integer),R 表示一个寄存器(register),P 表示一个端口(port)。这点以后不再重复说明。

mov 指令用法:mov I/R1/P1 R2/P2,将【整数/寄存器1中的数/从端口1获得的数】送入【寄存器2/端口2】中。

slp 指令用法:slp I/R/P,令 cpu 休眠一定的时钟周期,休眠的周期数等于【指定的整数/寄存器中的数/从端口获得的数】。

我们现在观察下方的波形图,不难发现,【活动状态】端口需要循环输出 6 秒的 0 信号和 6 秒的 100 信号。【网络】端口稍微复杂一点,循环节为:0×4s,100×2s,0×1s,100×1s。初始的线路板里,【活动状态】端口的代码已经为我们写好了,我们来分析一下:

mov 0 p0 # 将 0 信号发送给 p0 端口

slp 6 # 休眠 6 秒

mov 100 p0 # 将 100 信号发送给 p0 端口

slp 6 # 休眠 6 秒

所以,对于【网络】端口,我们已经找到了循环节,所以只需要照葫芦画瓢写就 OK 了。我们从右侧的元件面板上拖入一个【MC4000】元件,然后将它的 p0 口与【网络】端口连线,并写出如下图所示的代码:

点击左下角的【模拟】按钮,运行程序,稍等片刻,便会弹出过关画面。游戏会从成本、电量及代码行数三个维度评判你的设计方案的优秀程度。

这里我们需要提一个隐藏特性:

简单 I/O 口(就是只能和芯片的 p0/p1 相连接的端口)未赋值时拥有初始值 0。那么我们其实没有必要在第一条指令就写 mov 0 p0,而是先写 slp 指令,将 mov 0 p0 这样的指令放到循环的最后。这样的话,两块芯片在整个周期里可以各省掉一格给 p0 口清零的电量,共计可以省掉 2 格电量。

优化代码行数

这里要引入一条可以大幅减少代码行数的指令:gen 指令。

gen 指令用法:gen P I1/R1/P1 I2/R2/P2

这一条指令的耗电量是 4 个单位,等价于以下 4 条指令:

mov 100 P

slp I1/R1/P1

mov 0 P

slp I2/R2/P2

另外,还有一个新特性需要说明一下:在一行代码前加上 @ 注解,可以确保对应的代码只在最开始执行一次,而不会被循环执行。

因此,我们可以将以上代码大幅度减少为下面这样:

众所周知,gen 指令生成的是以 100 起始的方波(100→0→100→0→……),但是这道题要生成的是以 0 起始的方波(0→100→0→100→……),我们如何才能用 gen 指令简化呢?其实我们只需要把第一行的 slp 挪到最后一行,然后在第一行加上只执行一次的 @slp 指令,然后就能用 gen 简化了。如下所示:

slp 6

mov 100 p0

slp 6

mov 0 p0

等价于

@ slp 6

mov 100 p0

slp 6

mov 0 p0

slp 6

等价于

@ slp 6

gen p0 6 6

控制【网络】端口的芯片同理。此时我们的代码行数缩减到了 5 行。

进一步优化代码行数

要生成以 0 起始的方波,在代码开头加入只执行一次的睡眠指令是一个办法,还有一个办法就是将生成的 100 起始的方波用【非门】反转一下。这样就不需要额外的睡眠指令了。我们现在从元件面板上拖入两个【LC70G04】元件,这个元件的作用是将输入端(大头端)的非 0 数据转为 0,或将输入端的 0 数据转为 100 传给输出端(小头端)。注意两端的方向不能接反。

接完了以后,我们将两块芯片中多余的 @slp 指令删除。注意第二块芯片的 gen 指令里的时间要改掉,第一个立即数写 0 信号的时长,第二个立即数写 100 信号的时长,和之前正好反过来。

此时,因为加了两个非门元件,所以我们的成本提高到了 8 元,但代码行数减少到了 3 行。

评论 (0)

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

上拉或点击查看更多