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

    文章

    6810

    浏览量

    147640
  • 存储器
    +关注

    关注

    38

    文章

    7150

    浏览量

    161998
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48617
收藏 人收藏

    评论

    相关推荐

    TC364微控制器是否支持外部存储器

    TC364 微控制器是否支持外部存储器? 根据我的阅读,外部总线接口用于外部存储器微控制器的数据手册中,我看到外部总线为 0。
    发表于 03-04 06:13

    MAXQ1850评估套件(EV kit)和面向MAXQ30的CrossWorks编译器的设计方案

    的CrossWorks C编译器。 引言Maxim Integrated Products的MAXQ1850是高性能、安全、小封装、32位RISC微控制器,设计用于电子商务、银行和数据安全应用。
    发表于 12-24 09:23

    什么是微控制器

      微控制器是将微型计算机的主要部分集成一个芯片的单芯片微型计算机。微控制器诞生于20世纪70年代中期,经过20多年的发展,其成本越来越低,而性能越来越强大,这使其应用已经无处不在
    发表于 11-14 14:30

    ST推出闪存容量高达512KB的STM32F3微控制器

    (STMicroelectronics,简称ST;纽约证券交易所代码:STM) 的STM32F3系列微控制器再添新产品,满足市场对高性能、创新功能和价格实惠的需求。新微控制器的片存储
    发表于 07-06 04:42

    没有微控制器中提供SRAM

    你好,我想管理我的微控制器STM32 F415(包括2K字节的CCM数据RAM的192K字节SRAM)的存储器,具有两个特点:AMQP(需要30K字节)和蓝牙通信(需要25K字节)然而,
    发表于 01-02 16:33

    嵌入式相变存储器汽车微控制器中有什么优点?

    汽车微控制器正在挑战嵌入式非易失性存储器(e-NVM)的极限,主要体现在存储单元面积、访问时间和耐热性能三个方面。许多细分市场(例如:网关、车身
    发表于 08-13 06:47

    带红外模块的16位微控制器MAXQ61C电子资料

    概述:MAXQ61C是一款低功耗、16位MAXQ 微控制器 ,设计用于通用遥控 、消费类电子和白色家电等低功耗产品。器件结合了功能强大的16位RISC
    发表于 04-13 07:16

    16位微控制器MAXQ613电子资料

    概述:MAXQ613是一款低功耗、16位MAXQ 微控制器 ,设计用于通用 遥控 、消费类 电子 和白色家电等低功耗产品。器件结合了强大的16位RISC
    发表于 04-13 07:35

    USB收发的微控制电路MAXQ612相关资料下载

    闪存和6KB数据SRAM。通过安全存储器管理单元(MMU)提供知识产权(IP)保护,该安全MMU可支持多种授权等级配置,保护代码不被复制和进行逆向工程。授权等级使厂商可以提供MAXQ6
    发表于 04-19 07:37

    FLASH存储器SRAM最主要的区别是什么

    概念理解:FLASH存储器又成为闪存,它与EEPROM都是掉电后数据不丢失的存储器,但是FLASH得存储容量都普遍的大于EEPROM,,
    发表于 03-02 07:20

    PrimeCell AHB SRAM/NOR存储器控制器(PL241)技术参考手册

    AHB MC是一种符合高级微控制器总线体系结构(AMBA)的片系统(SoC)外围设备。它由ARM有限公司开发、测试和许可。 AHB MC利用了新开发的静态存储器控制器(SMC)。AH
    发表于 08-02 07:14

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

    本应用笔记介绍如何利用IAR嵌入式工作台工具分配和存取MAXQ微控制器上的闪存SRAM
    发表于 06-21 14:44 2309次阅读
    <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>

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

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

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

    发表于 11-17 12:42 0次下载
    使用 <b class='flag-5'>IAR</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'>SRAM</b> <b class='flag-5'>存储器</b>

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

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