軟件是怎樣控制硬件的?

是不是軟件想要的功能,硬件都能實現?
10 個回答
口口木的笔记
2019-02-17

軟件和硬件的關係,我不認為是簡單的誰控制誰的問題,而是相互依存的關係。

如果把軟件和硬件作為一個整體的話,用人來做一個對比,自認為可以說清這種關係。
軟件是怎樣控制硬件的?


軟件基本上就是一些人為定義好的邏輯,它是一種思想,就像人的思想一樣,所以CPU是人的大腦,而CPU裡寫的軟件就是人腦中的思想。

我們這裡說的硬件是一些CPU以外的各種電路,這些電路連接到CPU。有些電路是用來採集外界的信息,比如溫度、溼度、電壓、電流、光線、圖像、聲音、氣味等等,將這些信息傳遞給CPU。而有些電路是接收CPU發出的指令,按不同的電路實現不同的功能。比如,發出一個關燈的指令,相應電路接收到該指令後實施關燈的動作。

下面用開燈的過程分別用人和軟件硬件來作一個對比:

  • 人: 我在家裡看書,太陽落山了,天漸漸變黑,我發現看不清字了,這時我想到要去把燈打開,所以我走到開關邊上,伸出手按下開關,這時燈亮了,我又可以繼續快樂的看書。
  • 軟件硬件: 我家裡有一套電燈控制系統,工作原理是,光線檢測電路檢測到光線變暗了,它發出一個信號告訴CPU光線已經較暗了,CUP收到該信息後,其軟件邏輯為需要把燈打開,所以CPU輸出開燈的指令,電燈控制電路接到指令後接通電燈的開關,這時燈亮了。

該對比我們可以發現下面的對應關係:
軟件是怎樣控制硬件的?

口口木的筆記 2019-2-16

宏150411970
2019-10-05

哈哈,我也被這個問題困擾了很久。

其實從本質上來說並沒有軟件去控制硬件,而是硬件自己的循環控制。簡單來說就是你在鍵盤上按一下按鍵,產生高低電壓(簡單的就是這麼說了,當然還有一堆的編碼什麼的),然後這個電壓被存儲在ROM(只讀寄存器)。然後處理器加載存儲的這個高低電壓,執行工作。想象一下,如果cpu只是一個n-mosfet,當g極讀取到高電壓時,產生一個大於閾值電壓的vgs,那麼ds導通,就可以控制一個燈亮,當讀取到低電壓燈就滅。當然處理器的處理能力遠遠不止於此,所以就產生了軟件這個概念,讓我們可以輸入更復雜的控制內容。請記住你看到的在電腦屏幕上密密麻麻的字母並不是軟件,而是一段助記符,真正的軟件是你在按下鍵盤的時候產生的高低電壓。

處理器最基本的是架構,比如酷睿,奔騰,這個就是架構,如果把一個處理器比喻為一個工廠,那麼這個架構就是工廠的整體框架,幾個進料口(單核,雙核,四核等等),倉庫有多大,取料的方式等等。然後到指令集,這個是由一堆門電路硬件構成的最小功能執行單元,也是所謂的軟件和硬件的接口,目前分為複雜指令集CISC和精簡指令集RISC。x86就是CISC,ARM就是RISC。正因為這是軟件和硬件的接口,導致了同一套系統Windows不能同時在兩個指令集平臺運行。Intel 和AMD雖然架構不同,但是指令集是兼容的,所以我們安裝Windows的時候基本是同一套。關於指令集,在微機原理裡面有介紹。

好了因為指令集是軟件和硬件的接口,軟件的編程就必須按照這個接口規範來編寫了。當然現在的高級語言編程並不用知道這些,你只要關心編程的語法和你的邏輯就可以,因為編譯器已經幫你做好了這個工作,一系列的編譯,彙編,鏈接之後,你就獲得了一個包含01的可執行文件,在存儲裡面就是表現為高低電壓。然後這段高低電壓送入處理器,經過處理器後就輸出你想要的結果,達到軟件控制硬件的目的。

請記住,本質並沒有軟件控制硬件,你是不能用意念控制一個東西一個道理,而是硬件控制硬件。軟件是為了高效的輸入你的控制指令而發展起來的一套系統化的東西。

嵌入式疯狗
2019-02-19

利益相關,從業十年的高級固件工程師,主持設計多個爆款智能硬件,歡迎關注。

軟件是怎樣控制硬件的?

