0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用IAR编译器在MAXQ微控制器上分配闪存和SRAM存储器

星星科技指导员 来源:ADI 作者:ADI 2023-02-21 11:14 次阅读

MAXQ器件提供特殊的实用ROM功能,调用ROM功能从程序存储器读写数据。但是,存储在程序存储器中的数据不能直接在MAXQ微控制器上访问。相反,实用程序ROM函数的起始地址集成在IAR嵌入式工作台中,以访问存储的数据。本应用笔记演示如何使用IAR嵌入式工作台工具在MAXQ微控制器上分配和访问闪存和SRAM存储器。

介绍

MAXQ架构描述了一个基于经典哈佛架构的强大单周期RISC微控制器,其中程序和数据存储器总线是分开的。这种组织需要为每个存储器提供专用总线(图1),因此可以同时获取指令和操作数。由于不存在对单个数据总线的争用,MAXQ指令只能在一个周期内执行。

poYBAGP0PPKAPiCBAAAq26s7WvA226.png

图1.哈佛建筑。

每个MAXQ器件包含以下存储器类型:

闪存

SRAM

实用ROM

MAXQ器件还可以从闪存、实用程序ROM或SRAM执行程序代码。从一个存储器段执行程序代码时,其他两个存储器段可用作数据存储器(有关更多详细信息,请参阅从闪存执行程序和执行实用程序ROM功能部分。这是因为程序和数据存储器总线不能同时访问同一存储器段。

作为哈佛的机器,人们可能会认为MAXQ微控制器禁止将数据元件存储到非易失性闪存中。但是,MAXQ器件设计有内置的实用程序ROM功能,允许在非易失性闪存中读取和写入数据。

从闪存执行程序

在MAXQ器件中,当应用程序从闪存中执行时,数据存储器是SRAM(读写)和实用程序ROM(只读)。从闪存执行代码时,请参阅表1了解数据存储器映射,有关存储器映射,请参阅图2。

SRAM数据存储器位于从地址0x0000到0x07FF(在字节寻址模式下)或从地址0x0000到0x03FF(在字寻址模式下)的存储器映射中。

实用程序ROM位于从地址0x8000到0x9FFFh(字节模式)或从地址0x8000到0x8FFF(字寻址模式)的内存映射中。

寻址模式 SRAM 实用ROM
起始地址 结束地址 起始地址 结束地址
字节模式 0x0000 0x07FF 0x8000 0x9FFF
字模式 0x0000 0x03FF 0x8000 0x8FFF

pYYBAGP0PPiABONLAACK9dm2icc247.png

图2.应用程序从闪存执行代码时的内存映射。

执行实用程序 ROM 函数

执行实用程序ROM功能时,数据存储器是SRAM(读取和写入)和闪存(读取和写入)。当应用程序从闪存执行并在闪存中分配变量或数据对象时,可以通过实用程序ROM函数读取或写入这些变量或数据对象。通过将程序执行跳转到实用程序ROM功能,现在可以将闪存作为数据进行访问。从实用程序ROM执行代码时,请参阅表2以获取数据存储器映射,有关存储器映射,请参阅图3。

SRAM数据存储器位于从地址0x0000到0x07FF(在字节寻址模式下)或从地址0x0000到0x03FF(在字寻址模式下)的存储器映射中。

在字节寻址模式下,当CDA0 = 8000时,闪存的下半部分位于从地址0x0到0xFFFFh的内存映射中,当CDA0 = 8000时,闪存的上半部分位于从地址0x0到1xFFFFh的内存映射中。在字寻址模式下,闪存位于从地址0x8000到0xFFFF的存储器映射中。

寻址模式 SRAM
闪存下半部分 (CDA0 = 0)

闪存上半部分 (CDA0 = 1)
闪存
起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址
字节模式 0x0000 0x07FF 0x8000 0xFFFF 0x8000 0xFFFF
字模式 0x0000 0x03FF 0x8000 0xFFFF

poYBAGP0PQiAdZCEAACFcIajY04049.png

图3.执行实用程序 ROM 功能时的内存映射。

闪存和SRAM中的内存分配

IAR嵌入式工作台IDE用于编程基于MAXQ内核的微控制器。IAR™ C编译器(用于MAXQ微控制器)提供了在闪存或SRAM位置定义数据对象或变量的选项。编译器具有特殊的关键字杂注位置所需的杂注;通过使用这些关键字,可以将内存分配给绝对地址处的数据对象或变量。这些变量或数据对象必须使用 IAR 关键字 __no_initconst(标准 C 关键字)声明。请参阅下面所需__no_init常量杂注位置所需程序的关键字说明。

关键字描述

杂注位置

#pragma location 关键字用于将单个全局或静态变量或数据对象放置在绝对地址处。变量或数据对象必须声明为 __no_initconst。这对于必须位于固定地址的单个数据对象非常有用,例如变量、具有外部或内部接口的数据对象或填充硬件表。

需要编译指示

所需的#pragma可确保链接输出中包含另一个符号所需的符号。指令必须放在第二个符号之前。如果对符号的要求在应用程序中不可见,请使用该指令。例如,如果变量仅通过其所在的段间接引用,则必须使用必需#pragma

__no_init

通常,IAR 运行时环境会在应用程序启动时将所有全局变量和静态变量初始化为 0。IAR C 编译器支持使用 __no_init 类型修饰符声明不会初始化的变量。使用 __no_init 声明的变量在启动时被禁止显示。无法为__no_init对象指定初始值。

示例:__no_init字符马克西姆查尔@0x0200;

在此示例中,声明__no_init变量放置在默认数据存储器 (SRAM) 中的绝对地址。

常量

const 关键字表示对象是只读的。这种类型的限定符用于指示直接或通过指针访问的数据对象是不可写的。当 const 与关键字 #pragma 位置一起使用并且需要#pragma时,IAR 会在#pragma位置定义的位置分配内存。这对于可从外部接口访问的配置参数非常有用。此类闪存数据对象只能由实用程序ROM功能读取或写入。

放置在绝对地址的常量变量在 IAR 的默认内存模型中不可访问。使用选项“在 CODE 中放置常量”(在 IAR 项目pYYBAGP0NxiAYeTSAAAB-HzF9KM477.gif?imgver=1选项“常规选项pYYBAGP0NxiAYeTSAAAB-HzF9KM477.gif?imgver=1 pYYBAGP0NxiAYeTSAAAB-HzF9KM477.gif?imgver=1目标”窗口中)使其可访问,如图 4 所示。

poYBAGP0NyGAMPEmAADUzcDtYWY975.gif?imgver=1

图4.IAR 项目选项窗口。

例 1

const int FLASH_DATA0;

//FLASH_DATA0 初始化为 0x0000,链接器将分配内存地址。

例 2

#pragma位置 = 0xA000

常量整数 FLASH_DATA1 = 0x1234;

所需#pragma = 此处FLASH_DATA1

内存在闪存地址 0xA000 处分配并初始化为 0x1234。

例 3

#pragma位置 = 0xA002

__no_init const int FLASH_DATA2 //内存在地址0xA002(字节地址)

处分配#pragma所需的 = FLASH_DATA2

此处,内存在闪存地址0xA002分配,无需初始化。

在上面的示例中,有三个 const 声明的对象,其中第一个初始化为零,第二个初始化为特定值,第三个未初始化。所有三个变量都放置在闪存中。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7469

    浏览量

    150910
  • 存储器
    +关注

    关注

    38

    文章

    7443

    浏览量

    163539
  • 编译器
    +关注

    关注

    1

    文章

    1617

    浏览量

    49020
收藏 人收藏

    评论

    相关推荐

    带有红外收发的高性能16位RISC微控制器

    Maxim推出带有红外(IR)收发的高性能16位RISC微控制器MAXQ613。MAXQ610微控制
    发表于 07-28 15:26 45次下载

    MAXQ微控制器中JTAG接口引脚的复用

    摘要:通常在嵌入式应用中,微控制器的每个端口引脚都是必需的,没有多余引脚。大部分MAXQ®微控制器带有可重新进行写操作的内部程序存储器(如
    发表于 04-23 16:28 936次阅读

    应用编程MAXQ微控制器中可分区擦除的程序和数据闪存

    摘要:本应用笔记介绍了MAXQ微控制器中的程序和数据闪存,以及如何使用内置的应用ROM对闪存进行擦/写。本应用笔记适用于所有使用分区擦除闪存
    发表于 04-23 17:16 692次阅读
    <b class='flag-5'>在</b>应用编程<b class='flag-5'>MAXQ</b><b class='flag-5'>微控制器</b>中可分区擦除的程序和数据<b class='flag-5'>闪存</b>

    MAXQ8913微控制器中从RAM执行应用程序

    MAXQ8913微控制器中从RAM执行应用程序 MAXQ8913及其它MAXQ®微控制器
    发表于 01-11 17:56 1139次阅读
    <b class='flag-5'>在</b><b class='flag-5'>MAXQ</b>8913<b class='flag-5'>微控制器</b>中从RAM执行应用程序

    如何分配IAR编译器的MAX微控制器闪存SRAM内存

    Abstract: MAXQ devices provide special utility ROM functions, which are called to read and write
    发表于 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>内存

    MAXQ构架上闪存SRAM存储器分配

    本应用笔记介绍如何利用IAR嵌入式工作台工具分配和存取MAXQ微控制器闪存
    发表于 06-21 14:44 2487次阅读
    <b class='flag-5'>MAXQ</b>构架上<b class='flag-5'>闪存</b>和<b class='flag-5'>SRAM</b><b class='flag-5'>存储器</b>的<b class='flag-5'>分配</b>

    STM32系列微控制器存储器与外设

    STM32系列微控制器存储器与外设
    发表于 09-29 14:50 7次下载
    STM32系列<b class='flag-5'>微控制器</b><b class='flag-5'>存储器</b>与外设

    闪存储器控制器选择技巧

    现代快闪存储器控制器中的磨损平衡技术已经有显著进步,能够克服快闪存储器储存介质固有的弱点,并帮助发挥出快闪存储器的优势。对于现代快闪存储器
    发表于 03-07 09:45 1386次阅读

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

    微控制器进行编程或刻录意味着“将程序从编译器传输到微控制器存储器”。微控制器的程序通常是用C或汇编语言编写的,最后
    的头像 发表于 08-21 15:40 1w次阅读

    使用 IAR 编译器 MAXQ® 微控制器分配闪存SRAM 存储器

    发表于 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微控制器的多路复用JTAG接口引脚

    通常在嵌入式应用中,微控制器的每一个端口引脚都需要,没有多余的端口引脚。大多数具有可重写内部程序存储器(如闪存或EEPROM)的MAXQ®
    的头像 发表于 01-10 11:34 1118次阅读

    MAXQ2000数据存储器中实现软堆栈

    ),存储与数据和程序空间分开的专用内部存储器中。通过子程序调用和中断,这一硬堆栈可用于保存和恢复微控制器的操作状态。
    的头像 发表于 02-14 18:20 763次阅读

    MAXQ8913微控制器的RAM执行应用代码

    MAXQ8913和其他MAXQ微控制器使用的哈佛存储器映射架构为用户提供了根据需要将不同的物理存储器段(如数据
    的头像 发表于 02-21 16:18 562次阅读
    从<b class='flag-5'>MAXQ</b>8913<b class='flag-5'>微控制器</b><b class='flag-5'>上</b>的RAM执行应用代码

    IAR编译器MAXQ2000评估板入门

    MAXQ平台由一套世界级的工具支持,即IARMAXQ嵌入式工作台。本应用笔记描述了如何创建、构建和调试用C语言编写的面向MAXQ平台的应用。本文还将演示
    的头像 发表于 03-02 14:18 1246次阅读
    <b class='flag-5'>IAR</b><b class='flag-5'>编译器</b>和<b class='flag-5'>MAXQ</b>2000评估板入门

    微控制器内部的存储器有哪些

    微控制器(MCU)内部的存储器微控制器系统的重要组成部分,它负责存储程序代码、数据以及控制逻辑等信息。这些
    的头像 发表于 08-22 10:41 631次阅读