cpu是數字處理系統中的一個重要環節。在我看來,單片機、微處理器、dsp均可以稱做是cpu,只是它們的側重點有所不一樣罷了。具體來講,傳統意義上的單片機更偏重於嵌入式的計算,好比說咱們常用的5一、avr、arm芯片中不只僅含有了運算和控制功能,它還涵蓋了定時器、串口、並口、usb、i2c總線等外部資源。dsp呢,cpu通常只是做爲dsp的一個核存在,它一般還會包含另一個核,專門用於數字信號的處理工做。而微處理器,也就是咱們常常說的pc上的處理器,它的工做比較單一,專一於計算和控制功能的處理,所以通常來講在這方面的性能上面,單片機和dsp都是不能和它相比的,有了南橋芯片和北橋芯片的幫助,pc的微處理器就能夠專一於本身的本職工做了,效率上面也會有一個很大的提升。php
對於朋友們來講,生活中遇到的最多的cpu實際上是x86的cpu。固然,若是有哪位朋友喜歡apple之類的玩具,也會知道一些arm的相關事情。剩下的就是一些專用領域的cpu了,好比說在通訊行業用到的比較多的powerpc芯片,在高性能服務器用的到的sun sparc芯片,在科學計算領域使用到的mips芯片。因此,不管遇到什麼芯片,對於應用層開發的朋友都是同樣的,只是在一些小地方須要還有一些注意的地方。好比說,html
(1)數據的對齊方式linux
(2)數據的字節序問題服務器
(3)函數參數的壓棧問題app
(4)cpu的亂序執行問題less
(5)cpu中cache和內存一致性的問題函數
固然,若是咱們所要思考只是簡單的應用層設計,考慮到這些內容自己已經實屬不易了。然而,咱們考慮的是如何設計嵌入式操做系統的問題,因此接下來還要看看通常cpu下面都包含了那些內容。這樣,只要熟練掌握了一款cpu的設計和實現,對其餘cpu的知識也會舉一反三了。性能
任何一款cpu,不論是完成的功能是什麼樣的,一般都會有這樣一些基本設計:學習
(1)寄存器編碼
堆棧寄存器
pc寄存器
狀態寄存器
運算寄存器
寄存器是cpu內部的基本資源。無論cpu的代碼執行到何時,這些資源都是共享的,因此在cpu發生中斷、函數調用、線程切換的時候,都須要對這些寄存器進行保護,經常使用的基本措施就是把把它們保存到臨時堆棧當中去。堆棧寄存器記錄了當前堆棧使用到了什麼地方,pc寄存器則記錄當前代碼跑到了什麼地方,下一條指令在什麼地方等。狀態寄存器則保存了當前cpu的執行狀況,包括計算有沒有溢出、中斷是關仍是開、有沒有o除數異常等等。至於運算寄存器就因cpu而異了,有的cpu寄存器比較少,好比說x86的寄存器;有的cpu寄存器就比較多,好比說powerpc。運算寄存器的用途不少,好比說數據訪問、計算、移位、返回計算結果等等。
(2)指令集
尋址指令
數學運算指令
邏輯運算指令
軟中斷指令
跳轉指令
遠程調用指令
io訪問指令
棧操做指令
指令集在某種程度上直接決定了某一種cpu的類型。就像intel和amd生產的cpu雖然有差異,可是它們的cpu使用的都是x86的指令集,而marwell、samsung和高通生產的cpu固然也不一樣,可是它們的指令集都是arm指令集。因此,若是軟件在marwell上跑,通常來講也能夠在Samsung上跑起來。指令集很複雜,內容不少。可是一般來講,上面這些內容都是cpu所必需要完成的幾種指令。固然重中之重的仍是中斷和棧處理指令。宋工企鵝號:3524-6590-88 Tel/WX:173--1795--1908
(3)中斷、異常處理機制
不論是什麼cpu,中斷部分的內容都是少不了的。試想想,若是一顆cpu只知道不停地運行,那麼它的執行效率其實是很低的。擁有了中斷的cpu不只使得cpu能夠和更多的外設io打交道,還能極大地提升自身運行的效率。不一樣的cpu處理中斷的方法其實都差很少,在整個cpu的地址空間裏面,一般在低地址區域會有一張中斷向量表,表中每一項記錄了每個中斷對應的處理函數。因此,只要中斷髮生時,cpu就會首先將下一條pc地址壓入堆棧,而後跳轉到中斷向量表中對應的中斷地址處執行的相應的處理函數。這個過程是cpu自動完成的,不須要咱們關心。這樣對咱們來講,它和cpu中的函數調用其實沒有什麼區別。等待中斷處理結束後,咱們使用ret指令返回到以前壓入的那個ip地址處,繼續下面的代碼。整個過程就好像中斷根本沒有發生過同樣。
宋工企鵝號:3524-6590-88 Tel/WX:173--1795--1908
因此,對於cpu的瞭解其實主要就是對寄存器、指令集和中斷的瞭解。有了對中斷和堆棧的深刻理解,其實也就沒有什麼困難的了。在這裏咱們你們能夠考慮一個問題,如何在Windows或者linux下仿真中斷完成咱們的操做系統開發呢?你們能夠本身先思考一下,咱們會在隨後的博客中繼續介紹。整篇文章,咱們沒有介紹編碼的相關內容,其實只要把這裏的基本概念弄清楚了,剩下來其實就是一些流程性的工做了。在軟件開發中,設計實際上是最難的,剩下的纔是開發和調試。
如下課程可免費試聽C語言、電子、PCB、STM3二、Linux、FPGA、JAVA、安卓等。
嵌入式開發之CPU的那些事...
http://bbs.elecfans.com/jishu_1588685_1_1.html
(出處: 中國電子技術論壇)
想學習的你和我聯繫預定就能夠免費聽課了。