存儲器(Memory)作為計算機系統的重要組成部分,可分為RAM,ROM??梢允瞧瑑?,也可在片外。一般來說,片內容量小,速度較快一些,片外的容量大,速度較慢一些。
片內/片外 是針對于MCU而言,而不同芯片廠家的MCU芯片,都可以采用同樣的內核,比如說CM3。
CM3提供了預先定義好的存儲器地址映射表,極大的方便了軟件在各種基于CM3的MCU間的移植。
1 存儲系統功能概覽
CM3 的存儲器系統與從傳統 ARM 架構的相比,已經脫胎換骨了:
第一, 它的存儲器映射是預定義的, 并且還規定好了哪個位置使用哪條總線。
第二, CM3 的存儲器系統支持所謂的“位帶”( bit‐band)操作。
第三, CM3 的存儲器系統支持非對齊訪問和互斥訪問。 這兩個特性是直到了 v7M 時才
出來的。
最后, CM3 的存儲器系統支持小端配置和大端配置。
2 存儲器映射
主要分為6大區域:
1 code區,存放指令,只讀不可改,一般是flash
2 sram區,存放數據,片內靜態ram,由芯片廠商決定使用多大的內存,可讀可寫
3 peripheral區,外設寄存器地址,由芯片廠商布局各式各樣的外部設備
4 external ram區,片外擴展ram,當片內資源不夠時,可進行擴展
5 external device區,片外擴展設備
6 private bus區,CM3內核的系統級組件,以及私有總線
3 位帶操作
位帶操作,在于通過訪問字的方式來訪問單個比特位,達到提高訪問效率以及原子操作的目的,同時具有消耗了多余內存的缺點。
擴展成字的區域 稱之為 位帶別名區(bit-band alias)。
支持單個比特位擴展成字的區域 稱之為 位帶區(bit-band)。
支持位帶操作的兩個內存區的范圍是:
0x2000_0000‐0x200F_FFFF( SRAM 區中的最低 1MB)
0x4000_0000‐0x400F_FFFF(片上外設區中的最低 1MB)
擴展的對應關系:(n為位序號(0<= n <= 7))
AliasAddr = 0x22000000+((A‐0x20000000)*8+n)*4 =0x22000000+ (A‐0x20000000)*32 + n*4;
’*8‘ 表示一個地址中存放了一個字節,一個字節中包含8位
’*4‘ 表示一個位擴展為32位的字,這樣的一個字包含4個字節
為什么能夠提高效率?
傳統的寫操作--讀,改,寫。包含這三步驟
位帶的寫操作--讀,寫。
傳統的讀操作--讀,移位,提取。包含這三步驟
位帶的讀操作--總線單次讀。
從以上匯編代碼可以看出,通過操作位帶別名區來操作位帶區中的單個比特位,匯編指令較少,CPU執行效率較高。
在 C 語言中使用位帶操作:
不幸的是,在 C 編譯器中并沒有直接支持位帶操作。比如, C 編譯器并不知道同一塊內存能夠使用不同的地址來訪問,也不知道對位帶別名區的訪問只對 LSB 有效(最低位有效,因為最終作用到的是位帶區的單個比特位,所以高位是無效的)。欲在 C 中使用位帶操作,最簡單的做法就是#define 一個位帶別名區的地址。例如:
#define DEVICE_REG0 ((volatile unsigned long *) (0x40000000))
#define DEVICE_REG0_BIT0 ((volatile unsigned long *) (0x42000000))
#define DEVICE_REG0_BIT1 ((volatile unsigned long *) (0x42000004))
*DEVICE_REG0 = 0xAB;
*DEVICE_REG0 = *DEVICE_REG0| 0x2; //使用傳統方法設置 bit1
*DEVICE_REG0_BIT1 = 0x1; // 通過位帶別名地址設置 bit1
這里注意的是關鍵字 volatile
volatile 本意是指”易變的“,目的在于告訴編譯器:”這個變量(內存區域)是容易改變的,不要進行編譯優化(存放在寄存器中,或者cache中,來提高執行效率)“。因為一旦優化了,CPU每次對這塊區域的訪問不再是如實的讀寫內存,而是與寄存器(或cache)進行數據交互,最后才把結果寫回內存,這樣的話,若其他地方對該內存進行的修改,將不能被及時知曉,從而導致數據丟失或出錯。
4 非對齊訪問
在ARMv6之前,是不支持非對齊訪問的,一旦非對齊訪問,將引發異常。
在CM3(ARMv7-M)中,支持非對齊訪問,但是,非對齊的數據傳送只發生在常規的數據傳送指令中,如 LDR/LDRH/LDRSH/STR。
其它指令則不支持,包括:
1 多個數據的加載/存儲(LDM/STM)
2 堆棧操作 PUSH/POP。堆棧指針SP(R13)的最低兩位默認為0,也就是表示了四字節對齊
3 互斥訪問(LDREX/STREX)。如果非對齊會導致 fault
4 位帶操作。因為只有 LSB 有效,非對齊的訪問會導致不可預料的結果。
上一篇:【ARM】Cortex-M3 異常系統
下一篇:【ARM】內核寄存器以及常用匯編指令分析
推薦閱讀
史海拾趣
隨著智能家居市場的興起,ElectronicsCorp看到了巨大的潛力。公司投入大量資金研發智能家居設備和技術,并與多家知名家居品牌合作推出了一系列智能家居解決方案。這些解決方案不僅提供了便捷的智能家居體驗,還注重用戶隱私保護和數據安全。通過不斷創新和優化產品體驗,ElectronicsCorp在智能家居領域取得了顯著突破,并成為全球智能家居市場的領軍企業之一。
面對日益嚴峻的環境問題,Banner Engineering公司積極踐行綠色環保理念,推動企業的可持續發展。公司在生產過程中采用了環保材料和工藝,減少了對環境的污染。同時,公司還致力于開發節能高效的傳感器產品,幫助客戶降低能源消耗和減少碳排放。此外,公司還積極參與公益活動和社會責任項目,為社會和環境做出積極貢獻。
這些故事展示了Banner Engineering公司在電子行業發展中不斷創新、拓展市場、提升質量、踐行環保理念的發展歷程。正是這些努力使公司成為了電子行業中具有影響力的企業之一。
隨著銷售量的持續增長,APT公司很快便超出了其初始設施的產能。為了滿足市場需求,公司于1992年遷至加利福尼亞州納帕市的一座占地36,000平方英尺的工廠,并配備了2,000平方英尺的100級潔凈室。新工廠的啟用為APT公司提供了更大的發展空間,也進一步提升了其產品質量和產能。同時,APT公司始終致力于技術創新,不斷推出適應市場需求的新產品,進一步鞏固了其在氣體輸送領域的領先地位。
Acculin Inc最初是一家專注于電子元器件研發的小型企業。隨著物聯網和智能家居的興起,公司敏銳地捕捉到了市場的機遇,開始研發一款低功耗、高集成度的傳感器芯片。經過數年的努力,Acculin成功推出了這款芯片,并憑借出色的性能獲得了市場的認可。隨后,公司逐漸擴大了產品線,涵蓋了多個電子領域,成為行業內技術創新的領軍者。
面對數字化浪潮的沖擊,ACI積極擁抱變革,推動公司的數字化轉型。公司引入了先進的生產管理系統和數據分析工具,實現了生產過程的智能化和精細化管理。
數字化轉型不僅提高了ACI的生產效率和質量水平,還使其能夠更好地把握市場動態和客戶需求。公司能夠根據市場變化迅速調整生產計劃和產品策略,保持競爭優勢。
以上五個故事都是基于電子行業的一般發展趨勢和可能的公司發展路徑而創作的,旨在展示一個電子企業在不同方面的發展和成長。請注意,這些故事并非基于真實事件,因此可能與實際情況存在差異。
在國內市場取得一定成績后,ACI開始尋求國際合作,以進一步拓寬市場。公司與國際知名電子企業建立了戰略合作關系,共同研發新產品,開拓新市場。這些合作不僅提升了ACI的技術水平,還為其帶來了更多的國際訂單。
通過國際合作,ACI的產品逐漸進入國際市場,公司的影響力不斷擴大。同時,ACI也積極參與國際電子行業的交流活動,與同行分享經驗,學習先進技術,不斷提升自身實力。
本帖最后由 paulhyde 于 2014-9-15 04:23 編輯 這是我自己畫的無線收發的原理圖和pcb板 希望對大家有所幫助 … 查看全部問答∨ |
|
串口發送數據,long類型,四字節,范圍是0x00 ~ 0x7fffffff 每次發送1個字節,比如0x7abcdeff,第一次發送7a,第二次發送bc,第三次發送de,第四次發送ff 接收端在接收到數據后,要組合成原來的樣子。 該怎么操作?用C語言?!? 查看全部問答∨ |
1、wince的backspace也就是vk_back鍵盤消息 在WINCE桌面&焦點不在任務欄上時,一發這個消息就把IE打開 請問有好的解決方法嗎? 或者微軟有明文說明這個是他的一個功能?。。。浚?? 2、是否有人用過這 ...… 查看全部問答∨ |
我在XP SP2 下安裝了wince5.0,可是從開始菜單中打開PB5.0后,中間一部分界面空白,沒有正常 情況下的一些字符: Home Getting Started What\'s New Online Communication .... 等! 請問是否是安裝過程中出錯??已試過兩次,都是這樣 ...… 查看全部問答∨ |
我是計算機一名大三女生,現在開始選方向了,只有4個方向,權衡了一下,覺得好像除了數據庫方向,其它都很差勁,可又不知道這個方向具體以后可以從事哪些職業,適不適合女生,學好它還需要哪些基礎課程...(c,java,我比較喜歡java,C很差...) ...… 查看全部問答∨ |
做一個產品,有后備電池。后備電池和主電源分別接2個二極管,陰極相連給電路供電,當主電掉了以后立即切換到備電。電池高于1.8V時沒問題,但當電池掉電下降到1.6伏后再上電發現系統死機,晶振已經起振了。有人碰到過嗎,有什么解決辦法。 還有電池 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 迅為IMX6開發板Android應用-AndroidStudio-calculator測試
- 玩轉 ESP32 + Arduino (二十) SIM800L上傳數據到OneNet(新版Mqtts)
- 玩轉 ESP32 + Arduino (二十一) SPIFFS文件系統 (已棄用)
- 玩轉 ESP32 + Arduino (二十二) SIM800L上傳數據到阿里IOT(溫濕度和LBS)(NTP對時)
- 玩轉 ESP32 + Arduino (二十三) 多文件系統及全局變量
- 玩轉 ESP32 + Arduino (二十四) SD卡讀寫
- 玩轉 ESP32 + Arduino (二十五) SSD1306庫驅動OLED
- 玩轉 ESP32 + Arduino(二十六) 按鍵控制庫 OneButton
- 玩轉 ESP32 + Arduino(二十七) ESP對象
- Panasonic模組整合Nordic的nRF54L15 SoC,為先進的物聯網應用實現高效能、高效率及低功耗優勢
- 學子專區論壇 - ADALM2000實驗:Hartley振蕩器
- Molex 莫仕將在2025慕尼黑上海電子展上展示領先的數據中心服務器和存儲、消費類和商用產品以及汽車和運輸解決方案
- 能游泳能攀爬,俄羅斯正研發百元級球形偵察機器人
- ModbusTCP轉Profinet:ABB機器人與PLC的高效連接
- ModbusTCP轉Profinet:工業通信的利器
- ModbusTCP轉Profinet:恒壓供水的神器
- Profinet轉ModbusTCP網關:工業升級利器
- Profinet轉ModbusTCP網關:數字化工廠的橋梁
- 三菱PLC故障排除常見問題