朱有田 2017/11/5
這篇文章寫給對技術感興趣、喜歡思考的人、也寫給初學計算機、單片機的人讓我們突破自己的生理感官,重新認識時間這個東西。
時間這個詞和愛情一樣,是我們經常所要提及,以及永遠不會過時的話題。
“曾經有一份真誠的愛情放在我面前,我沒有珍惜等我失去的時候我才后悔莫及,人世間最痛苦的事莫過于此。如果上天能夠給我一個再來一次的機會, 我會對那個女孩子說三個字:我愛你。如果非要在這份愛上加上一個期限,我希 望是……一萬年!”
《大話西游》 中周星馳扮演的孫悟空對紫霞說的那段臺詞已然成為經典。今 天我們先不討論愛情,而來討論一下:一萬年真的很久嗎?
從感官上來說,答案是肯定的大家都會覺得一萬年很久。因為無論時間、空間,對于人的神經感官系統來說,都有一個可感受的范圍,而往往超過感受范 圍的事物,總是很難被人理解和接受,這是普遍現象。我們不理解某個事物,是 因為它很難被直接感受到,人類之所以偉大,是因為總有一小部分人能夠認識到 自己感受范圍之外的東西,推動科學文明向前發展。對于時間的感官,我們能夠察覺到最小單位為秒,最大單位為年。我們常常用秒來表達較小的時間因為秒鐘是直接可數的,秒就是嘀嗒之間,一件事情很快往往說一秒鐘搞定!一件事隨時隨刻能做到,叫分分鐘的事。另一面,人類個體壽命普遍小于 100 年,10 年對我們來說就已經夠久的了,人生有幾個十年 呀?一萬年理所當然就遙不可及了。本文要討論的是超越我們的感官,先從數字說起。從數學角度去理解時間的刻度時間在宏觀上是可以無限延展的,從宇宙誕生那第一秒開始,1 秒,10 秒,100 秒,100000…00 秒一直往前計時,直到無窮, 沒有盡頭。微觀上,時間又是可以無限微分的,0.1秒,0.01 秒,0.001 秒,0.0001秒,0.0000000…001 秒,小數點后延伸無數個 0,看不到盡頭,無限靠近 0,卻 永遠達不到 0。
一萬年真的很久嗎?“久”本身就是一種感官描述,對于一年而言,一萬年 確實很久,而對于一億年來說,一萬年就是剎那間了。在這里我們無法形容全部 的時間刻度,只能建立在已知的事物上有限的談論一下時間的范圍。
人的生命期(100 年),人類進化歷史(1000 萬年),地球的壽命(46 億年), 用同一個圖來表示,是否有相似之處?不出意外的話,我們的人生是這樣的:
過紀錄片或者去過博物館的都應該知道,我們人類進化是這樣的:
我們以及所有祖先的人生在這個圖里面就是分布在各自位置的一條極細的豎 線。而整個人類進化史對于地球時間而言,又是在那個圖表里面的一條豎線。
再來看看微觀時間的圖表,是否也似曾相識?
電視機看起來那么神奇,其實它只是一個圖片顯示器,進一步說,它僅僅是 一個像素顯示器,它不停的切換靜態圖像,當速度超過肉眼能夠感知的范圍,我 們就覺得電視機的畫面在連續不斷的運動。也就是說,我們看著電視,我們的眼 睛一直在被電視欺騙。若把時間調慢,電視機就像一臺自動切換的圖片瀏覽器, 再把時間調慢,電視機只是在按次序的點亮屏幕上的一個點。
來看一下人們在鍵盤上敲擊一個按鍵時發生的時間圖表:
對于鍵盤掃描程序而言,人類的手指敲擊動作實在太慢了。我們使出最快的 鋼琴手,迅速敲擊按鍵使得按鍵底部的開關閉合約 200 到300 毫秒 ms,那已經 非常快了!而這個時間對于計算機而言,相當于你按下按鍵經過了一個月才釋放。這與我們以自己的人生去度量人類歷史進程的道理是一樣的。
再來看一 個栗子:
滬昆高速鐵路由 滬杭客運專線、杭長客運專線以及 長昆客運專線組成,途 經 上海、杭州、南昌、長沙、貴陽、昆明6座 省會城市及直轄市,線路全長 2252 公里,設計速度 350km/h,是 中國東西向線路里程最長、經過 省份最多的 高速 鐵路。
如果,我們沿著滬昆高鐵布置一根連續的電纜,在昆明設置一個開關,在上 海設置一個電壓表,我們試圖在按下開關的時刻啟動計時,在電壓表針動作時關 閉計時,你們考慮一下這個時間是多久?受哪些因素影響?本文不深入討論這個 栗子的具體結果,而是讓讀者感受到時間的存在,并不是僅僅只考慮開關合上, 電壓上升的純粹邏輯。
接下來看看繼電器的情況:
如圖,當開關按下時開始啟動計時,繼電器線圈得電產生磁力,將銜鐵往下 吸合,使得繼電器的3腳經過一段物理距離之后,與5腳接觸,計時停止,測得 該繼電器的吸合時間。同樣,當開關斷開時開始計時,繼電器線圈失電失去磁力, 銜鐵在彈簧的拉力下復位,使得3腳與5腳分離,計時停止,測得該繼電器的釋 放時間。
通過觀察,不難發現:3腳與5腳吸合需要的時間比3腳與5腳斷開的時間 要長,即吸合時間比釋放時間要長。
讀者一定疑惑,為什么總是要去考慮時間,不是只要知道繼電器得電吸合, 失電釋放就行了么!其實不然,在一些應用場景里,你無法避免時間因素給項目 造成的困擾和影響。正如繼電器,它的吸合時間決定了繼電器的動作速度,也決 定了繼電器傳遞信號的延時,假如在繼電器的輸入端加載一個寬度小于吸合時間 的脈沖信號,那么該繼電器將沒有任何輸出,因為還沒有達到吸合位置,線圈就 已經失電了。
接著這個話題繼續舉栗子,請看圖:
假如單個繼電器的吸合時間約50毫秒 ms,釋放時間約25毫秒 ms,那么圖中5個繼電器級聯控制,從開關按下到最后一個繼電器吸合時間為 50×5=250ms,從開關釋放到最后一個繼電器釋放的時間為 25×5=125ms,那么問題來了:假如 第一個開關只吸合100毫秒就斷開,此刻信號還沒有傳遞到最后一個繼電器,那么結果將如何?請燃燒你的大腦..。
我們來看單片機 的例子,讀者可能會擔心單片機(又稱MCU,或微控制器) 過于專業而無法理解。完全沒必要!在這里我們僅借它談論一下有關時間的話題,順帶提一下單片機系統的概念。
單片機顧名思義是集成到一個芯片里面的計算機系統,計算機系統就意味著 它要跑程序,也就意味著要有人去編寫這個程序。這同時意味著單片機本身并沒有具體的功能,它是一個通用件,具體要實現什么功能取決于你編寫的程序。
光是一塊芯片可什么也干不了,首先要有一個目標程序文件,它可以是你親 自編寫的,也可以是朋友編寫的,總之它在PC機里面是一個文件。然后我們通過連接到電腦的程序燒錄器,打開配套的燒錄軟件,將這個文件導入到單片機內。(就像把文件復制到U盤一樣)
單片機內已經有了程序,接下來要怎么讓它工作起來呢?這非常簡單,首先, 要給單片機加上一個晶振(晶振產生的脈沖信號將驅動單片機按時序工作);其次,當然要給單片機加電;最后給一個復位信號到復位管腳;它就開始運行程序了。這幾個最基本的要素,集合在一起,也叫最小系統,如果不想自己親手做,在網上能夠輕松淘到。
言歸正傳我們切入正題,單片機系統往往要處理按鍵輸入、數碼管的顯示、以及其他開關量信號的輸入和輸出處理。普通的8位單片機一般具備 24到32個IO(輸入輸出)引腳,每個引腳可以作為輸入,也能作為輸出。假設單片機供電電壓為 5V,那么5V 即代表著程序中的1地)。而程序中的0相當于電壓為0V(接最簡單的輸出應用:在P3.7管腳上面連接一個發光管的負極,發光管的正極通過限流電阻接電源。如果程序給P3.7賦值為 1,那么發光管兩端電壓都是5V電壓差為0,處于熄滅狀態。若程序給 P3.7賦值為0,那么發光管正極電壓為5V,負極電壓為0V(接地),電壓差使發光管點亮。這樣程序就可以控制發光 管的亮與滅了!最簡單的輸入應用:在P1.7管腳上面通過一個電阻接電源(上拉電阻),使它默認為5V 然后再將這個管腳通過一個按鈕接地,當按鈕按下時,管腳電壓變為0V。程序只要從P1.7管腳讀取數值為0時,表示該按鍵被按下。
單片機的輸入和輸出:S1-S4 按鍵輸入,d1-d8 發光管輸出
回到時間的話題,先來看一下 搖搖棒的例子:
搖搖棒有一排 LED 發光管
這又是什么原理?這是一個眼睛被時間欺騙的經典案例!眼見為實嗎?事實 告訴你,眼見并非為實,很多東西你看到了卻并非你想的那樣真實。同樣還有很 多東西是你肉眼看不到的,但看不到并不證明不存在!我們先撇開搖搖棒的實現 原理,來看看我們眼睛的特性。
關于人類的視覺延時 ,百度百科這么說:視覺暫留(Persistence of vision)
現象是光對視網膜所產生的視覺在光停止作用后,仍保留一段時間的現象,其具體應用是電影的拍攝和放映。原因是由 視神經的 反應速度造成的。是動畫、電影等視覺媒體形成和傳播的根據。視覺實際上是靠眼睛的晶狀體成像,感光細 胞感光,并且將光信號轉換為神經電流,傳回大腦引起人體視覺。感光細胞的感 光是靠一些感光色素,感光色素的形成是需要一定時間的,這就形成了視覺暫停 的機理。
物體在快速運動時,當人眼所看到的 影像消失后,人眼仍能繼續保留其影像0.1-0.4秒左右的圖像,這種現象被稱為視覺暫留現象。是人眼具有的一種性質。人眼觀看物體時,成像于視網膜上,并由視神經輸入人腦,感覺到物體的像。但當物體移去時,視神經對物體的印象不會立即消失,而要延續 0.1 -0.4秒的時間。人眼的這種性質被稱為“眼睛的視覺暫留”。
讀到這里,我想也就不用再解釋搖搖棒的原理了!只要你切換的時間小于人 眼延時,我們的眼睛就會被欺騙。接下來再看一個異曲同工的小玩意:電動版搖 搖棒。
數碼管是廉價、簡便、易于實現的顯示元件,沒錯,其實就是7個(帶上小 數點就是8個)被做成 條狀和點狀的發光管。它能夠通過不同段位的組合顯示 出基本的數字和字母,真是一項了不起的發明!
數碼管的高明之處是碼段的復用,通過 7 個段的排列組合,描繪出數量超過7種的數字和字母的象形符號。如將數碼管的BC點亮,就是數字1,如果把ABGED點亮,就是數字2,非常形象,四歲的孩子都能讀懂。數碼管和單片機天然搭配,前面講到單片機的I 口(輸入輸出口)能夠直接控制發光管的亮滅,而一個數 碼管只是8個發光管裝在一個殼子里,數碼管與單片機連接是醬紫的:
圖中每個引腳上都加了電阻,是因為發光管本身是個二極管,二極管是不能 直接加電源的,千萬別把發光管當燈泡一樣接到電源,那樣會因為電流過大而燒 毀。因此要串聯一個電阻,以限制通過發光管的電流,單個發光管的電流在1-5mA之間。
現在問題來了,估計讀者也意識到這個問題了:一個數碼管至少需要7 個獨 立的控制腳,如果一個系統需要8個甚至更多數碼管排列進行顯示時,那么至少要56個控制腳,而單片機管腳十分有限,難道一個單片機最多只能接2個數碼管?
辦法當然有,那就是在時間上做文章,終于回到時間的話題上來了:) 一般來說一個系統要實現的初級形態總是最復雜的,人們通過線路復用、空間復用、時間復用,總之是資源的復用來簡化我們的系統。數碼管用了7個段,顯示的內容卻遠遠超過 7 種,這是對發光管的復用。一個發光管需要2根引線, 意味著一個數碼管至少有14根引線,由于發光管的一端總是要接電源正極或地(負極),把這些線合并成一根線,以減少管腳數量,是線路的復用。
把 4 個數碼管的控制腳并聯在一起,形成總線的模式,所有數碼管都用同一 組單片機IO口來驅動。讀者的第一反應是不是:那好像行不通,豈不是所有數 碼管都顯示相同的內容了?
D0 到 D4 能夠控制單個數碼管的供電,如果單片機的程序這樣做:先在 IO口上輸出 1 的碼型,然后只點亮第1個數碼管,其他數碼管都關閉;第二步,在IO口上輸出 2 的碼型,然后只點亮第2個數碼管;第三步,IO口上輸出3的碼型,然后只點亮第3個數碼管;第四步,IO口上輸出4 的碼型,然后只點亮第4個數碼管。接著又回到第一步重復這些步驟。
沒錯!就是一個跑馬燈,4個數碼管依次被點亮。如果把時間因素考慮進去, 這個跑馬燈跑一圈的時間小于人眼的視覺延時時間,嘿嘿,沒錯,眼睛就這樣被 欺騙了。你就會神奇的感覺到:4個數碼管同時亮了!而且還顯示著各自獨立的內容。
說完數碼管,再來談一談陣列顯示:
數碼管雖好,但其變化實在有限,如果要顯示一個圖形、圖標,那非要陣列 莫屬。就拿圖中的最基本的陣列單元來看,我的哥!八八六十四個 LED 發光管, 如果要使每個點都能獨立顯示,至少需要 65 個引腳!那還有簡化的空間嗎?當然,繼續尋找線路復用的方法唄!
通過行列形式進行組織無疑是一種直觀、簡化的辦法:用 8 根行線與 8 根列 線交叉,每一個交叉點上連接一個發光管,將指定的行線和列線加電,那么它們 所交匯的那個發光管就被點亮。那豈不是同時只能點亮一個,或者一排發光管?回憶一下前面的例子,現在輪到欺騙眼睛的伎倆登場(壞笑)!
單片機 16 個引腳驅動 64 個 LED 的陣列
以上那么多例子,說明一個事情:平時我們所感覺到事情發生“同時”性并 不完全是真的。時間能夠在你眼皮底下變戲法而讓你無法察覺!如果你是一個設 計者,要通過區區 16 根線讓 64 個發光管“同時”受控制,拋棄時間因素話,就 不可避免會鉆到牛角尖里去。“那怎么可能!”
從時間的微觀角度去看,很難有什么事情是真正同時發生的,你在電腦上看 著文檔,同時電腦又播放著迷人的音樂,音樂和顯示器上的內容變化都是“同時” 發生著,如果真的要同時,那么電腦就要有成千個處理器,每開啟一個程序,就 要增加使用一個獨立的處理器。而事實上并非如此,個人電腦一般只有一個處理器而且足以應付你“同時”看文檔和聽歌這類事。
站在程序的視角,在陣列上顯示一個 B,總共分 8 步:
陣列組織方式,除了在顯示上面派用場,在內存中、鍵盤中同樣可以采用類 似的方法。比如說鍵盤:
不難理解,當按鍵查詢程序運行一個周期所需要的時間小于你的手指按下一個按鍵的時間時,無論你怎么去按下按鍵,都能被程序檢測到!假如你是超人:手指按鍵速度超過程序速度,那當然按鍵就不能再響應你了:)這種玩弄時間的 伎倆終于被識破了(壞笑)。
最后上一個案例給讀者自己琢磨:
手握一支筆尖帶有一個感光器 的光筆,當光強大于一個設定的幅度時,光筆 輸出信號1,否則輸出信號0。現在要實現光筆在LED陣列上繪畫的功能,站在程 序的角度,程序該怎么做?總共分幾步?別忘了利用時間變戲法哦,別問我為什 么不需要觸摸屏,奧秘全在于對時間的理解。
舉了那么多栗子夠累的,下面我們來玩一玩概念。學概念是最占便宜的行當, 既能快速理解,又不需要花太大成本,然后搖身一變,就能裝個專家了!這里當 然還是說與時間有關的事,來談一談實時系統。
實時系統是什么?實時是啥意思?立即、馬上的意思?可能差不多吧。但是 立即又是多長時間呢?馬上又是多長時間呢?了解分時系統的讀者可能會本能的理解字面意思:把系統分為分時系統和實時系統兩大類,分時系統是過時的老技術,實時系統比較高大上。真是這樣嗎?這些理解會把人帶到溝里去的。
看看百度怎么說:一個實時系統是指計算的正確性不僅取決于程序的邏輯正 確性,也取決于結果產生的時間,如果系統的時間約束條件得不到滿足,將會發 生系統出錯。所謂“實時”,是表示“及時”,而實時系統是指系統能及時響應 外部事件的請求,在規定的時間內完成對該事件的處理,并控制所有實時任務協 調一致的運行。
首先實時系統并非一定是計算機系統,比如執行攔截任務導彈的發射電路, 要求從按鈕按下到導彈發射的時間間隔必須小于一個值,否則將錯過攔截目標而 導致任務失敗。也就是說,實時系統除了對功能有要求外,對時間也有要求。按鈕按下能夠使火箭發射是功能,按下按鈕之后在要求的時間限制內使火箭發射是時間!
既然是“實時”表示“及時”的意思,那難道分時系統就不及時了嗎?問到 點子上了,事實上,實時系統與分時系統并非并列相對的,它們根本就是兩個不 同的概念。分時系統主要是指計算機操作系統,而實時系統是一個大概念,它也 包括操作系統。如果在分時系統上增加對時間的約束管理,使得任務的執行時間 能夠預知和可控,那么這個分時系統同時又是一個實時系統。
為了加深認識,舉一個極端的例子:
在一艘游輪安裝有一個礁石避讓系統,這個系統由聲吶裝置和舵機控制兩大 部分組成,聲吶裝置探測半徑為2海里,游輪的最高速度20節(海里每小時), 那么從探測到障礙到游輪觸礁的時間最快是6分鐘,而舵機轉向之后到游輪改變 航道需要4分鐘。那就要求礁石避讓系統從接收到障礙信號到輸出控制舵機轉向 的時間必須小于2分鐘。只要這個2分鐘的要求能夠滿足,那么這個礁石避讓系 統就是一個實時系統!
實時系統在概念上又有強實時和弱實時之分,或叫硬實時和軟實時之分:強 實時系統(Hard Real-Time):在航空航天、軍事、核工業等一些關鍵領域中, 應用時間需求應能夠得到完全滿足,否則就造成如飛機失事等重大地安全事故,造成重大生命財產損失和生態破壞。因此,在這類系統的設計和實現過程中,應 采用各種分析、模擬及形式化驗證方法對系統進行嚴格的檢驗,以保證在各種情 況下應用的時間需求和功能需求都能夠得到滿足。
弱實時系統(Soft Real-Time):某些應用雖然提出了時間需求,但實時任 務偶爾違反這種需求對系統的運行以及環境不會造成嚴重影響,如 視頻點播(Video-On-Demand,VOD)系統、信息采集與檢索系統就是典型的弱實時系統。在VOD系統中,系統只需保證絕大多數情況下視頻數據能夠及時傳輸給用戶即可, 偶爾的數據傳輸延遲對用戶不會造成很大影響,也不會造成像飛機失事一樣嚴重的后果。
寫在 最后:其實,在時間的世界里,沒有“久”、“立即”、“馬上”、“瞬間”,時間就是一個可以用數字衡量的東西,我們的直覺和感官范圍太小,所有的感覺都建立在 相對的基礎上。有句諺語說:飯是要一口一口吃的,事情是一件一件做的,路是 一步一步走的!就是要我們認識到時間的特性,為什么一些人可以從容面對和處 理非常多的事,而大部分人總是只能做一件事,事情多了就煩躁,失去頭緒,因 為他潛意識想所有的事情同時得到解決,然后就亂了方寸。從微觀的角度,站在 程序的視角也是如此,程序是一個指令一個指令的往下執行的,語句是一句一句 往下走的,不是所有的功能和信號都是同時發生的!即使你感覺到它們是同時發 生的,那極有可能你被“欺騙”了。
假使一個程序周期就是一次生命的話,你的人生就是一部進化史。當一個鍵 盤掃描程序全部代碼的意義發生在某個方波的下降沿附近的某個位置時,它掃到 了一個按鍵。當你的人生發生在人類進化史上的某個細微的角落時,你干了一些 有意義的事情。李白的人生、成吉思汗的人生、耶穌的人生、爺爺的人生、爸爸 的人生、你自己的人生,相對于地球時間而言,就如同一個程序周期發生在一連 串信號中某個方波的溝溝里面,性質是一樣的。無論你怎樣生活,無論是秉承金 錢至上還是頓悟出道的理念,無論你有或沒有偉大的目標,無論你信不信上帝, 時間就這樣一如既往,讓每個人的人生成為它的一個瞬間。
人的聰明,就在于你能夠突破感官,意識到眼見并非為實,去理解那些你身 體感官永遠感受不到的事實。希望本文能夠對讀者有所啟發。
審核編輯:黃飛
-
led
+關注
關注
242文章
23362瀏覽量
663222 -
單片機
+關注
關注
6043文章
44621瀏覽量
638584 -
顯示器
+關注
關注
21文章
5010瀏覽量
140409 -
晶振
+關注
關注
34文章
2899瀏覽量
68316 -
脈沖信號
+關注
關注
6文章
400瀏覽量
37078
發布評論請先 登錄
相關推薦
評論