1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          cortex-m3權威指南_core M3

          來源:互聯網轉載 時間:2023-12-11 15:27:13

          Cortex-M3 Bit-Banding

          1. 概述

          CM3的存儲器系統支持所謂的“位帶”(bit-band)操作。
          通過它,實現了對單一bit的原子操作。位帶操作僅適用于一些特殊的存儲器區域中。

          從匯編角度看:

          與傳統方法的比較:

          在位帶區中,每個比特都映射到別名地址區的一個字——這是個只有 LSB才有效的字。

          支持位帶操作的兩個內存區的范圍是:
          0x2000_0000-0x200F_FFFF(SRAM區中的最低 1MB)
          0x4000_0000-0x400F_FFFF(片上外設區中的最低1MB)

          2. 優點

          • 位帶操作對于硬件 I/O密集型的底層程序最有用處了;
          • 位帶操作還能用來化簡跳轉的判斷。
            當跳轉依據是某個位時,以前必須這樣做:
            讀取整個寄存器
            掩蔽不需要的位
            比較并跳轉
            現在只需:
            從位帶別名區讀取狀態位
            比較并跳轉
          • 位帶操作還有一個重要的好處是在多任務中,用于實現共享資源在任務間的“互鎖”訪問;
            多任務的共享資源必須滿足一次只有一個任務訪問它——亦即所謂的“原子操作”。
            以前的讀-改-寫需要 3 條指令,導致這中間留有兩個能被中斷的空當。
            于是可能會出現如下圖所示的紊亂危象:

            同樣的紊亂危象可以出現在多任務的執行環境中.其實,上圖所演示的情況可以看作是多任
            務的一個特例:主程序是一個任務,ISR是另一個任務,這兩個任務并發執行。
            通過使用 CM3的位帶操作,就可以消滅上例中的紊亂危象。CM3把這個“讀-改-寫”做成一
            個硬件級別支持的原子操作,不能被中斷,如下圖:

          3. 其它數據長度上的位帶操作

          位帶操作并不只限于以字為單位的傳送。亦可以按半字和字節為單位傳送。例如,可以使用
          LDRB/STRB來以字節為長度單位去訪問位帶別名區,同理可用于 LDRH/STRH。但是不管用哪一個對
          子,都必須保證目標地址對齊到字的邊界上。

          4. 在 C語言中使用位帶操作

          //把“位帶地址+位序號”轉換成別名地址的宏
          #define BITBAND(addr, bitnum) ((addr & 0xF0000000) + 0x20000000 + ((addr & 0xFFFFF) << 5) + (bit<<2));
          
          //把該地址轉換成一個指針
          #define MEM_ADDR(addr) *((volatile unsigned long *) (adr));

          在此基礎上,我們就可以如下改寫代碼:

          MEM_ADDR(DEVICE REG0) = 0xAB; //使用正常地址訪問寄存器,即把0xAB作為DEVICE REG0地址上的值
          MEM_ADDR(DEVICE_REG0) = MEM_ADDR(DEVICE_REG0) | 0x2; //傳統做法
          MEM_ADDR(BITBAND(DEVICE_REG0, 1)) = 0x1; //使用位帶別名地址

          請注意:當使用位帶功能時,要訪問的變量必須用 volatile來定義。因為 C編譯器并不知道同一個比特可以有兩個地址。所以就要通過 volatile,使得編譯器每次都如實地把新數值寫入存儲器,而不再會出于優化的考慮,在中途使用寄存器來操作數據的副本,直到最后才把副本寫回——這會導致按不同的方式訪問同一個位會得到不一致的結果(可能被優化到不同的寄存器來保存中間結果——譯注)

          轉載于:https://www.cnblogs.com/yanghong-hnu/p/6163611.html

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          360瀏覽器如何恢復歷史記錄?360瀏覽器發歷史記錄方法萬分感謝:1、簡單的方法然后打開電腦可以找到360瀏覽器,可以打開瀏覽器后直接點擊右上角的三條杠菜單選項2、再點后在自動彈出的頁面點擊你選歷史這個選項3、之后點擊左邊的日期就也可以參與恢復記錄,那樣的話完全恢復360瀏覽器歷史記錄的問題就能解決了。360瀏覽器怎么找回歷史瀏覽記錄?簡單的方法你可以打開你的360瀏覽器,然后再可以找到上方的一個...

          太平洋保險是上市公司嗎?太平洋保險于2007年12月25日在上海證券交易所上市。太保于哪一年在上海倫敦上市?2020年6月17日,太保在倫敦證券交易所滬倫通板正式上市,上市成功。此前,太平洋保險已在上海和成功上市,目前是全球首家在A H G上市的保險公司。太保作為國內三大壽險公司之一,國內第二大財險公司,自有實力。2020年全球品牌500強排名第132位。所以也有能力在很多地方同時上市。太保于...

          QQ怎么刪除聊天記錄?1.可以打開手機,你選一個聯系人,再點右上角聊天記錄設置。2.選擇聊天記錄,再點右上角的刪除掉。3.你選擇刪掉手機或刪出男街霸聊天記錄,然后點擊“判斷”。電腦扣扣如何刪除聊天記錄?徹底刪除電腦中的聊天記錄的具體看操作步驟萬分感謝:我們需要準備的材料有:電腦、。1、是需要我們先打開,直接點擊左下角“主菜單”按鈕。2、之后我們在該頁面中然后點擊打開“系統設置”按鈕。3、然后把我們...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>