一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用IAR編譯器在MAXQ微控制器上分配閃存和SRAM存儲器

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:ADI ? 2023-02-21 11:14 ? 次閱讀

MAXQ器件提供特殊的實(shí)用ROM功能,調(diào)用ROM功能從程序存儲器讀寫數(shù)據(jù)。但是,存儲在程序存儲器中的數(shù)據(jù)不能直接在MAXQ微控制器上訪問。相反,實(shí)用程序ROM函數(shù)的起始地址集成在IAR嵌入式工作臺中,以訪問存儲的數(shù)據(jù)。本應(yīng)用筆記演示如何使用IAR嵌入式工作臺工具在MAXQ微控制器上分配和訪問閃存和SRAM存儲器。

介紹

MAXQ架構(gòu)描述了一個基于經(jīng)典哈佛架構(gòu)的強(qiáng)大單周期RISC微控制器,其中程序和數(shù)據(jù)存儲器總線是分開的。這種組織需要為每個存儲器提供專用總線(圖1),因此可以同時獲取指令和操作數(shù)。由于不存在對單個數(shù)據(jù)總線的爭用,MAXQ指令只能在一個周期內(nèi)執(zhí)行。

poYBAGP0PPKAPiCBAAAq26s7WvA226.png

圖1.哈佛建筑。

每個MAXQ器件包含以下存儲器類型:

閃存

SRAM

實(shí)用ROM

MAXQ器件還可以從閃存、實(shí)用程序ROM或SRAM執(zhí)行程序代碼。從一個存儲器段執(zhí)行程序代碼時,其他兩個存儲器段可用作數(shù)據(jù)存儲器(有關(guān)更多詳細(xì)信息,請參閱從閃存執(zhí)行程序和執(zhí)行實(shí)用程序ROM功能部分。這是因?yàn)槌绦蚝蛿?shù)據(jù)存儲器總線不能同時訪問同一存儲器段。

作為哈佛的機(jī)器,人們可能會認(rèn)為MAXQ微控制器禁止將數(shù)據(jù)元件存儲到非易失性閃存中。但是,MAXQ器件設(shè)計有內(nèi)置的實(shí)用程序ROM功能,允許在非易失性閃存中讀取和寫入數(shù)據(jù)。

從閃存執(zhí)行程序

在MAXQ器件中,當(dāng)應(yīng)用程序從閃存中執(zhí)行時,數(shù)據(jù)存儲器是SRAM(讀寫)和實(shí)用程序ROM(只讀)。從閃存執(zhí)行代碼時,請參閱表1了解數(shù)據(jù)存儲器映射,有關(guān)存儲器映射,請參閱圖2。

SRAM數(shù)據(jù)存儲器位于從地址0x0000到0x07FF(在字節(jié)尋址模式下)或從地址0x0000到0x03FF(在字尋址模式下)的存儲器映射中。

實(shí)用程序ROM位于從地址0x8000到0x9FFFh(字節(jié)模式)或從地址0x8000到0x8FFF(字尋址模式)的內(nèi)存映射中。

尋址模式 SRAM 實(shí)用ROM
起始地址 結(jié)束地址 起始地址 結(jié)束地址
字節(jié)模式 0x0000 0x07FF 0x8000 0x9FFF
字模式 0x0000 0x03FF 0x8000 0x8FFF

pYYBAGP0PPiABONLAACK9dm2icc247.png

圖2.應(yīng)用程序從閃存執(zhí)行代碼時的內(nèi)存映射。

執(zhí)行實(shí)用程序 ROM 函數(shù)

