最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【深圳 IO 攻略】阿瓦隆城第 6 關(guān):壽司機(jī)器人

2022-07-02 18:06 作者:ココアお姉ちゃん  | 我要投稿

本文首發(fā)于 B 站《深圳 IO》文集(https://www.bilibili.com/read/readlist/rl569860)。原創(chuàng)不易,轉(zhuǎn)載請(qǐng)注明出處。

關(guān)卡展示

本關(guān)的 C2S-RF901 會(huì)不定期地發(fā)送一些長(zhǎng)度為 2 的數(shù)據(jù)包。數(shù)據(jù)包里的第一個(gè)數(shù)字表示壽司所用的魚(yú)類(lèi)型,第二個(gè)數(shù)字表示當(dāng)前這個(gè)壽司是哪個(gè)餐桌的客戶(hù)點(diǎn)的。

收到壽司訂單后,我們首先要加 100 數(shù)量的米,然后將對(duì)應(yīng)類(lèi)型的魚(yú)放入壽司,最后再加 30 數(shù)量的米,做出一個(gè) 100 米 + 魚(yú) + 30 米的夾心壽司。

然后我們需要將做好的壽司放入傳送帶,并分別在延遲 3、6、9 秒后,依次觸發(fā)閘門(mén) a、b、c 的信號(hào)。觸發(fā)規(guī)則參考數(shù)據(jù)手冊(cè):

我們觀察一下這張圖,圈 A 左邊有個(gè)【←100】,右邊有個(gè)【→0】,也就是說(shuō),左半部分的所有餐桌,閘門(mén) A 信號(hào)都是 100;右半部分的所有餐桌,閘門(mén) A 信號(hào)都是 0。

閘門(mén) B 信號(hào)也可以用類(lèi)似的方法分析出來(lái):上半部分的所有餐桌,閘門(mén) B 信號(hào)都是 100;下半部分的所有餐桌,閘門(mén) B 信號(hào)都是 0。

閘門(mén) C 則是:奇數(shù)餐桌都是 100,偶數(shù)餐桌都是 0。

將以上信息匯總,得到餐桌和三個(gè)閘門(mén)信號(hào)的映射關(guān)系表:

我們不難發(fā)現(xiàn)如下規(guī)律:

  • 餐桌號(hào) ≤ 4 時(shí),閘門(mén) A = 100,否則閘門(mén) A = 0;

  • 餐桌號(hào)除以 4 的余數(shù)為 1 或 2 時(shí),閘門(mén) B = 100,否則閘門(mén) B = 0;

  • 餐桌號(hào)除以 2 的余數(shù)為 1 時(shí),閘門(mén) C = 100,否則閘門(mén) C = 0。

我們可以根據(jù)這樣的規(guī)律來(lái)設(shè)計(jì)程序。電路圖和代碼如下:

四塊 MC4000 就夠了,布線(xiàn)也很簡(jiǎn)單。夢(mèng)回龍騰。

通過(guò)接線(xiàn)可以看出來(lái),位于右上角的芯片是直接和 C2S-RF901 連接的,因此它是 1 號(hào)芯片。下方從左到右的三塊芯片依次和閘門(mén) a、b、c 連接,它們是 2~4 號(hào)芯片。

首先看 1 號(hào)芯片的代碼:

這塊芯片的 x1 口既連接著?C2S-RF901?的 rx 口,也連接著“魚(yú)”這個(gè)輸出口。但是這并不矛盾,因?yàn)榍罢呤侵蛔x的,后者是只寫(xiě)的。從 x1 口讀數(shù)據(jù)時(shí),數(shù)據(jù)只會(huì)從 rx 流入;而向 x1 口寫(xiě)數(shù)據(jù)時(shí),數(shù)據(jù)只會(huì)流向“魚(yú)”。數(shù)據(jù)既不會(huì)從錯(cuò)誤的口流入,也不會(huì)流出到錯(cuò)誤的口上。

首先從 C2S-RF901 中讀入一個(gè)數(shù)字(mov x1 acc),檢查它是正數(shù)還是負(fù)數(shù)(tcp acc 0)。如果是負(fù)數(shù),說(shuō)明隊(duì)列中暫時(shí)沒(méi)有新的壽司訂單,直接跳到第 6 行睡覺(jué)(slp 1)。如果是正數(shù),說(shuō)明隊(duì)列中有等待完成的壽司訂單(且第一個(gè)數(shù)字是魚(yú)的類(lèi)型)。我們按照要求,第 1 秒里加 100 數(shù)量的米(+ gen p1 1 0),第 2 秒里加上對(duì)應(yīng)類(lèi)型的魚(yú)(+ mov acc x1)和 30 數(shù)量的米(+ mov 30 p1, slp 1),第 3 秒鐘將米信號(hào)歸零(+ gen p1 0 1)。壽司制作完成后,我們把壽司放入傳送帶,并將 C2S-RF901 中表示餐桌號(hào)的第二個(gè)數(shù)字發(fā)給 2 號(hào)芯片(+ mov x1 x0)。

然后看控制閘門(mén) A 的 2 號(hào)芯片的代碼:

首先將閘門(mén)信號(hào)置為初始值 50(mov 50 p1)并待命(slx x0)。收到從上方芯片傳來(lái)的餐桌編號(hào)后,我們先將該編號(hào)暫存到 acc 中(mov x0 acc),然后休眠 2 秒,準(zhǔn)備設(shè)置閘門(mén) A 的信號(hào)(slp 2)。當(dāng)餐桌號(hào) ≤ 4 時(shí)(tgt acc 4),閘門(mén) A = 100(- gen p1 1 0),否則閘門(mén) A = 0(+ gen p1 0 1)。接下來(lái)我們要準(zhǔn)備將餐桌號(hào)傳送給控制閘門(mén) B 的 3 號(hào)芯片。由于閘門(mén) B 的信號(hào)只跟餐桌號(hào)除以 4 的余數(shù)有關(guān),所以在餐桌號(hào) > 4 時(shí),我們需要將餐桌號(hào) - 4(+ sub 4),這樣下一塊芯片收到的數(shù)字只能是 1、2、3、4 中的一種,即【余 0 時(shí)視為余 4 的,餐桌號(hào)除以 4 的余數(shù)】。最后,將處理過(guò)的 acc 值發(fā)給 3 號(hào)芯片后(mov acc x1),將閘門(mén) A 的信號(hào)重置為 50,等待下一次任務(wù)(mov 50 p1, slx x0)。

接下來(lái)看控制閘門(mén) B 的 3 號(hào)芯片的代碼:

首先將閘門(mén)信號(hào)置為初始值 50(mov 50 p1)并待命(slx x0)。收到從左邊芯片傳來(lái)的【餐桌編號(hào)除以 4 的余數(shù)】后,我們先將該余數(shù)暫存到 acc 中(mov x0 acc),然后休眠 2 秒,準(zhǔn)備設(shè)置閘門(mén) B 的信號(hào)(slp 2)。由于余數(shù)為 0 時(shí)視為?4,所以【余數(shù)為 1 或 2】等價(jià)于【余數(shù) ≤ 2】,而【余數(shù)為 0 或 3】等價(jià)于【余數(shù) > 2】。當(dāng)余數(shù)?≤?2?時(shí)(tgt acc?2),閘門(mén) B = 100(- gen p1 1 0),否則閘門(mén) B = 0(+ gen p1 0 1)。接下來(lái)我們要準(zhǔn)備將餐桌號(hào)傳送給控制閘門(mén) C 的 4 號(hào)芯片。由于閘門(mén) C 的信號(hào)只跟餐桌號(hào)除以 2 的余數(shù)有關(guān),所以在余數(shù)?> 2 時(shí),我們需要將余數(shù)?-2(+ sub 2),這樣下一塊芯片收到的數(shù)字只能是?1、2?中的一種,即【余 0 時(shí)視為余 2 的,餐桌號(hào)除以 2 的余數(shù)】。最后,將處理過(guò)的 acc 值發(fā)給 4 號(hào)芯片后(mov acc x1),將閘門(mén) B 的信號(hào)重置為 50,等待下一次任務(wù)(mov 50 p1, slx x0)。

最后看控制閘門(mén) C 的 4 號(hào)芯片:

首先將閘門(mén)信號(hào)置為初始值 50(mov 50 p1)并待命(slx x0)。最后一塊芯片由于不需要再往后面的芯片傳數(shù)字,所以不需要將收到的數(shù)字放入 acc 寄存。收到從左邊芯片傳來(lái)的【餐桌編號(hào)除以 2 的余數(shù)】后,判斷余數(shù)是否為 1,激活相應(yīng)的 + - 號(hào)指令后(teq?x0 1),休眠 2 秒,準(zhǔn)備設(shè)置閘門(mén)?C?的信號(hào)(slp 2)。當(dāng)余數(shù)為 1 時(shí),閘門(mén) C?= 100(+?gen?p1 1 0),否則閘門(mén)?C?= 0(- gen p1 0 1)。一秒過(guò)后,將閘門(mén) C?的信號(hào)重置為 50,等待下一次任務(wù)(mov 50 p1, slx x0)。

點(diǎn)擊左下角的【模擬】,稍等片刻,便會(huì)彈出結(jié)算界面:

優(yōu)化電量

以上代碼中為了壓縮行數(shù),用了很多 gen 指令。我們可以將所有的 gen 指令展開(kāi),以達(dá)到節(jié)省電量的目的。

當(dāng) gen 指令的第一個(gè)操作數(shù)是 0 時(shí),展開(kāi)后相當(dāng)于:

當(dāng) gen 指令的第二個(gè)操作數(shù)是 0 時(shí),展開(kāi)后相當(dāng)于:

如果我們不計(jì)成本地將上一版方案中的所有 gen 指令都展開(kāi),并且去掉展開(kāi)后的空操作指令的話(huà),電量的確可以大幅節(jié)省。但是代價(jià)是有 3 塊芯片不得不換成 MC6000,且這三塊芯片都寫(xiě)了 10 行代碼,也就是都僅僅比 MC4000 的最大容量多一行代碼。

電路圖和代碼如下,其實(shí)就是將上一版方案中的 gen 指令全部展開(kāi)后的樣子。我不再重復(fù)解讀。

最終的三項(xiàng)指標(biāo)為:成本 ¥18(+6),代碼行數(shù) 37(+5),電量 528(-144)


【深圳 IO 攻略】阿瓦隆城第 6 關(guān):壽司機(jī)器人的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
清徐县| 谷城县| 柏乡县| 金昌市| 勃利县| 本溪| 临桂县| 德兴市| 始兴县| 林州市| 调兵山市| 松滋市| 北票市| 揭西县| 石棉县| 神木县| 呼图壁县| 成都市| 息烽县| 沙河市| 岳池县| 缙云县| 大丰市| 江山市| 仪征市| 二连浩特市| 剑阁县| 宣恩县| 鹿泉市| 缙云县| 界首市| 萍乡市| 磐石市| 天津市| 兰溪市| 满城县| 陇西县| 神农架林区| 南丹县| 普兰店市| 孟州市|