軟件和硬件的關係,可以類比為大腦和人體各個器官的關係。

軟件就像大腦,硬件就好比各個身體的器官,我們可以在大腦的控制下完成各種複雜的動作,但是也僅限於我們的力所能及,即便我們的大腦下發了起飛的指令,人類並沒有適配翅膀這一硬件,所以並不能完成相應的功能,也就是說軟件想要的功能是受限於硬件的,理論上只要有相應的硬件,就可以開發對應的軟件來實現相應的功能,當然了這是一個系統性的工作,不是三言兩語可以說清楚的,涉及到需求分析、硬件電路設計、結構設計、軟件架構設計、信號完整性等等,每一門都是一門專業的課程,有興趣的同學可以關注瘋狗哥,後續我會不斷的更新這方面的乾貨

軟件控制硬件是通過指令實現的。

舉個簡單的例子,我們要編寫一個軟件控制單片機點亮一個LED,拿到這個任務後我們首先要查看原理圖,找到單片機控制LED的對應管腳,判斷是應該拉高GPIO管腳電平還是拉低GPIO管腳。然後我們編寫代碼,查找CPU的芯片手冊,找到控制該管腳的控制寄存器,例如CTRL&=0x01; 這樣CPU執行的到這一語句時會將內部的控制寄存器狀態改變,內部的MOS管工作,將管腳輸出高電平或者低電平,這時你就會驚奇的發現,LED亮了!


歡迎關注“嵌入式瘋狗”,手把手帶領大家進行嵌入式項目的實戰,更多幹貨內容,不要錯過喲

半只程序猿
2019-02-19

以電腦說明有點複雜,我試試用個簡單的方法解釋。

眾所周知,一個電池就能使一個小燈珠亮起來 ,如果我要那燈珠熄滅也很簡單,只需要斷開電源就行了。這一個電池,兩條電線,一個小燈珠就是一個最簡單的硬件系統,因為它們都是看得見摸得著的東西。

現在我要這燈珠自己一閃一閃,那有什麼方法呢?第一,人為的把電源接通,斷開,再接通,再斷開。但這樣做有兩個問題,既浪費了人力,還不能保證閃動的頻率相同,給人的感覺就是燈珠在亂閃,一點也不美麗。為了解決這個問題,我們再加一個時鐘芯片。由於這是令一個電子原價,它首選需要兩隻腳,一隻接電源的正極,一隻接電源的負極。另外,它還需要一隻腳接我們的小燈珠,使它工作工作。

現在我們的小燈珠在加了時鐘芯片後電源一接通就會一閃一閃了,接著新的需求來了。我們希望小燈珠在某些時候閃得快一些,那又要怎麼做呢?在時鐘芯片再加一隻腳,如果這隻腳也接正極(高電平)就快閃,否則(低電平)就慢閃。

現在我們有了一個燈珠閃爍硬件系統,但要人為的操作實在太麻煩了,所以我們把接入一個控制系統。硬件的連接完成後,我們首先要做的是告訴這個系統你多了一套硬件,你可以通過某些操作(在例子中是提供高低電平)來控制這套系統,這就是我們所說的安裝驅動程序。驅動安裝好後,系統就知道它多了一套硬件,然後就可以提供api讓它裡面的軟件也能對這個閃爍系統進行操作了。

綜上,硬件是基礎,軟件只是把硬件提供的功能以方便人們使用的方式供人們使用而已,沒了硬件的支持,什麼軟件也不可以提供閃爍的小燈珠系統。

大喵喵666
2019-07-01

這個問題很大很大。很難回答。

從物理的角度說,軟件是一種變化的電流和電壓的描述。而硬件就是各種電子元器件。

從數學的角度說,軟件是一種二進制神奇藝術,通過簡單的二進制實現了算術與邏輯,數學就是這麼神奇。硬件就是根據軟件的要求,真正去實踐“開和關”。

從普通人的角度說,硬件就是你這個人,由碳氫氧氮和各種其他元素組成的高級結合體。軟件就是你的思想,控制你的肉體。

於是這就變成一個哲學問題,思想到底是什麼?物質到底是什麼?思想本身是一種場嗎?場也有可能是物質嗎?思想和物質是不是同一種東西呢?還是交給哲學家來回答吧。

計算機是一種應用產物,就是說我們有時候不要懂為什麼。只要明白是什麼就行了。如果要問為什麼,你首先要研究“電”到底是什麼。“邏輯”和電為什麼能完美的結合。難道“電”本身也有邏輯?