執(zhí)行實(shí)用程序ROM功能時,數(shù)據(jù)存儲器是SRAM(讀取和寫入)和閃存(讀取和寫入)。當(dāng)應(yīng)用程序從閃存執(zhí)行并在閃存中分配變量或數(shù)據(jù)對象時,可以通過實(shí)用程序ROM函數(shù)讀取或?qū)懭脒@些變量或數(shù)據(jù)對象。通過將程序執(zhí)行跳轉(zhuǎn)到實(shí)用程序ROM功能,現(xiàn)在可以將閃存作為數(shù)據(jù)進(jìn)行訪問。從實(shí)用程序ROM執(zhí)行代碼時,請參閱表2以獲取數(shù)據(jù)存儲器映射,有關(guān)存儲器映射,請參閱圖3。

SRAM數(shù)據(jù)存儲器位于從地址0x0000到0x07FF(在字節(jié)尋址模式下)或從地址0x0000到0x03FF(在字尋址模式下)的存儲器映射中。

在字節(jié)尋址模式下,當(dāng)CDA0 = 8000時,閃存的下半部分位于從地址0x0到0xFFFFh的內(nèi)存映射中,當(dāng)CDA0 = 8000時,閃存的上半部分位于從地址0x0到1xFFFFh的內(nèi)存映射中。在字尋址模式下,閃存位于從地址0x8000到0xFFFF的存儲器映射中。

尋址模式 SRAM
閃存下半部分 (CDA0 = 0)

閃存上半部分 (CDA0 = 1)
閃存
起始地址 結(jié)束地址 起始地址 結(jié)束地址 起始地址 結(jié)束地址 起始地址 結(jié)束地址
字節(jié)模式 0x0000 0x07FF 0x8000 0xFFFF 0x8000 0xFFFF
字模式 0x0000 0x03FF 0x8000 0xFFFF

poYBAGP0PQiAdZCEAACFcIajY04049.png

圖3.執(zhí)行實(shí)用程序 ROM 功能時的內(nèi)存映射。

閃存和SRAM中的內(nèi)存分配

IAR嵌入式工作臺IDE用于編程基于MAXQ內(nèi)核的微控制器。IAR? C編譯器(用于MAXQ微控制器)提供了在閃存或SRAM位置定義數(shù)據(jù)對象或變量的選項(xiàng)。編譯器具有特殊的關(guān)鍵字雜注位置所需的雜注;通過使用這些關(guān)鍵字,可以將內(nèi)存分配給絕對地址處的數(shù)據(jù)對象或變量。這些變量或數(shù)據(jù)對象必須使用 IAR 關(guān)鍵字 __no_initconst(標(biāo)準(zhǔn) C 關(guān)鍵字)聲明。請參閱下面所需__no_init、常量、雜注位置所需程序的關(guān)鍵字說明。

關(guān)鍵字描述

雜注位置

#pragma location 關(guān)鍵字用于將單個全局或靜態(tài)變量或數(shù)據(jù)對象放置在絕對地址處。變量或數(shù)據(jù)對象必須聲明為 __no_initconst。這對于必須位于固定地址的單個數(shù)據(jù)對象非常有用,例如變量、具有外部或內(nèi)部接口的數(shù)據(jù)對象或填充硬件表。

需要編譯指示

所需的#pragma可確保鏈接輸出中包含另一個符號所需的符號。指令必須放在第二個符號之前。如果對符號的要求在應(yīng)用程序中不可見,請使用該指令。例如,如果變量僅通過其所在的段間接引用,則必須使用必需#pragma。

__no_init

通常,IAR 運(yùn)行時環(huán)境會在應(yīng)用程序啟動時將所有全局變量和靜態(tài)變量初始化為 0。IAR C 編譯器支持使用 __no_init 類型修飾符聲明不會初始化的變量。使用 __no_init 聲明的變量在啟動時被禁止顯示。無法為__no_init對象指定初始值。

示例:__no_init字符馬克西姆查爾@0x0200;

在此示例中,聲明__no_init變量放置在默認(rèn)數(shù)據(jù)存儲器 (SRAM) 中的絕對地址。

常量

