ARM中 IO的作用解析

2022-08-15 07:57:18 字數 379 閱讀 1575

__io在標頭檔案中預定義

#define __io volatile

volatile 影響編譯器編譯的結果, 指出:volatile 變數是隨時可能發生變化的,與volatile變數有關的運算,不要進行編譯優化,以免出錯。

例如:__io int i=10;

int m = i;

...int k = i;

volatile(即__io) 告訴編譯器變數i是隨時可能發生變化的,每次使用它的時候必須從i的位址中讀取,因而編譯器生成的可執行碼會重新從i的位址讀取資料放在k中。

而如果沒有使用__io,編譯器優化做法是,由於編譯器發現兩次從i中讀資料的**之間的**沒有對i進行過操作,它會自動把上次讀的資料放在k中,而不是重新從i裡面讀。

ARM中MMU的作用

mmu的使用 mmu是儲存器管理單元的縮寫,是用來管理虛擬記憶體系統的器件。mmu通常是cpu的一部分,本身有少量儲存空間存放從虛擬位址到實體地址的匹配表。此表稱作tlb 轉換旁置緩衝區 所有資料請求都送往mmu,由 mmu決定資料是在ram內還是在大容量儲存器裝置內。如果資料不在儲存空間內,mmu...

js中的作用域 預解析

任何地方都能訪問到的物件擁有全域性作用域。1.1函式外面定義的變數擁有全域性作用域 1.2未定義直接賦值的變數自動宣告為擁有全域性作用域 通俗地講,當宣告乙個函式時,區域性作用域一級一級向上包起來,就是作用域鏈。1.當執行函式時,總是先從函式內部找尋區域性變數 2.如果內部找不到 函式的區域性作用域...

JS中的作用域 作用域鏈和預解析

全部變數 js中除了在函式中定義的變數,都是全域性變數 全域性變數的使用範圍是作用域 作用域 就是變數的使用範圍 js中沒有塊級作用域即一對括號中定義的變數,這個變數可以在大括號外面使用 例如結果是 10並不會報錯,因為變數可以在大括號外面使用 除了函式中定義的變數 下面的這些也都可以輸出,並不會報...