位段操作允許單次加載/存儲操作(讀/寫)訪問單個數(shù)據(jù)位,對于Cortex-M3,兩個預定義的位段區(qū)域支持這種特性,其中一個位于SRAM區(qū)域的頭1MB,另外一個則位于外設區(qū)域的頭1MB。這兩個區(qū)域可以同普通存儲器一樣訪問,不過它們還可以通過被稱作位段別名的獨立區(qū)域進行操作。當使用位段別名地址時,可以通過每個字對齊的地址中數(shù)據(jù)的最低位,來訪問每個單獨的位。
例如,要將地址0x20000000中數(shù)據(jù)的第2位置1,除了可以通過讀出數(shù)據(jù)、設置位然后寫回數(shù)據(jù)的方式外,還可以通過單一指令執(zhí)行這個操作,下面看一下兩種情況的匯編執(zhí)行流程。




類似地,如果我們需要讀取存儲器位置中的一個位,位段特性可以簡化應用程序代碼。例如,如果我們需要確定地址0x20000000處數(shù)據(jù)的第2位,我們可以采取下面圖所示的步驟。


位段操作并不是一個新的想法,事實上,類似的特性已經(jīng)在像8051之類的8位微處理器上存在30多年了。盡管Cortex-M3并沒有位操作的特殊指令,而定義了特殊區(qū)域卻可以讓對這些區(qū)域的訪問自動轉(zhuǎn)換為位段操作。
下面是Cortex-M3在位段存儲器尋址里使用的術語:
位段區(qū)域:支持位段操作的存儲器區(qū)域。
位段別名:訪問位段別名會引起對位段區(qū)域的訪問(位段操作)。
在位段區(qū)域里,每個字被位段別名尋址區(qū)域里的32個字的最低位表示。事實上,在訪問位段別名區(qū)域時,地址被重映射為位段地址。對于讀操作,字被讀出并且選定的位會被移入讀返回數(shù)據(jù)的最低位;對于寫操作,寫入的位數(shù)據(jù)會被移入所需位的位置,并且執(zhí)行讀-修改-寫的操作。
往期回顧:
●USB的拓撲結(jié)構(gòu)
●張飛單片機來了
●為什么好多人設計USB上拉電阻都是1.5K?
END