我叫思无邪24791260
2019-06-30

我覺得大家都很專業,我不專業的說說只求形象,不喜勿噴。

好比有四個層面,一盞燈,一個開關,你和你媽。

你媽說兒子開燈,這時候你媽就是人機交互中的人,

你理解了你媽的意思,用手摁了開關,置於開的狀態,你就是人機界面,或者叫軟件吧,

開關完成了一個很簡單的開和關的邏輯,結果是把斷開的電路接上了,形成通路,燈有了能源。開關就是邏輯電路的重要一環。

最後燈得到了能源,實現了它預設的功能,換成電機也是一個道理。其實你根本不用關心燈或者其他什麼,是怎麼工作的,它幹它的。開關才是你要關心的。

有人就罵了,那個摁的動作才是我想問的,機器又沒手!要知道很多不用人力就可以驅動開關的元器件很多很多:比如樓梯間開關就有光控,聲控,紅外線等等。這些都可以產生摁的動作。

而硬盤,磁帶或者內存,寄存器中記錄的各種高或者低,1或者0的指令,他們本身就是高低電位,都可以代表你媽,不斷下發命令,各個層面的硬件就把這些指令通過電流或者電壓,像傳話筒一樣,或者像多米諾骨牌一樣,通過層層轉達,變成各種形態的信號,或者說類似摁的動作,最後傳到開關這個層面。

1096bimu
2019-05-12

硬件就是電路,軟件和硬件所存儲的信息的本質其實就是電路上一些開關的狀態,只不過現代計算機的集成電路規模之大使其產生質的轉變。

就最簡單的舉例,家裡走廊一盞燈有兩個開關,按其中任何一個,無論另一個開關的狀態如何,都會改變燈的狀態(開的就關,關的就開)。或者說必須兩個都是關的,燈才會關,否則就是開的。這就是一個簡單的邏輯電路,電腦就是上億個這種電路的結合體。軟件和任何存儲的信息就是這些開關的狀態,開還是關。

以廊燈的例子來說,硬件的功能是受到物理法則約束的,它的可能性只有開合關。無論你怎麼按動開關都不可能造成開燈和關燈以外的狀態。電腦也是一個道理,任何被物理法則允許的硬件行為理論上都有可能用軟件實現。比如說手機的顯示屏理論上可以顯示任何畫面,閃光燈可以用來發光(到一定的亮度),揚聲器可以用來說話等。但是沒有軟件可以讓手機飛起來變成無人機。

軟件和信息本身也是沒有明確分界線的,現代操作系統因為內存很大所以可以人為劃分哪些信息是用來定義邏輯關係,哪些是要用來運算的。幾十年前電腦剛發明的時候內存受限制,軟件和信息都是混合在一起錄入的以節省內存和帶寬。現代的劃分只是方便人類程序員去理解程序的工作方式。

东渡科技
2019-05-13

關於這個問題,已經寫成一篇文章,內容如下,要想深入瞭解計算機,先學一下操作系統和微機原理吧!

軟件怎麼控制硬件的,不是一言半語就能說的清楚的,其過程是很複雜的,這裡就簡單說一下原理吧,沒有看過微機原理和操作系統相關的介紹聽起來應該會比較吃力。我們所說的軟件,其實就是一套操作計算機運行的機制,裡面的所有功能,不論大小,都是需要硬件配合才會展示出來的。在軟件中,需要編程語言,這些編程語言都是高級語言,這些高級語言是為了我們更容易編譯操作而編寫的,硬件是看不懂的,是需要經過翻譯,翻譯成為機器語言,然後計算機才看的懂,進而執行簡單的操作。無數簡單的操作就成了軟件所需要的功能,然後通過機器展示出來。

機器語言是非常簡單的,因為機器的每個部件的功能都是固定的,所以要完成一個複雜的動作,需要把相關的部件按一定的規律有序完成才行,這其中有多複雜想想也應該知道。機器能接受的指令就只有有2個,固定一個動作,做或不做,在計算機中是以2進制標記的,也就是1和0,指令為1,就做該動作一次,指令為0,就不做該動作。大量固定的動作根據一定的規律有序的成功做完,就組成軟件中所需要完成的一個功能。這就和彈鋼琴是一樣的,每一個音符需要你按一個鍵,每按一次就是一次動作,大量有序的按鍵就展示出了一首曲子,計算機的動作和鋼琴的琴鍵是一樣的道理。

