91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

為什么我寫的C語言能操作到底層的硬件?

Q4MP_gh_c472c21 ? 來源:嵌入式ARM ? 作者:嵌入式ARM ? 2020-11-16 16:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

軟件跟硬件之間的界限已經越來越模糊了,那么處于這個灰色地帶的,就是固件了。這就分成三類工作者。

1、軟件工程師一般指做圖形界面的程序員,工作內容就是寫C++、JAVA、Web等。 2、硬件工程師當然是指玩電路板的,工作內容就是畫原理圖、PCB等。 3、固件工程師也叫單片機工程師,既寫代碼(主要是C語言匯編)又要畫電路圖。


玩單片機的人,可能會有個疑問,為什么我寫的C語言能操作到底層的硬件?其實在《計算機組成原理》已經有很詳細的介紹了。 我這里粗略地介紹一下,這個原理。
首先你可以搜索一下“從零開始造電腦”,這位叫Steve的大神,就告訴你,用晶體管可以做出CPU(單片機也是CPU)。

當然,我們現在可不會落后到需要到晶體管來制造電腦。 接下來,你可以看一部叫《喬布斯》的電影,劇中就給你展示蘋果公司的第一臺計算機。

嘿嘿,看到那些黑色的芯片沒有?還有兩個大大的變壓器。這說明了在大學玩單片機的時代,就相當于回到蘋果公司的初始時期!是不是很激動人心? 其實你可以用74系列的邏輯IC、單片機等,來搭建一個屬于自己的計算機。這就是說人們把若干個晶體管集成為一塊74系列的IC,如果集成度更高呢?那就是手機或者臺式機用的多核CPU了。 好,介紹了這些古董之后,就讓你有個認識,計算機本質上是N個晶體管的組合,也是數字邏輯芯片的組合,更高級的,就是一塊數模混合的芯片,具體形式是由你的工藝決定的?,F在回到正題,介紹一下數電的基礎知識。 因為CPU主要功能是計算,也就是可以直接運用數學知識來解決問題,這里就舉個例子介紹一下,CPU如何計算加法,也就是用數電里的門電路搭一個加法器。

怎樣用晶體管搭這些與、或、非門就不說了,不懂的,可以翻書。上圖就告訴你,可以用這些門電路搭一個加法器。 怎樣輸入Ai=0,Bi=1,Ci=0?用74系列的IC的話,可以直接把Ai,Ci接GND,Bi接VCC,就實現加法了。而在CPU內部也是一樣可以這樣做的,但是CPU可沒那么死板,只算常數的加法。

上圖中,藍色箭頭指向的1,就是接VCC的,而紅色箭頭,就是接GND。 在CPU內部,還有ROM,它可以把你要計算的加數和被加數存進去(ROM輸出的高低電平,跟你接GND和VCC是一樣的效果),而結果則存在寄存器(先暫存,以備后面使用)。 現在有個問題,如果加完之后還要計算乘法(在信號處理領域的卷積運算的核心單元就是乘加器),怎么辦?誰來自動完成這個動作?幸好,CPU里面有個叫ALU(算術邏輯單元)來處理這件事情。

