0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

認(rèn)識(shí)固件是干什么的?

單片機(jī)與嵌入式 ? 來源:單片機(jī)與嵌入式 ? 作者:單片機(jī)與嵌入式 ? 2022-10-26 10:58 ? 次閱讀

現(xiàn)如今,軟件和硬件之間的界限已經(jīng)越來越模糊了,那么處于這個(gè)灰色地帶的,就是固件。于是,這就分成了三類工作者:

一是,軟件工程師一般指做圖形界面的程序員,工作內(nèi)容就是寫C++、JAVA、Web等。

二是,硬件工程師當(dāng)然是指玩電路板的,工作內(nèi)容就是畫原理圖、PCB等。

三是,固件工程師也叫單片機(jī)工程師,既寫代碼(主要是C語言、匯編)又要畫電路圖。

玩單片機(jī)的人,可能會(huì)有個(gè)疑問,為什么我寫的C語言能操作到底層的硬件?其實(shí)在《計(jì)算機(jī)組成原理》已經(jīng)有很詳細(xì)的介紹了。

我這里粗略地介紹一下,這個(gè)原理。

首先,你可以搜索一下“從零開始造電腦”,這位叫Steve的大神,就告訴你,用晶體管可以做出CPU(單片機(jī)也是CPU)。

當(dāng)然,我們現(xiàn)在可不會(huì)落后到需要到晶體管來制造電腦。

接下來,你可以看一部叫《喬布斯》的電影,劇中就給你展示蘋果公司的第一臺(tái)計(jì)算機(jī)。

嘿嘿,看到那些黑色的芯片沒有?還有兩個(gè)大大的變壓器。這說明了在大學(xué)玩單片機(jī)的時(shí)代,就相當(dāng)于回到蘋果公司的初始時(shí)期!是不是很激動(dòng)人心?

其實(shí)你可以用74系列的邏輯IC、單片機(jī)等,來搭建一個(gè)屬于自己的計(jì)算機(jī)。這就是說人們把若干個(gè)晶體管集成為一塊74系列的IC,如果集成度更高呢?那就是手機(jī)或者臺(tái)式機(jī)用的多核CPU了。

好,介紹了這些古董之后,就讓你有個(gè)認(rèn)識(shí),計(jì)算機(jī)本質(zhì)上是N個(gè)晶體管的組合,也是數(shù)字邏輯芯片的組合,更高級(jí)的,就是一塊數(shù)?;旌系男酒?,具體形式是由你的工藝決定的?,F(xiàn)在回到正題,介紹一下數(shù)電的基礎(chǔ)知識(shí)。

因?yàn)镃PU主要功能是計(jì)算,也就是可以直接運(yùn)用數(shù)學(xué)知識(shí)來解決問題,這里就舉個(gè)例子介紹一下,CPU如何計(jì)算加法,也就是用數(shù)電里的門電路搭一個(gè)加法器。

bda97d18-5456-11ed-a3b6-dac502259ad0.png

怎樣用晶體管搭這些與、或、非門就不說了,不懂的,可以翻書。上圖就告訴你,可以用這些門電路搭一個(gè)加法器。

怎樣輸入Ai=0,Bi=1,Ci=0?用74系列的IC的話,可以直接把Ai,Ci接GND,Bi接VCC,就實(shí)現(xiàn)加法了。而在CPU內(nèi)部也是一樣可以這樣做的,但是CPU可沒那么死板,只算常數(shù)的加法。

bdccb35a-5456-11ed-a3b6-dac502259ad0.jpg

上圖中,藍(lán)色箭頭指向的1,就是接VCC的,而紅色箭頭,就是接GND。

在CPU內(nèi)部,還有ROM,它可以把你要計(jì)算的加數(shù)和被加數(shù)存進(jìn)去(ROM輸出的高低電平,跟你接GND和VCC是一樣的效果),而結(jié)果則存在寄存器(先暫存,以備后面使用)。