軟件是怎樣控制硬件的?

最早的時候,軟件編程就是大量的機器指令堆砌,工作量非常龐大,且內容複雜無比,維護起來非常麻煩,所以才有機器語言的誕生,就是計算機出廠前計術人員已經把固定的指令操作打包了組成了一個又一個的相對複雜功能,只要計算機軟件調用觸發這些功能就可以展示相應的功能了,這一層的語言就是計算機語言了,彙編語言就是這一層面的,彙編編程是非常麻煩的,代碼量大,工作量也嚇人,但是,功能和運行速度也強悍的嚇人,任何高級語言都無法比擬,算是軟件開發真正的核心技術所在。

我們現在所說的軟件編程,用的就是比計算機語言高一層的語言,也就是高級語言,像如今流行的語言C/C++、Java、PHP、js等都是高級語言。用這些高級語言幾行代碼展示的功能,在計算機執行的時候仍然是非常複雜的行為,所以不要認為會編程就認識了計算機,真正深究,核心技術的複雜程度絕對超乎你的想象。

看到這裡,心理是不是已經有了答案,硬件是不可能完成你所有想要的功能的,軟件可以展示的功能都是計算機固有的功能,功能有多強大主要取決於計算機的硬件。簡單來說,軟件就像是人的思想,硬件就是人的身體,身體的所有動作都是思想賦予的。但不合實際的想法身體是不可能完成的。

文章原文:http://www.toutiao.com/i6419069886462427649/

更多軟件學習相關知識,請搜索東渡科技。

有初有终
2019-03-28

軟件代碼編譯後文件保存的內容都是由二進制0和1組成的

  • 在機械硬盤中,這些0和1用磁性材料保存,磁化方向不同分別表示0和1

軟件是怎樣控制硬件的?硬件控制的是電信號,在電路中用電壓的高低來表示1和0 。

  • 比如大於3.5伏的電壓表示數字1,小於0.3伏的電壓表示數字0。

然後將電信號的0和1與存儲器中存儲的0和1進行耦合,使其可以相互轉化。

首先,內存與硬盤進行數據傳輸,將編譯好的二進制代碼存入內存

內存讀取這些存儲數據,就是通過不同的磁化方向將0和1轉化成電壓高低不同的電信號傳入內存中

然後CPU通過數據總線對內存尋址,找出需要執行的指令,然後將該指令對應的高低電壓信號傳入CPU中,並執行指令,輸出的結果也是一串高低電壓的電信號

最後通過驅動程序暴露的接口將指令結果傳輸給硬件的控制芯片,對硬件進行控制。硬件的控制芯片中已經提前刻入了控制指令集,然後指令集對控制器傳入的一串高低電壓信號進行分析,只要指令結果跟控制指令一致,則完成相應動作。

軟件是怎樣控制硬件的?

洛河献碑
2019-04-30

看了不少答案回答比較專業,比如0和1,高電平低電平,CPU,場效應管,放大電路。其實提這樣問題的人都是不懂這些專業知識的,很多人看了這麼多人的答案,還是沒明白軟件到底是怎麼控制硬件的。我打個比方,你輕輕踩下油門,幾十噸的卡車就能跑起來,這是小力控制大力,你用踩油門的小力來控制能讓幾十噸卡車跑起來的大力量。而電腦裡就是小電壓小信號來控制大電壓大電流。當你敲擊一下電腦鍵盤,產生了一非常小的電壓信號給電腦,這個電壓信號經過電腦裡面的放大,可以控制一USB口5V的通斷,這個通斷能控制一個繼電器線圈的通斷,線圈通斷控制兩邊觸點通斷,就可以控制交流接觸器的線圈, 從而控制更大功率的電器,理論上可以無限放大,只要你有充足電源供應就行。所以你敲擊一下鍵盤,可以發射導彈,可以發動火車飛機,甚至可以毀滅地球(發射核武器)。這裡需要說明,你必須明白接觸器線圈的小電流控制其大電流的觸點的原理,如果接觸器你也不明白,看多少答案也是白看。綜上所述所謂的軟件控制硬件,其實就是小信號小電壓小電流控制大電流大電壓的過程,其實就是一個不斷放大的過程。就像用鑰匙鎖門一樣,你輕輕擰一下鑰匙鎖上門,別人用幾百斤的力都撞不開門一樣,不懂的百度自行補腦,我這麼通俗的講如果你還不明白,以後也就不用明白了!

相關推薦

推薦中...