這里的控制單元,就把ROM里面的數據取出來,再用選擇器,來調用加法器和乘法器,最終把結果存到寄存器中。 如果ROM里面只存數據,那是無法讓控制單元知道,你要執(zhí)行加法還是乘法,要解決這個問題,就需要在ROM里面再劃分一個區(qū)域,存放指令碼。 這個指令碼,跟數據是一樣,都是0、1的二進制數,只是用途不同,所以起了不同的名字。 其實這個指令碼,對應在單片機里面的匯編語言,就是操作碼(如:MOV);而操作數就是數據(如:01H)。具體的,可以看看單片機的教材。 根據指令碼的設計方法來分,有四種,分別是CISC、RISC、VLIW、TTA,具體區(qū)別可以看計算機組成原理。 而PC(程序計數器)就是控制ROM的地址,現在你要知道PC是不能出錯的,一旦出錯,就意味著單片機不按照你的代碼來工作。 現在,我在8位的CPU的ROM里面,第一個地址存了0x03這個指令碼來代表加法,而在第二、三個地址存了加數和被加數,然后在第四個地址存了0x05代表乘法,在第五、六個地址存了乘數和被乘數。那么,按照一定的規(guī)則來設計控制單元(這個規(guī)則可以自己定義的),它就知道0x03是要執(zhí)行加法。 那么這個規(guī)則如何設計?最簡單的,就是用與門了,然后輸出一個使能信號,讓加法器工作,就跟上面的74LS160差不多。 但是CPU可沒那么簡陋,它可以使用狀態(tài)機、流水線等,來控制這些基本單元(如:加法器、乘法器),如下圖所示。

說到這里,你至少應該知道,我們只要改變ROM的內容,就可以操作CPU內部的ALU,從而操作CPU的各個硬件單元了。 下面給個相對完整一點的ALU內部結構圖。

ROM的內容本質上是一些電荷量(電容上有、無電荷,代表二進制的1和0),也就是固件、軟件工程師寫的代碼。而硬件,就是由晶體管搭建的數字、模擬電路(如:單片機內部的比較器、ADC等)。所以硬件是物理器件,不容易更改;而ROM的內容完全可以用燒錄器就輕松改變它,修改成本非常低,而且很靈活。 在這里,你很難表述,這些電荷量是軟件還是硬件,但是CPU的這種結構,導致了兩種不同類型的工作者,我們稱他們?yōu)檐浖こ處熀陀布こ處煛6鴨纹瑱C程序員寫的代碼,跟硬件密切相關,而且一旦完成之后,很少需要修改的(不像軟件工程師修改的那么頻繁),我們稱之為固件。

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6077

    文章

    45528

    瀏覽量

    672068
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11305

    瀏覽量

    225479
  • 軟件
    +關注

    關注

    69

    文章

    5341

    瀏覽量

    91719

