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

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

【深圳 IO 攻略】第 14 關(guān):三明治制作機(jī)

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

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

關(guān)卡展示

本關(guān)要求根據(jù)小鍵盤按下的 1/2/3 鍵制作不同種類的三明治:

  1. 標(biāo)準(zhǔn)三明治,下層面包 + 肉 + 奶酪 + 芥末 + 上層面包

  2. 不加奶酪的三明治,下層面包 + 肉 + 芥末 + 上層面包

  3. 多加芥末的三明治,下層面包 + 肉 + 奶酪 + 兩份芥末 + 上層面包

每做完一個(gè)三明治,激活“旗”信號(hào)三秒鐘。

又是一個(gè)超多 p 口的關(guān)卡,又是 DX-300 大顯身手的時(shí)候。我們首先二話不說(shuō),先在電路板右側(cè)安排上一個(gè) DX-300,令它的 p2、p1、p0 口分別和“肉”、“奶酪”、“芥末”相連。

然后我們注意一下這次的“小鍵盤”輸入。這個(gè)輸入口是帶黃色三角形的,說(shuō)明需要跟芯片的 x 口相連接。但是這次的 x 口和之前接觸到的“無(wú)線 rx”輸入信號(hào)不一樣,它和芯片之間傳輸數(shù)據(jù)的方式一樣,如果你在讀數(shù)據(jù)的時(shí)候,輸入源并沒有提供數(shù)據(jù),那你并不會(huì)讀到 -999,而是會(huì)令程序阻塞。所以,我們必須先用 slx 指令“等待喚醒”后,再來(lái)讀取數(shù)據(jù)。

我們讀取到的數(shù)據(jù)只有 1/2/3 三種,因此很容易想到用?tcp 三態(tài)判斷一氣呵成。

等來(lái)小鍵盤的信號(hào)后(slx x0),我們首先一條 tcp 指令,根據(jù)小鍵盤的值對(duì)應(yīng)激活 + - 號(hào)指令(tcp x0?2)。第一片面包(gen p1 1 0),以及肉(mov 100 x3, slp 1),三種三明治都是一樣的,只有到了第二步“加奶酪”的時(shí)候(mov 10 x3),才需要判斷小鍵盤的值。

因?yàn)橹挥?2 號(hào)三明治不加奶酪,所以當(dāng)準(zhǔn)備發(fā)送加奶酪信號(hào)后,只有小鍵盤的值是端點(diǎn)值時(shí)才休眠一秒(- slp 1, + slp 1),當(dāng)它是中間值時(shí),跳過兩個(gè) slp 1,立刻給 DX-300 重新傳 1。我們說(shuō)過,p 口的信號(hào)在同一秒內(nèi)可以反復(fù)修改,最終 p 口的值會(huì)定格在本秒內(nèi)最后一次所賦的值上。因此當(dāng)小鍵盤的值是中間值時(shí),【奶酪】端口相當(dāng)于被賦了 100 后在本秒內(nèi)立刻被重新賦 0,最終只有最后一次賦值的狀態(tài)會(huì)生效(也就是奶酪信號(hào)并沒有被激活)。

只有 3 號(hào)三明治要加兩份芥末,首先三種三明治要在給 DX-300 賦 1 后(mov 1 x3)共享同一個(gè)休眠一秒的指令(slp 1)。而 3 號(hào)三明治最特殊,在接受了共享的“休眠一秒”指令后,還需要單獨(dú)再休眠一秒(+ slp 1)。

做完這些后,接下來(lái)是三種三明治都一樣的 1 秒面包信號(hào)(gen p1 1 x3,讀 x3 會(huì)讀到立即數(shù) 0,同時(shí)清除芥末信號(hào))和 3 秒國(guó)旗信號(hào)(gen p0 3 0)。

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

優(yōu)化電量

為了將復(fù)雜的邏輯代碼壓到 14 行以內(nèi),我們?cè)谝陨洗a中使用了較多的 gen 指令。而我們知道,gen 指令的第二個(gè)操作數(shù)是 0 時(shí),其實(shí)是有 slp 0 的效率浪費(fèi)的。為了提高效率,我們很自然會(huì)想到將 gen 指令展開,然后去掉無(wú)效的 slp 指令。比如將上方的第三行代碼

展開成下面這樣的三行代碼后:

效率上會(huì)有不少提升。但問題在于,展開了以后,多了兩行代碼,代碼行數(shù)變成 15 行了,一塊芯片放不下了啊!

然后我們注意到,mov 0 p1 后面緊跟著一條 mov 100 x3。還記得我反復(fù)提到的“一舉兩得”技巧嗎?【讀一個(gè)只寫 p 口,或者連接著若干只寫 p 口的 DX-300 時(shí),會(huì)得到立即數(shù) 0,同時(shí)清除這些只寫 p 口的信號(hào)】。

咱們現(xiàn)在的優(yōu)化技巧,就是改變一下 p 口和 DX-300 所控制的端口,盡可能多的“一舉兩得”。比如,我們將 p1 和 DX-300 的 p2 所連接的端口交換一下,p1 控制【肉】,DX-300 的 p2 控制【面包】。然后,我們把代碼改成下面的樣子:

首先還是等待小鍵盤輸入(slx x1),并對(duì)該輸入做三態(tài)判定,按需激活 + - 號(hào)指令(tcp x1 2)。接下來(lái),由于面包信號(hào)改為 DX-300 控制了,我們給?DX-300 發(fā)送 100 信號(hào)并睡 1 秒,將面包信號(hào)激活 1 秒鐘(mov 100 x3, slp 1)。面包信號(hào)激活 1 秒后,我們清除面包信號(hào),并將 p1 口控制的肉信號(hào)激活 1 秒鐘(gen p1 1 x3)。這里通過讀 x3 獲得 0 立即數(shù),同時(shí)清除 DX-300 的 3 路輸出,相當(dāng)于同時(shí)執(zhí)行了 mov 0 x3 和 gen p1 1 0 這兩條指令,一舉兩得。第 6~11 行代碼和上一版方案一模一樣。最后,第 12~13 行激活 1 秒面包信號(hào)(mov 100 x3, slp 1);第 14 行清除面包信號(hào),并將 p0 口控制的旗信號(hào)激活 3 秒鐘(gen p0 3 x3)。這里通過讀 x3 獲得 0 立即數(shù),同時(shí)清除 DX-300 的 3 路輸出,相當(dāng)于同時(shí)執(zhí)行了 mov 0 x3 和 gen p0 3 0 這兩條指令,一舉兩得。

以上,我們通過調(diào)整 p1 口和 DX-300 的分工,成功在代碼里梅開二度,兩次實(shí)現(xiàn)“一舉兩得”,將電量由 81?減少到了 73。

【深圳 IO 攻略】第 14 關(guān):三明治制作機(jī)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
横山县| 临邑县| 和田市| 眉山市| 行唐县| 贡觉县| 萝北县| 凌云县| 布拖县| 云霄县| 泽州县| 宁都县| 松滋市| 密云县| 怀柔区| 昌图县| 霍林郭勒市| 偃师市| 区。| 珠海市| 伊金霍洛旗| 南昌县| 安宁市| 平果县| 瑞丽市| 嵩明县| 大丰市| 禄劝| 盱眙县| 浦江县| 同江市| 马边| 凤庆县| 安塞县| 嵊州市| 富平县| 通化市| 四会市| 平陆县| 米林县| 互助|