const 關(guān)鍵字表示對象是只讀的。這種類型的限定符用于指示直接或通過指針訪問的數(shù)據(jù)對象是不可寫的。當(dāng) const 與關(guān)鍵字 #pragma 位置一起使用并且需要#pragma時,IAR 會在#pragma位置定義的位置分配內(nèi)存。這對于可從外部接口訪問的配置參數(shù)非常有用。此類閃存數(shù)據(jù)對象只能由實(shí)用程序ROM功能讀取或?qū)懭搿?/p>

放置在絕對地址的常量變量在 IAR 的默認(rèn)內(nèi)存模型中不可訪問。使用選項(xiàng)“在 CODE 中放置常量”(在 IAR 項(xiàng)目pYYBAGP0NxiAYeTSAAAB-HzF9KM477.gif?imgver=1選項(xiàng)“常規(guī)選項(xiàng)pYYBAGP0NxiAYeTSAAAB-HzF9KM477.gif?imgver=1 pYYBAGP0NxiAYeTSAAAB-HzF9KM477.gif?imgver=1目標(biāo)”窗口中)使其可訪問,如圖 4 所示。

poYBAGP0NyGAMPEmAADUzcDtYWY975.gif?imgver=1

圖4.IAR 項(xiàng)目選項(xiàng)窗口。

例 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 聲明的對象,其中第一個初始化為零,第二個初始化為特定值,第三個未初始化。所有三個變量都放置在閃存中。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7844

    瀏覽量

    153352
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7613

    瀏覽量

    165917
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1652

    瀏覽量

    49730