現(xiàn)在有個(gè)問題,如果加完之后還要計(jì)算乘法(在信號(hào)處理領(lǐng)域的卷積運(yùn)算的核心單元就是乘加器),怎么辦?誰來自動(dòng)完成這個(gè)動(dòng)作?幸好,CPU里面有個(gè)叫ALU(算術(shù)邏輯單元)來處理這件事情。

be256e14-5456-11ed-a3b6-dac502259ad0.jpg

這里的控制單元,就把ROM里面的數(shù)據(jù)取出來,再用選擇器,來調(diào)用加法器和乘法器,最終把結(jié)果存到寄存器中。

如果ROM里面只存數(shù)據(jù),那是無法讓控制單元知道,你要執(zhí)行加法還是乘法,要解決這個(gè)問題,就需要在ROM里面再劃分一個(gè)區(qū)域,存放指令碼。

這個(gè)指令碼,跟數(shù)據(jù)是一樣,都是0、1的二進(jìn)制數(shù),只是用途不同,所以起了不同的名字。

其實(shí)這個(gè)指令碼,對(duì)應(yīng)在單片機(jī)里面的匯編語言,就是操作碼(如:MOV);而操作數(shù)就是數(shù)據(jù)(如:01H)。具體的,可以看看單片機(jī)的教材。

根據(jù)指令碼的設(shè)計(jì)方法來分,有四種,分別是CISC、RISC、VLIW、TTA,具體區(qū)別可以看計(jì)算機(jī)組成原理。

而PC(程序計(jì)數(shù)器)就是控制ROM的地址,現(xiàn)在你要知道PC是不能出錯(cuò)的,一旦出錯(cuò),就意味著單片機(jī)不按照你的代碼來工作。

現(xiàn)在,我在8位的CPU的ROM里面,第一個(gè)地址存了0x03這個(gè)指令碼來代表加法,而在第二、三個(gè)地址存了加數(shù)和被加數(shù),然后在第四個(gè)地址存了0x05代表乘法,在第五、六個(gè)地址存了乘數(shù)和被乘數(shù)。

那么,按照一定的規(guī)則來設(shè)計(jì)控制單元(這個(gè)規(guī)則可以自己定義的),它就知道0x03是要執(zhí)行加法。

那么這個(gè)規(guī)則如何設(shè)計(jì)?最簡單的,就是用與門了,然后輸出一個(gè)使能信號(hào),讓加法器工作,就跟上面的74LS160差不多。

但是CPU可沒那么簡陋,它可以使用狀態(tài)機(jī)、流水線等,來控制這些基本單元(如:加法器、乘法器),如下圖所示:

be4eb648-5456-11ed-a3b6-dac502259ad0.jpg

說到這里,你至少應(yīng)該知道,我們只要改變ROM的內(nèi)容,就可以操作CPU內(nèi)部的ALU,從而操作CPU的各個(gè)硬件單元了。

下面給出相對(duì)完整一點(diǎn)的ALU內(nèi)部結(jié)構(gòu)圖:

be6c4082-5456-11ed-a3b6-dac502259ad0.jpg

ROM的內(nèi)容本質(zhì)上是一些電荷量(電容上有、無電荷,代表二進(jìn)制的1和0),也就是固件、軟件工程師寫的代碼。而硬件,就是由晶體管搭建的數(shù)字、模擬電路(如:單片機(jī)內(nèi)部的比較器ADC等)。

所以硬件是物理器件,不容易更改;而ROM的內(nèi)容完全可以用燒錄器就輕松改變它,修改成本非常低,而且很靈活。

在這里,你很難表述,這些電荷量是軟件還是硬件,但是CPU的這種結(jié)構(gòu),導(dǎo)致了兩種不同類型的工作者,我們稱他們?yōu)檐浖こ處熀陀布こ處?。而單片機(jī)程序員寫的代碼,跟硬件密切相關(guān),而且一旦完成之后,很少需要修改的(不像軟件工程師修改的那么頻繁),我們稱之為固件。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209371
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7174

    瀏覽量

    87157
  • 固件
    +關(guān)注

    關(guān)注

    9

    文章

    532

    瀏覽量

    22767

