單片機達人解密:指令數據寫哪了?
發布時間:2015-01-23 責任編輯:echolady
【導讀】danpianjideyunxingxuyaozhixingchengxu,tongshiyingjianyeshibibukeshaode,erzhequeyibuke。dajiadouzhidaodanpianjideyunxingxuyaozhixingxiehaodechengxu,danshidanpianjidezhilingshujudoubeixiezailenali?zainaduquzhiling?danpianjidarengeinijiedajishunanti。
讓我們從最開始的環節講起。在單片機上電的瞬間,MCU的程序指針PC會被初始化為上電複位時的地址,從哪個地址處讀取將要執行的指令,由此程序在MCU上開始執行(當然在調用程序的main之前,還有一係列其他的的初始化要做,如堆棧的初始化,不過這些很少回去修改)。PC在上電時,和MCU差不多,不過讀取的是BIOS,有它完成了很多初始化操作,最後,調用係統的初始化函數,將控製權交給了操作係統,於是我們看到了Windows、Linux係統啟動了。
如果將操作係統看作是在處理器上奔跑的一個大裸機程序(就是直接在硬件上跑的程序,因為操作係統就是直接跑在CPU上的,這樣看待是可以的,不過這個裸機程序功能很多,很強大),那麼操作係統的啟動很像MCU程cheng序xu的de啟qi動dong。前qian者zhe有you一yi個ge很hen大da的de初chu始shi化hua程cheng序xu完wan成cheng很hen複fu雜za的de初chu始shi化hua,後hou者zhe有you一yi段duan不bu長chang的de彙hui編bian代dai碼ma完wan成cheng一yi些xie簡jian單dan的de初chu始shi化hua。這zhe一yi點dian看kan,它ta們men在zai流liu程cheng上shang是shi很hen相xiang似si的de。
如果是係統上的程序啟動呢?它們是由係統來決定的。Linux上在shell下輸入./p後,首先檢查是否是一個內建的shell命令;如果不是,則shell假設它是一個可執行文件(Linux上一般是elf格式),然後調用一些相關的函數,將在硬盤上的p文件的內容拷貝到內存(DDR RAM)中,並建立一個它的運行環境(當然這裏邊還有內存映射,虛擬內存,連接與加載,等一些其他東西),準備執行。
由以上可知,單片機上的程序和平時在係統上運行的程序相比,在啟動時差異是很大的(如果將程序調用main以前的動作,都抽象為初始化的話,程序的啟動可以簡化為:建立運行環境+調用main函數,這樣程序的執行差異是不大的)。因為單片機上跑的程序(裸機程序),是和操作係統一樣跑在硬件上的,它們屬於一個層次的。過去之所以沒有區分出單片機上的程序和PC機上的程序的一些差異,就是沒有弄明白這一點。
由此,以前的一些疑惑也就解開了。為什麼在單片機上的程序不怎麼使用malloc,而PC上經常使用?因為單片機上沒有已經寫好的內存管理算法代碼,而在PC上操作係統裏運行的程序,libc已經把這些都做了,隻需要調用就可以了。如果在單片機上想用動態內存,也可以,但是這些代碼要自己去實現,並定義一個相應的malloc,有時候一些公司會提供一些庫函數可能會實現malloc,但是因為單片機上RAM內存十分有限,如果不知道它的運行方式,估計會很危險。同樣,因為在PC的係統上運行的程序與邏機程序的不同,裸機程序不會有動態鏈接,有的隻是靜態鏈接。
關guan於yu程cheng序xu在zai執zhi行xing時shi,從cong哪na裏li讀du取qu指zhi令ling,哪na裏li讀du取qu數shu據ju,也ye曾zeng因yin為wei沒mei有you弄nong清qing楚chu係xi統tong上shang的de程cheng序xu和he裸luo機ji程cheng序xu之zhi間jian的de區qu別bie,而er疑yi惑huo了le很hen久jiu。雖sui然ran在zai《微型計算機原理》課上知道程序運行時,從內存中讀取指令和數據進行執行和回寫。但是單片機上隻有幾K的RAM,而flash一般有幾十K甚至1M,這個時候指令和數據都在內存中嗎(這裏指的內存僅指RAM,因為PC上我們常說的內存就是DDR RAM memory,先入為主以至於認為單片機上也是這樣,還沒有明白其實RAM和Flash都是內存)?
這不可能,因為課上老師隻說內存,但是PC上內存一般就是DDR RAM,不會是硬盤,硬盤是保存數據的地方;由此類比時,容易把自己弄糊塗,單片機的RAM對應於DDR RAM,那Flash是不是就對應於硬盤了呢?在CSAPP上明白了,PC上之所以都在DDR RAM上,是速度的因素。硬盤的速度太慢,即使是即將到來的SSD比起DDRRAM,還是差著幾個數量級,所以拷貝到DDRRAM中。這時,一個程序的代碼和數據是連續存放的,其中代碼段是隻讀區域,數據段是可讀寫區域(這是由操作係統的內存管理機製決定的)。
運行時,再將它們拷貝到速度更快的SRAM中,以得到更快的執行速度。而對於,單片機而言工作頻率也就幾M或者幾十M,從Flash中與從RAM中讀的差異可能並不明顯,不會成為程序執行的瓶頸(而對於PC而言,Flash的速度太慢,DDRRAM的速度也是很慢,即使是SRAM也是慢了不少,於是再提高工作頻率也提高不了程序的執行速度,所以現在CPU工作頻率最快是在2003左右。一個瓶頸出現了。為了提高CPU的de使shi用yong率lv,換huan個ge角jiao度du想xiang一yi下xia,既ji然ran不bu能neng減jian少shao一yi段duan程cheng序xu的de執zhi行xing時shi間jian,就jiu在zai同tong樣yang的de時shi間jian執zhi行xing更geng多duo的de程cheng序xu,一yi個ge核he執zhi行xing一yi段duan程cheng序xu,兩liang個ge核he就jiu可ke以yi執zhi行xing兩liang段duan程cheng序xu,於yu是shi多duo核heCPU成為了現在的主流)。
所以裸機程序指令就在Flash(Flash memory)中存放,而數據就放在了RAM中(flash的寫入次數有限製,同時它的速度和RAM還是差很多)。更廣泛說,在單片機上RAM存放data段、bss段、堆棧段;ROM(EPROM、EEPROM、Flash等非易失性存儲設備)存放代碼,隻讀數據段。本質上說,這和PC上程序都在RAM中存放是一樣的,PC 上是操作係統規定了可讀與可寫,而單片機上是依靠不同的存儲設備區分了可讀與可寫。當然現在的Flash是可讀寫的,如果Flash沒有寫入次數限製,速度又可以和RAM相差不多,單片機上是不是隻要Flash就可以了呢(直接相當於PC上的DDRRAM)?這樣成本也會比一個RAM,一個Flash低,更節省成本,對於生產商更劃算。
對於單片機的程序執行時指令和數據的存放與讀取,理解如下:
對單片機編程後,程序的代碼段、data段、bss段、rodata段等都存放在Flash中。當單片機上電後,初始化彙編代碼將data段、bss段、複製到RAM中,並建立好堆棧,開始調用程序的main函數。以後,便有了程序存儲器,和數據存儲器之分,運行時從Flash(即指令存儲器,代碼存儲器)中讀取指令 ,從RAM中讀取與寫入數據。RAM存在的意義就在於速度更快。
無論是單片機也好,PC也ye罷ba,存cun在zai的de存cun儲chu器qi金jin字zi塔ta都dou是shi一yi致zhi的de,速su度du的de因yin素su,成cheng本ben的de限xian製zhi導dao致zhi了le一yi級ji級ji更geng快kuai的de存cun儲chu器qi的de更geng快kuai速su度du與yu更geng高gao的de成cheng本ben。應ying該gai說shuo,對dui於yu它ta們men的de理li解jie,就jiu是shi存cun儲chu器qi金jin字zi塔ta的de理li解jie。
相關閱讀:
單片機菜鳥:快速記憶51單片機指令有絕招
單片機EMC問題腫麼辦?8大方法來助你
大牛解析單片機最小係統的組成電路,學單片機的看過來!
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 築基AI4S:摩爾線程全功能GPU加速中國生命科學自主生態
- 一秒檢測,成本降至萬分之一,光引科技把幾十萬的台式光譜儀“搬”到了手腕上
- AI服務器電源機櫃Power Rack HVDC MW級測試方案
- 突破工藝邊界,奎芯科技LPDDR5X IP矽驗證通過,速率達9600Mbps
- 通過直接、準確、自動測量超低範圍的氯殘留來推動反滲透膜保護
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
微波功率管
微波開關
微波連接器
微波器件
微波三極管
微波振蕩器
微電機
微調電容
微動開關
微蜂窩
位置傳感器
溫度保險絲
溫度傳感器
溫控開關
溫控可控矽
聞泰
穩壓電源
穩壓二極管
穩壓管
無焊端子
無線充電
無線監控
無源濾波器
五金工具
物聯網
顯示模塊
顯微鏡結構
線圈
線繞電位器
線繞電阻