收藏 人收藏

    評論

    相關(guān)推薦

    帶有紅外收發(fā)的高性能16位RISC微控制器

    Maxim推出帶有紅外(IR)收發(fā)的高性能16位RISC微控制器MAXQ613。MAXQ610微控制
    發(fā)表于 07-28 15:26 ?45次下載

    MAXQ微控制器中JTAG接口引腳的復(fù)用

    摘要:通常在嵌入式應(yīng)用中,微控制器的每個端口引腳都是必需的,沒有多余引腳。大部分MAXQ®微控制器帶有可重新進(jìn)行寫操作的內(nèi)部程序存儲器(如
    發(fā)表于 04-23 16:28 ?1018次閱讀

    應(yīng)用編程MAXQ微控制器中可分區(qū)擦除的程序和數(shù)據(jù)閃存

    摘要:本應(yīng)用筆記介紹了MAXQ微控制器中的程序和數(shù)據(jù)閃存,以及如何使用內(nèi)置的應(yīng)用ROM對閃存進(jìn)行擦/寫。本應(yīng)用筆記適用于所有使用分區(qū)擦除閃存
    發(fā)表于 04-23 17:16 ?738次閱讀
    <b class='flag-5'>在</b>應(yīng)用編程<b class='flag-5'>MAXQ</b><b class='flag-5'>微控制器</b>中可分區(qū)擦除的程序和數(shù)據(jù)<b class='flag-5'>閃存</b>

    MAXQ8913微控制器中從RAM執(zhí)行應(yīng)用程序

    MAXQ8913微控制器中從RAM執(zhí)行應(yīng)用程序 MAXQ8913及其它MAXQ®微控制器
    發(fā)表于 01-11 17:56 ?1324次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>MAXQ</b>8913<b class='flag-5'>微控制器</b>中從RAM執(zhí)行應(yīng)用程序

    如何分配IAR編譯器的MAX微控制器閃存SRAM內(nèi)存

    Abstract: MAXQ devices provide special utility ROM functions, which are called to read and write
    發(fā)表于 12-19 11:44 ?0次下載
    如何<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)存

    MAXQ構(gòu)架上閃存SRAM存儲器分配

    本應(yīng)用筆記介紹如何利用IAR嵌入式工作臺工具分配和存取MAXQ微控制器閃存
    發(fā)表于 06-21 14:44 ?2702次閱讀
    <b class='flag-5'>MAXQ</b>構(gòu)架上<b class='flag-5'>閃存</b>和<b class='flag-5'>SRAM</b><b class='flag-5'>存儲器</b>的<b class='flag-5'>分配</b>

    STM32系列微控制器存儲器與外設(shè)

    STM32系列微控制器存儲器與外設(shè)
    發(fā)表于 09-29 14:50 ?7次下載
    STM32系列<b class='flag-5'>微控制器</b><b class='flag-5'>存儲器</b>與外設(shè)

    閃存儲器控制器選擇技巧

    現(xiàn)代快閃存儲器控制器中的磨損平衡技術(shù)已經(jīng)有顯著進(jìn)步,能夠克服快閃存儲器儲存介質(zhì)固有的弱點(diǎn),并幫助發(fā)揮出快閃存儲器的優(yōu)勢。對于現(xiàn)代快閃存儲器
    發(fā)表于 03-07 09:45 ?1494次閱讀

    什么是微控制器?如何編程微控制器?

    微控制器進(jìn)行編程或刻錄意味著“將程序從編譯器傳輸?shù)?b class='flag-5'>微控制器存儲器”。微控制器的程序通常是用C或匯編語言編寫的,最后
    的頭像 發(fā)表于 08-21 15:40 ?1.1w次閱讀

    使用 IAR 編譯器 MAXQ? 微控制器分配閃存SRAM 存儲器

    發(fā)表于 11-17 12:42 ?0次下載
    使用 <b class='flag-5'>IAR</b> <b class='flag-5'>編譯器</b><b class='flag-5'>在</b> <b class='flag-5'>MAXQ</b>? <b class='flag-5'>微控制器</b><b class='flag-5'>上</b><b class='flag-5'>分配</b><b class='flag-5'>閃存</b>和 <b class='flag-5'>SRAM</b> <b class='flag-5'>存儲器</b>

    MAXQ微控制器的多路復(fù)用JTAG接口引腳

    通常在嵌入式應(yīng)用中,微控制器的每一個端口引腳都需要,沒有多余的端口引腳。大多數(shù)具有可重寫內(nèi)部程序存儲器(如閃存或EEPROM)的MAXQ?
    的頭像 發(fā)表于 01-10 11:34 ?1396次閱讀

    MAXQ2000數(shù)據(jù)存儲器中實(shí)現(xiàn)軟堆棧

    ),存儲與數(shù)據(jù)和程序空間分開的專用內(nèi)部存儲器中。通過子程序調(diào)用和中斷,這一硬堆棧可用于保存和恢復(fù)微控制器的操作狀態(tài)。
    的頭像 發(fā)表于 02-14 18:20 ?931次閱讀

    MAXQ8913微控制器的RAM執(zhí)行應(yīng)用代碼

    MAXQ8913和其他MAXQ微控制器使用的哈佛存儲器映射架構(gòu)為用戶提供了根據(jù)需要將不同的物理存儲器段(如數(shù)據(jù)
    的頭像 發(fā)表于 02-21 16:18 ?735次閱讀
    從<b class='flag-5'>MAXQ</b>8913<b class='flag-5'>微控制器</b><b class='flag-5'>上</b>的RAM執(zhí)行應(yīng)用代碼

    IAR編譯器MAXQ2000評估板入門

    MAXQ平臺由一套世界級的工具支持,即IARMAXQ嵌入式工作臺。本應(yīng)用筆記描述了如何創(chuàng)建、構(gòu)建和調(diào)試用C語言編寫的面向MAXQ平臺的應(yīng)用。本文還將演示
    的頭像 發(fā)表于 03-02 14:18 ?1545次閱讀
    <b class='flag-5'>IAR</b><b class='flag-5'>編譯器</b>和<b class='flag-5'>MAXQ</b>2000評估板入門

    微控制器內(nèi)部的存儲器有哪些

    微控制器(MCU)內(nèi)部的存儲器微控制器系統(tǒng)的重要組成部分,它負(fù)責(zé)存儲程序代碼、數(shù)據(jù)以及控制邏輯等信息。這些
    的頭像 發(fā)表于 08-22 10:41 ?1160次閱讀