什麼是Bit-Banding?
Bit-Banding是一種讓使用者atomic修改memory中某個bit的方法,比如說常見的bit set或是bit clear指令。Bit-Banding把一塊比較大memory中的每個word都對應到一塊較小memory中的每個單一bit,如下圖所示:上圖把一塊32MB SRAM的每個word都對應到一塊1MB SRAM中的每個bit。其中比較大的memory叫做bit-band alias region,比較小的memory叫做bit-band region。當我們access bit-band alias region中的一個word時,會自動對應到bit-band region的bit。而此Read-Modify-Write的過程被設計成不可被中斷的。因此當我們做bit set以及bit clear時是atomic。
以上圖來說明,當我們把0x23FFFFE0設定成1就相當於把0x200FFFFF的bit[0]設定成1。相反地,當我們把0x23FFFFE0設定成0就相當於把0x200FFFFF的bit[0]設定成0。附帶一提,把值寫到0x23FFFFE0的bit[31:1]是沒有意義的,不會產生任何作用。
Bit-Banding的好處
- 減少code size,不需要使用mask對特定bit做修改
- 由於atomic的特性,可用來實做mutex以及semaphore
當我們把0x23FFFFE0設定成1就相當於把0x200FFFFF的bit[0]設定成"""0"""?。相反地,當我們把0x23FFFFE0設定成0就相當於把0x200FFFFF的bit[0]設定成0。
回覆刪除是否是1呢?
感謝指正,這邊是我打錯了。已修正
回覆刪除