MAXQ器件提供特殊的實用ROM功能,調(diào)用ROM功能從程序存儲器讀寫數(shù)據(jù)。但是,存儲在程序存儲器中的數(shù)據(jù)不能直接在MAXQ微控制器上訪問。相反,實用程序ROM函數(shù)的起始地址集成在IAR嵌入式工作臺中,以訪問存儲的數(shù)據(jù)。本應用筆記演示如何使用IAR嵌入式工作臺工具在MAXQ微控制器上分配和訪問閃存和SRAM存儲器。
介紹
MAXQ架構描述了一個基于經(jīng)典哈佛架構的強大單周期RISC微控制器,其中程序和數(shù)據(jù)存儲器總線是分開的。這種組織需要為每個存儲器提供專用總線(圖1),因此可以同時獲取指令和操作數(shù)。由于不存在對單個數(shù)據(jù)總線的爭用,MAXQ指令只能在一個周期內(nèi)執(zhí)行。
圖1.哈佛建筑。
每個MAXQ器件包含以下存儲器類型:
閃存
SRAM
實用ROM
MAXQ器件還可以從閃存、實用程序ROM或SRAM執(zhí)行程序代碼。從一個存儲器段執(zhí)行程序代碼時,其他兩個存儲器段可用作數(shù)據(jù)存儲器(有關更多詳細信息,請參閱從閃存執(zhí)行程序和執(zhí)行實用程序ROM功能部分。這是因為程序和數(shù)據(jù)存儲器總線不能同時訪問同一存儲器段。
作為哈佛的機器,人們可能會認為MAXQ微控制器禁止將數(shù)據(jù)元件存儲到非易失性閃存中。但是,MAXQ器件設計有內(nèi)置的實用程序ROM功能,允許在非易失性閃存中讀取和寫入數(shù)據(jù)。
從閃存執(zhí)行程序
在MAXQ器件中,當應用程序從閃存中執(zhí)行時,數(shù)據(jù)存儲器是SRAM(讀寫)和實用程序ROM(只讀)。從閃存執(zhí)行代碼時,請參閱表1了解數(shù)據(jù)存儲器映射,有關存儲器映射,請參閱圖2。
SRAM數(shù)據(jù)存儲器位于從地址0x0000到0x07FF(在字節(jié)尋址模式下)或從地址0x0000到0x03FF(在字尋址模式下)的存儲器映射中。
實用程序ROM位于從地址0x8000到0x9FFFh(字節(jié)模式)或從地址0x8000到0x8FFF(字尋址模式)的內(nèi)存映射中。
尋址模式 | SRAM | 實用ROM | ||
起始地址 | 結束地址 | 起始地址 | 結束地址 | |
字節(jié)模式 | 0x0000 | 0x07FF | 0x8000 | 0x9FFF |
字模式 | 0x0000 | 0x03FF | 0x8000 | 0x8FFF |
圖2.應用程序從閃存執(zhí)行代碼時的內(nèi)存映射。
執(zhí)行實用程序 ROM 函數(shù)
執(zhí)行實用程序ROM功能時,數(shù)據(jù)存儲器是SRAM(讀取和寫入)和閃存(讀取和寫入)。當應用程序從閃存執(zhí)行并在閃存中分配變量或數(shù)據(jù)對象時,可以通過實用程序ROM函數(shù)讀取或?qū)懭脒@些變量或數(shù)據(jù)對象。通過將程序執(zhí)行跳轉到實用程序ROM功能,現(xiàn)在可以將閃存作為數(shù)據(jù)進行訪問。從實用程序ROM執(zhí)行代碼時,請參閱表2以獲取數(shù)據(jù)存儲器映射,有關存儲器映射,請參閱圖3。
SRAM數(shù)據(jù)存儲器位于從地址0x0000到0x07FF(在字節(jié)尋址模式下)或從地址0x0000到0x03FF(在字尋址模式下)的存儲器映射中。
在字節(jié)尋址模式下,當CDA0 = 8000時,閃存的下半部分位于從地址0x0到0xFFFFh的內(nèi)存映射中,當CDA0 = 8000時,閃存的上半部分位于從地址0x0到1xFFFFh的內(nèi)存映射中。在字尋址模式下,閃存位于從地址0x8000到0xFFFF的存儲器映射中。
尋址模式 | SRAM |
閃存下半部分 (CDA0 = 0) |
閃存上半部分 (CDA0 = 1) |
閃存 | ||||
起始地址 | 結束地址 | 起始地址 | 結束地址 | 起始地址 | 結束地址 | 起始地址 | 結束地址 | |
字節(jié)模式 | 0x0000 | 0x07FF | 0x8000 | 0xFFFF | 0x8000 | 0xFFFF | — | — |
字模式 | 0x0000 | 0x03FF | — | — | — | — | 0x8000 | 0xFFFF |
圖3.執(zhí)行實用程序 ROM 功能時的內(nèi)存映射。
閃存和SRAM中的內(nèi)存分配
IAR嵌入式工作臺IDE用于編程基于MAXQ內(nèi)核的微控制器。IAR? C編譯器(用于MAXQ微控制器)提供了在閃存或SRAM位置定義數(shù)據(jù)對象或變量的選項。編譯器具有特殊的關鍵字雜注位置和所需的雜注;通過使用這些關鍵字,可以將內(nèi)存分配給絕對地址處的數(shù)據(jù)對象或變量。這些變量或數(shù)據(jù)對象必須使用 IAR 關鍵字 __no_init 或 const(標準 C 關鍵字)聲明。請參閱下面所需__no_init、常量、雜注位置和所需程序的關鍵字說明。
關鍵字描述
雜注位置
#pragma location 關鍵字用于將單個全局或靜態(tài)變量或數(shù)據(jù)對象放置在絕對地址處。變量或數(shù)據(jù)對象必須聲明為 __no_init 或 const。這對于必須位于固定地址的單個數(shù)據(jù)對象非常有用,例如變量、具有外部或內(nèi)部接口的數(shù)據(jù)對象或填充硬件表。
需要編譯指示
所需的#pragma可確保鏈接輸出中包含另一個符號所需的符號。指令必須放在第二個符號之前。如果對符號的要求在應用程序中不可見,請使用該指令。例如,如果變量僅通過其所在的段間接引用,則必須使用必需#pragma。
__no_init
通常,IAR 運行時環(huán)境會在應用程序啟動時將所有全局變量和靜態(tài)變量初始化為 0。IAR C 編譯器支持使用 __no_init 類型修飾符聲明不會初始化的變量。使用 __no_init 聲明的變量在啟動時被禁止顯示。無法為__no_init對象指定初始值。
示例:__no_init字符馬克西姆查爾@0x0200;
在此示例中,聲明__no_init變量放置在默認數(shù)據(jù)存儲器 (SRAM) 中的絕對地址。
常量
const 關鍵字表示對象是只讀的。這種類型的限定符用于指示直接或通過指針訪問的數(shù)據(jù)對象是不可寫的。當 const 與關鍵字 #pragma 位置一起使用并且需要#pragma時,IAR 會在#pragma位置定義的位置分配內(nèi)存。這對于可從外部接口訪問的配置參數(shù)非常有用。此類閃存數(shù)據(jù)對象只能由實用程序ROM功能讀取或?qū)懭搿?/p>
放置在絕對地址的常量變量在 IAR 的默認內(nèi)存模型中不可訪問。使用選項“在 CODE 中放置常量”(在 IAR 項目選項“常規(guī)選項
目標”窗口中)使其可訪問,如圖 4 所示。
圖4.IAR 項目選項窗口。
例 1
const int FLASH_DATA0;
//FLASH_DATA0 初始化為 0x0000,鏈接器將分配內(nèi)存地址。
例 2
#pragma位置 = 0xA000
常量整數(shù) FLASH_DATA1 = 0x1234;
所需#pragma = 此處FLASH_DATA1
內(nèi)存在閃存地址 0xA000 處分配并初始化為 0x1234。
例 3
#pragma位置 = 0xA002
__no_init const int FLASH_DATA2 //內(nèi)存在地址0xA002(字節(jié)地址)
處分配#pragma所需的 = FLASH_DATA2
此處,內(nèi)存在閃存地址0xA002分配,無需初始化。
在上面的示例中,有三個 const 聲明的對象,其中第一個初始化為零,第二個初始化為特定值,第三個未初始化。所有三個變量都放置在閃存中。
審核編輯:郭婷
-
微控制器
+關注
關注
48文章
7649瀏覽量
152104 -
存儲器
+關注
關注
38文章
7528瀏覽量
164341 -
編譯器
+關注
關注
1文章
1642瀏覽量
49283
發(fā)布評論請先 登錄
相關推薦
帶有紅外收發(fā)器的高性能16位RISC微控制器
MAXQ微控制器中JTAG接口引腳的復用
在應用編程MAXQ微控制器中可分區(qū)擦除的程序和數(shù)據(jù)閃存
![<b class='flag-5'>在</b>應用編程<b class='flag-5'>MAXQ</b><b class='flag-5'>微控制器</b>中可分區(qū)擦除的程序和數(shù)據(jù)<b class='flag-5'>閃存</b>](https://file1.elecfans.com//web2/M00/A4/CD/wKgZomUMNcCAISv1AABkmdC3_3Y686.gif)
在MAXQ8913微控制器中從RAM執(zhí)行應用程序
![<b class='flag-5'>在</b><b class='flag-5'>MAXQ</b>8913<b class='flag-5'>微控制器</b>中從RAM執(zhí)行應用程序](https://file1.elecfans.com//web2/M00/A5/6F/wKgZomUMOG2AX4vSAAAfLdCK2Tg611.gif)
如何分配IAR編譯器上的MAX微控制器閃存和SRAM內(nèi)存
![如何<b class='flag-5'>分配</b><b class='flag-5'>IAR</b><b class='flag-5'>編譯器</b><b class='flag-5'>上</b>的MAX<b class='flag-5'>微控制器</b><b class='flag-5'>閃存</b>和<b class='flag-5'>SRAM</b>內(nèi)存](https://file.elecfans.com/web2/M00/49/3D/pYYBAGKhtEGAUZ_CAAAMjT9RH0A084.jpg)
快閃存儲器控制器選擇技巧
什么是微控制器?如何編程微控制器?
MAXQ微控制器上的多路復用JTAG接口引腳
在MAXQ2000數(shù)據(jù)存儲器中實現(xiàn)軟堆棧
IAR編譯器和MAXQ2000評估板入門
![<b class='flag-5'>IAR</b><b class='flag-5'>編譯器</b>和<b class='flag-5'>MAXQ</b>2000評估板入門](https://file.elecfans.com//web2/M00/95/6A/pYYBAGQAP72AS7zQAACClThiIFM233.jpg)
評論