原文標(biāo)題:認(rèn)識(shí)固件是干什么的?

文章出處:【微信號(hào):單片機(jī)與嵌入式,微信公眾號(hào):單片機(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    本人小白,求解labview的FPG是干什么的

    labview的FPG是干什么的
    發(fā)表于 11-16 16:26

    四軸是用來干什么的?

    四軸是用來干什么的?只是個(gè)工具還是要在上面改裝(比如搭載各種傳感器)?普通的四軸玩具根本不能載重,大的又那么貴……
    發(fā)表于 08-30 21:50

    LABVIEW里面做吉利時(shí)的源表的程序時(shí)用node是干什么的?node in和node out是干什么的?

    LABVIEW里面做吉利時(shí)的源表的程序時(shí)用node是干什么的?node in和node out是干什么的?
    發(fā)表于 12-11 21:08

    求大神告知這是干什么的

    我想知道這個(gè)主要是用來干什么的,然后通俗一點(diǎn)講是干什么的,然后有沒有人能做出它的編譯,或者能不能發(fā)一點(diǎn)類似的編譯,謝謝謝謝。
    發(fā)表于 11-13 19:39

    請問VFILT是接哪里的?那個(gè)電感是干什么的

    1,VFILT是接哪里的?2,那個(gè)電感是干什么的?
    發(fā)表于 06-06 00:47

    ar識(shí)別圖是干什么的

    `  誰知道ar識(shí)別圖是干什么的?`
    發(fā)表于 08-27 16:43

    覆銅板是干什么的

    `  誰來闡述一下覆銅板是干什么的?`
    發(fā)表于 01-07 15:18

    RTCALRMbits.AMASK是干什么的

    RTCALRMbits.AMASK是干什么的?有人能解釋一下我的選擇嗎?
    發(fā)表于 04-30 09:59

    請問抽樣定理是干什么的

    什么是卷積? 卷積有什么用? 什么是傅利葉變換? 什么是拉普拉斯變換?到底什么是頻率?什么是系統(tǒng)?抽樣定理是干什么的?傅立葉變換的復(fù)數(shù) 小波
    發(fā)表于 12-21 06:11

    伺服電機(jī)是用來干什么的?

    伺服電機(jī)是用來干什么的?編碼器由哪些部分組成?工作原理是什么?
    發(fā)表于 09-28 07:20

    nodemcu每個(gè)模塊都是干什么的

    image.png來看一下每個(gè)模塊都是干什么的:官方固件下載: 機(jī)翻簡單校對(duì), 有些模塊我也不太懂)中文說明.
    發(fā)表于 11-04 08:58

    晶圓廠是干什么的

    本文開始介紹了晶圓廠是干什么的,其次分析了半導(dǎo)體晶圓廠是否有毒,最后介紹了晶圓廠面臨的新挑戰(zhàn)以及中國晶圓廠面臨的挑戰(zhàn)。
    的頭像 發(fā)表于 03-16 11:46 ?10.5w次閱讀

    軟件需求開發(fā)工程師是干什么的

    很多人都知道程序員是干什么的,但是可能對(duì)需求開發(fā)這些人在做啥會(huì)不了解。
    的頭像 發(fā)表于 03-13 15:01 ?3910次閱讀

    云服務(wù)器是干什么的

     云服務(wù)器是干什么的?很多小白用戶會(huì)有疑惑,今天小編為您整理云服務(wù)器是干什么的相關(guān)資料,希望對(duì)您了解云服務(wù)器是干什么的有幫助。
    的頭像 發(fā)表于 02-18 09:58 ?1308次閱讀

    美國云服務(wù)器是干什么的

    對(duì)于美國服務(wù)器是干什么的,相信很多小白用戶不是非常了解,接下來小編就為您整理發(fā)布美國云服務(wù)器是干什么的相關(guān)資訊,希望對(duì)您有幫助。
    的頭像 發(fā)表于 02-19 09:53 ?339次閱讀