原文標題:軟硬件之間其實還有一個固件! 你知道嗎?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    直播 | 睿擎平臺AMP混合部署:你的Qt界面如何“指揮”底層電機?

    )晚8點,我們將通過一場直播,把這些問題一次性講透。直播核心內容本次直播將以睿擎派RC3506J為硬件平臺,完整演示從Qt界面開發(fā)到底層電機驅動的全流程:1、Qt
    的頭像 發(fā)表于 03-03 19:33 ?454次閱讀
    直播 | 睿擎平臺AMP混合部署:你的Qt界面如何“指揮”<b class='flag-5'>底層</b>電機?

    直播預告 | 睿擎平臺AMP混合部署:你的Qt界面如何“指揮”底層電機?

    )晚8點,我們將通過一場直播,把這些問題一次性講透。直播核心內容本次直播將以睿擎派RC3506J為硬件平臺,完整演示從Qt界面開發(fā)到底層電機驅動的全流程:1、Qt
    的頭像 發(fā)表于 02-27 18:18 ?280次閱讀
    直播預告 | 睿擎平臺AMP混合部署:你的Qt界面如何“指揮”<b class='flag-5'>底層</b>電機?

    C語言重點—指針篇

    C語言是比較偏底層語言,為什么他比較偏底層,就是因為他的很多操作都是直接針對內存
    發(fā)表于 01-22 08:23

    C語言主要特點

    。 5.語法限制不太嚴格,程序設計自由度大。 6.C語言允許直接訪問物理地址,能進行位(bit)操作,能夠實現匯編語言的大部分功能,可以直接對硬件
    發(fā)表于 01-05 07:41

    為什么c語言沒有輸出?

    c語言程序的時候,經常在程序編譯的時候沒有輸出,經總結,發(fā)現有以下原因: 1、scanf里沒有加 。 2、邏輯問題,可能沒有輸入,才沒有輸出。 3、輸入scanf(\"%d
    發(fā)表于 01-05 06:40

    C語言單元測試在嵌入式軟件開發(fā)中的作用及專業(yè)工具的應用

    效率極高,能夠直接訪問硬件資源,與底層硬件進行緊密交互,充分發(fā)揮硬件的性能潛力 ?硬件直接操作
    發(fā)表于 12-18 11:46

    C語言特性

    1、高效性:直接操作硬件 C 語言代碼的執(zhí)行效率極高,這是其最為顯著的優(yōu)勢之一。它能夠直接訪問硬件資源,與
    發(fā)表于 11-24 07:01

    C語言在嵌入式開發(fā)中的應用

    發(fā)動機的最佳性能和燃油經濟性。C 語言的高效性和對硬件的直接操作能力,使得它能夠滿足 ECU 對實時性和精確性的嚴格要求。據統計,全球超過 80% 的汽車 ECU 軟件都是用
    發(fā)表于 11-21 08:09

    C語言和單片機C語言有什么差異

    語言的功能特性外,它可以很好的操作底層硬件接口。在C語言的基礎上,如果你把一些單片機的端口或特
    發(fā)表于 11-14 07:55

    一文了解Mojo編程語言

    和 MLIR(多級中間表示)技術,Mojo 的性能接近 C++,甚至在某些任務中比 Python 快數萬倍。 支持直接操作硬件資源,如內存管理和 SIMD(單指令多數據)指令,適合高性能計算需求。 系統級
    發(fā)表于 11-07 05:59

    ElfBoard科普課堂|為什么C語言在嵌入式技術領域中的地位難以撼動?

    在嵌入式技術領域,“C語言硬件”的組合,常被比作計算機體系中的“二進制與晶體管”——它們是無數智能設備穩(wěn)定運行的底層支柱,貫穿了嵌入式應用的核心環(huán)節(jié)。
    的頭像 發(fā)表于 11-06 10:00 ?6984次閱讀
    ElfBoard科普課堂|為什么<b class='flag-5'>C</b><b class='flag-5'>語言</b>在嵌入式技術領域中的地位難以撼動?

    深度剖析Nios II 處理器的硬件抽象層

    )與ANSI C標準庫綜合在一起,可使用類似C語言的庫函數來訪問硬件設備或文件,如printf()、fopen()、fwrite()等函數。軟件工程師可非常方便的使用這些函數來與
    的頭像 發(fā)表于 10-31 15:25 ?5068次閱讀
    深度剖析Nios II 處理器的<b class='flag-5'>硬件</b>抽象層

    無人機自動巡檢系統:從手動操作到智能化的技術變革

    ? ? ? ?無人機自動巡檢系統:從手動操作到智能化的技術變革 ? ? ? ?在無人機技術發(fā)展過程中,其操控方式經歷了從完全依賴飛手手動操作到逐步實現自動化、智能化巡檢的重大飛躍。早期手動飛行模式
    的頭像 發(fā)表于 09-11 13:16 ?773次閱讀

    C++ 與 Python:樹莓派上哪種語言更優(yōu)?

    廣泛應用于樹莓派項目中。然而,C++在性能要求極高的應用和底層硬件控制方面表現出色。兩者之間的選擇取決于項目需求和對編程的熟悉程度。嗯,這就是簡短的答案,但讀完后
    的頭像 發(fā)表于 07-24 15:32 ?1010次閱讀
    <b class='flag-5'>C</b>++ 與 Python:樹莓派上哪種<b class='flag-5'>語言</b>更優(yōu)?

    鴻道Intewell操作系統:人形機器人底層操作系統

    操作系統的實時性賦東土科技的鴻道(Intewell)工業(yè)操作系統作為國內唯一通過汽車、工業(yè)控制、醫(yī)療、軌道交通四項功能安全認證的系統,為標準體系中的技術層架構提供了底層支持。其微內核
    的頭像 發(fā)表于 05-16 14:44 ?859次閱讀