目錄1、關于時鐘周期、機器周期和指令周期2、堆棧相關3、臨界區(qū)你應該知道的一切
1、單片機的時鐘周期是什么?機器周期?指令周期?它們之間是什么關系?
2、堆棧的工作原理是什么,都有什么操作流程?
3、什么是臨界區(qū),臨界區(qū)有什么用處?
解析:
1、關于時鐘周期、機器周期和指令周期
時鐘周期也稱為振蕩周期,定義為時鐘脈沖的倒數(shù)(可以這樣來理解,時鐘周期就是單片機外接晶振的倒數(shù),例如12M的晶振,它的時間周期就是1/12 us),是計算機中基本的、小的時間單位。
在一個時鐘周期內(nèi),CPU僅完成一個基本的動作。對于某種單片機,若采用了1MHZ的時鐘頻率,則時鐘周期為1us;若采用4MHZ的時鐘頻率,則時鐘周期為250us。由于時鐘脈沖是計算機的基本工作脈沖,它控制著計算機的工作節(jié)奏(使計算機的每一步都統(tǒng)一到它的步調上來)。顯然,對同一種機型的計算機,時鐘頻率越高,計算機的工作速度就越快。但是,由于不同的計算機硬件電路和器件的不完全相同,所以其所需要的時鐘周頻率范圍也不一定相同。我們學習的8051單片機的時鐘范圍是1.2MHz-12MHz。
在8051單片機中把一個時鐘周期定義為一個節(jié)拍(用P表示),二個節(jié)拍定義為一個狀態(tài)周期(用S表示)。
機器周期
在計算機中,為了便于管理,常把一條指令的執(zhí)行過程劃分為若干個階段,每一階段完成一項工作。例如,取指令、存儲器讀、存儲器寫等,這每一項工作稱為一個基本操作。完成一個基本操作所需要的時間稱為機器周期。一般情況下,一個機器周期由若干個S周期(狀態(tài)周期)組成。8051系列單片機的一個機器周期同6個S周期(狀態(tài)周期)組成。前面已說過一個時鐘周期定義為一個節(jié)拍(用P表示),二個節(jié)拍定義為一個狀態(tài)周期(用S表示),8051單片機的機器周期由6個狀態(tài)周期組成,也就是說一個機器周期=6個狀態(tài)周期=12個時鐘周期。
指令周期
指令周期是執(zhí)行一條指令所需要的時間,一般由若干個機器周期組成。指令不同,所需的機器周期數(shù)也不同。對于一些簡單的的單字節(jié)指令,在取指令周期中,指令取出到指令寄存器后,立即譯碼執(zhí)行,不再需要其它的機器周期。對于一些比較復雜的指令,例如轉移指令、乘法指令,則需要兩個或者兩個以上的機器周期。
通常含一個機器周期的指令稱為單周期指令,包含兩個機器周期的指令稱為雙周期指令。
2、堆棧相關
堆棧是內(nèi)存中一段連續(xù)的存儲區(qū)域,用來保存一些臨時的數(shù)據(jù),比如,可以保存中斷指令INT中的標志寄存器值、代碼段寄存器CS值、指令指針寄存器IP值;還可以用以RET指令從中可以得到返回的地址;堆棧還可以保存其他的數(shù)據(jù)等等。
在匯編語言中堆棧操作由PUSH、POP兩條指令來完成。它的操作數(shù)均為子類型[兩個字節(jié)]進行操作。
程序內(nèi)存可以分為:堆區(qū)、棧區(qū)、全局區(qū)、程序代碼區(qū)、文字常亮區(qū)。在一個程序編譯完后,已經(jīng)為全局變量、靜態(tài)變量分配好內(nèi)存空間,所以在函數(shù)運行的時候,程序內(nèi)存要為局部變量非配好棧空間,當中斷來時,也需要把函數(shù)指針入棧,用來保護當前的情況(保護現(xiàn)場),以便于中斷處理完之后可以再回到之前的函數(shù)。
棧是從高到低的分配或者說先進后出(就像子彈夾),堆是從低到高的分配(就是先到先買,后到后買)。在一般的交談中我們所說的堆棧默認為棧(子彈夾)。然而,堆棧可以分為硬堆棧和軟堆棧,硬堆棧就是SP(stack pointer棧頂元素的下一個位置,所以數(shù)據(jù)入棧的時候,SP先加1,再壓入數(shù)據(jù),出棧時,數(shù)據(jù)先出,然后SP再減1),軟堆棧就是在硬堆棧和全局變量區(qū)之間的空間。
3、臨界區(qū)你應該知道的一切
1.臨界段代碼,也叫臨界區(qū),是指那些必須完整連續(xù)運行,不可被打斷的代碼段。
2. 讀取或者修改變量(特別是用于任務間通信的全局變量)的代碼,一般來說這是常見的臨界代碼。
調用公共函數(shù)的代碼,特別是不可重入的函數(shù),如果多個任務都訪問這個函數(shù),結果是可想而知的。總之,對于臨界段要做到執(zhí)行時間越短越好,否則會影響系統(tǒng)的實時性。
3.中斷處理程序和任務都會訪問的臨界段代碼,需要使用關中斷的方法加以保護;僅由任務訪問的臨界段代碼,可以通過給調度器上鎖的方法來保護。