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

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

3天内不再提示

如何利用IAR嵌入式工具分配和存取MAXQ微控制器的存储数据

电子设计 来源:郭婷 作者:电子设计 2019-01-10 10:05 次阅读

引言

CAN Bus(Controller Area Network),控制器区域网,起源于80年代,由国际标准化组织(ISO)所发布,因为利用双线差动(two-wired differential),使其即使在电器条件恶劣环境下,也可正常运作的一种传输总线。又因双线沟通的特性,大幅缩减了其应用线路的使用量,也降低传统线路复杂易造成错误的发生机会。

如何利用IAR嵌入式工具分配和存取MAXQ微控制器的存储数据

图1. Harvard结构

每个MAXQ器件采用以下存储器类型:

1.闪存

2.SRAM

3.固定用途ROM

MAXQ器件也可从闪存、固定用途ROM或SRAM执行程序代码。从某个存储器段执行程序代码时,其它两个存储器段可作为数据存储器(更多详细信息,请参阅从闪存执行程序和执行固定用途ROM函数部分)。这是因为程序和数据存储器总线不能同时存取同一存储器段。

有人可能认为采用Harvard结构的MAXQ微控制器也不能在非易失闪存中储存数据。然而,MAXQ器件内嵌固定用途ROM函数,允许读、写非易失闪存数据。

从闪存执行程序

MAXQ器件中,从闪存执行应用程序时,数据存储器为SRAM (读和写)和固定用途ROM (只读)。从闪存执行代码时,数据存储器映射请参见表1,存储器映射参见图2.

如何利用IAR嵌入式工具分配和存取MAXQ微控制器的存储数据

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

固定用途ROM在存储器映射中位于地址0x8000至0x9FFFh (字节模式)或地址0x8000至0x8FFF (字寻址模式下)。

如何利用IAR嵌入式工具分配和存取MAXQ微控制器的存储数据

图2. 从闪存执行应用代码时的存储器映射

执行固定用途ROM函数

执行固定用途ROM函数时,数据存储器为SRAM (读和写)和闪存(读和写)。从闪存执行应用程序且变量或数据对象位于闪存时,可通过固定用途ROM函数读或写这些变量或数据对象。通过跳转至执行固定用途ROM函数,即可将闪存作为数据进行存取。从固定用途ROM执行代码时,数据存储器映射请参见表2,存储器映射参见图3.

如何利用IAR嵌入式工具分配和存取MAXQ微控制器的存储数据

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

2.字节寻址模式下,CDA0 = 0时,闪存的低半部分在存储器映射中位于地址0x8000至0xFFFFh;CDA0 = 1时,闪存的高半部分在存储器映射中位于地址0x8000至0xFFFFh.字寻址模式下,闪存在存储器映射中位于地址0x8000至0xFFFF.

如何利用IAR嵌入式工具分配和存取MAXQ微控制器的存储数据

图3. 执行固定用途ROM函数时的存储器映射

闪存和SRAM中的存储器分配

IAR嵌入式工作台IDE用于编程基于MAXQ核的微控制器。IAR? C编译器(用于MAXQ微控制器)提供用于定义闪存或SRAM位置中数据对象或变量的选项。编译器具有特殊关键词pragma location和pragma required;通过使用关键词,可将存储器分配给绝对地址的数据对象或变量。必须用IAR关键词__no_init或const (标准C关键词)声明这些变量或数据对象。请参见下文中__no_init、const、pragma location和pragma required的关键词说明。

关键词说明

pragma location

#pragma location用于定义绝对地址的单个全局或静态变量或数据对象。变量或数据对象必须声明为__no_init或const.这对于必须位于固定地址的个体数据对象非常有用,例如变量、带有外部或内部接口的数据对象或增加的硬件表项。

pragma required

#pragma required确保链接输出中包括某个符号所需的另一个符号。该指令必须放在紧邻第二个符号的前边。如果符号在应用中不可见,使用该指令。例如,如果仅通过某个变量所在的段对其进行间接引用,必须使用#pragma required.

__no_init

正常情况下,应用程序启动时,IAR运行时环境将全部全局和静态变量初始化为0.IAR C编译器支持声明不初始化的变量,使用__no_init类型限定符。声明为__no_init的变量在启动时被禁止。不可能为__no_init对象赋予初始值。

例如:__no_init char MaximChar @ 0x0200;

本例中,声明为__no_init的变量被放在默认数据存储器(SRAM)的一个绝对地址。

const

const关键词意味着对象为只读。这类限定符用于表示直接或通过指针存取的数据对象,不可写。当const随关键词#pragma location和#pragma required一起使用时,IAR分配#pragma location定义的位置的存储器。这对于配置从外部接口进行存取的参数非常有用。这样的闪存数据只能由固定用途ROM函数读或写。

IAR默认存储器模型中,不可存取绝对地址的常量。利用选项Place constants in CODE (在IAR Project Option General Option Target window)使其可存取,如图4所示。

如何利用IAR嵌入式工具分配和存取MAXQ微控制器的存储数据

图4. IAR项目选项窗口

例1

const int FLASH_DATA0;

//FLASH_DATA0 is initialized to 0x0000 and linker will allocate memory address.

例2

#pragma location = 0xA000

const int FLASH_DATA1 = 0x1234;

#pragma required = FLASH_DATA1

本例中,存储器分配为闪存地址0xA000,初始化为0x1234.

例3

#pragma location = 0xA002

__no_init const int FLASH_DATA2 //Memory is allocated at the address 0xA002 (byte address)

#pragma required = FLASH_DATA2

本例中,存储器分配为闪存地址0xA002,不初始化。

上例中,有三个声明为常量的对象,第一个初始化为0,第二个初始化为规定值,第三个不初始化。全部三个变量均在闪存中。

关键词举例

例1

下例中,FLASH_CONFIG为FlashMemoryMap结构变量。利用关键词#pragma location和#pragma required显式定义该结构变量的开始地址为"CONFIG_FLASH" (0xEE00)。

//Structure for Memory Map

typedef struct

{

unsigned char SYSTEM_CONFIG; //Address 0x00

unsigned char TEMP_CONFIG; //Address 0x01

unsigned char SLAVE_ADDR_A0; //Address 0x02

unsigned char NULL_A0_3; //Address 0x03

signed int INTERNAL_TEMP_THRES; //Address 0x04-5

signed int EXTERNAL_TEMP_THRES; //Address 0x06-7

signed int DS75_TEMP_THRES; //Address 0x08-9

}FlashMemoryMap;

#define CONFIG_FLASH = 0xEE00 //Flash Address

#pragma location = CONFIG_FLASH

const FlashMemoryMap FLASH_CONFIG = //Initialize data objects variable

{

0x00, // SYSTEM_CONFIG

0xFE, // TEMP_CONFIG

0xA0, // SLAVE_ADDR_A0

0x00, // NULL_A0_3

0x3200, // INTERNAL_TEMP_THRES

0x4200, // EXTERNAL_TEMP_THRES

0x5200 // DS75_TEMP_THRES

};

#pragma required = FLASH_CONFIG

为了在IAR嵌入式工作台IDE中查看存储器分配和初始化,进入View Memory.在显示的编辑框中,在Go to框中键入0xEE00,然后从下拉框中选择Code,如图5所示。

如何利用IAR嵌入式工具分配和存取MAXQ微控制器的存储数据

图5. 存储器分配

例2

下例中,在地址0x0116创建DATA SRAMMemoryMap结构变量(DATA_MONITOR),该变量将被初始化(使用__no_init类型限定符)。

typedef struct

{

//Read Only

signed int INTERNAL_TEMP; //Address = OFFSET + 0x00-1

signed int EXTERNAL_TEMP; //Address = OFFSET + 0x02-3

signed int DS75_TEMP; //Address = OFFSET + 0x04-5

signed int VOLTAGE0; //Address = OFFSET + 0x06-7

signed int VOLTAGE1; //Address = OFFSET + 0x08-9

}SRAMMemoryMap;

#define CONFIG_SRAM 0x0116 //SRAM Address 0x0116

#pragma location = CONFIG_SRAM

__no_init SRAMMemoryMap DATA_MONITOR;

#pragma required = DATA_MONITOR

在IAR中调试时,为了查看该结构变量的内容,选择变量,点击右键,然后选择Add to Watch选项,参见图6.

如何利用IAR嵌入式工具分配和存取MAXQ微控制器的存储数据

图6. IAR查看窗口

Intel? HEX文件中查看分配的存储器

可在IAR嵌入式工作台生成的Intel HEX文件中查看在代码存储器中为数据对象分配的存储器。请参见图7中的高亮部分。本例中,为数据对象分配的存储器为闪存中0xEE00至0xEE15.

如何利用IAR嵌入式工具分配和存取MAXQ微控制器的存储数据

图7. 释放模式下IAR生成的HEX文件

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

    关注

    48

    文章

    7564

    浏览量

    151563
  • 嵌入式
    +关注

    关注

    5086

    文章

    19140

    浏览量

    305900
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2756

    浏览量

    463861
收藏 人收藏

    评论

    相关推荐

    如何为嵌入式应用选择合适的微控制器

    。如果套件不存在那么特定部件很可能不是一个好的选择,他们应该回过头几步,发现更好的部分。目前大多数套件的价格低于100美元。支付更多费用太多了。另一部分可能是更好的选择。最后,我们可以得出结论,在为嵌入式应用选择微控制器时需要考虑许多功能。包括硬件,
    发表于 12-21 17:58

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

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

    基于微控制器的现代嵌入式系统

    通常是基于微控制器(如含集成内存和/或外设接口的中央处理单元)的,但在较复杂的系统中普通微处理器使用外部存储芯片和外设接口电路。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求...
    发表于 07-30 07:49

    嵌入式平台上板载的微控制器是什么

    1 填空题嵌入式竞赛平台上板载的微控制器是: 3 级流水线,具有 128 Kbytes的Flash存储空间。(请在第一、二空格处填写10进制数值)解析:STM32G431RBT6采用采用
    发表于 11-08 06:09

    嵌入式编程和微控制器应用

    欢迎进入嵌入式编程和微控制器应用的世界!使用日益流行且价格适宜的AtmelAVR嵌入式控制器作为学习平台。本书是目前可以获得的最佳书籍之一。对于初学者,本书将会是极好的选择。随着
    发表于 09-20 07:52

    时间触发嵌入式系统设计模式(使用8051微控制器开发可靠应用

    时间触发嵌入式系统设计模式:使用8051微控制器开发可靠应用主要关注使用软件模式迅速地开发时间触发嵌入式系统的软件,涉及的系统全部基于8051系列微控制器。时间触发威廉希尔官方网站
    发表于 10-28 23:20 688次下载
    时间触发<b class='flag-5'>嵌入式</b>系统设计模式(使用8051<b class='flag-5'>微控制器</b>开发可靠应用

    采用MAXQ610评估套件(EV kit)和IAR嵌入式工作

    采用MAXQ610评估套件(EV kit)和IAR嵌入式工作台进行设计 摘要:应用笔记介绍怎样面向MAXQ610低功耗RISC微控制器开发
    发表于 01-13 08:08 1044次阅读
    采用<b class='flag-5'>MAXQ</b>610评估套件(EV kit)和<b class='flag-5'>IAR</b><b class='flag-5'>嵌入式</b>工作

    采用MAXQ610评估套件(EV kit)和IAR嵌入式工作

    摘要:应用笔记介绍怎样面向MAXQ610低功耗RISC微控制器开发、构建并调试应用程序。文章使用了IAR™系统公司提供的IAR Embedded Workbench®
    发表于 04-23 15:50 1082次阅读
    采用<b class='flag-5'>MAXQ</b>610评估套件(EV kit)和<b class='flag-5'>IAR</b><b class='flag-5'>嵌入式</b>工作

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

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

    利用MAXQ1103微控制器产生RSA密钥

    利用MAXQ1103微控制器产生RSA密钥 摘要:Maxim的RSA密钥生成库提供了一个简单易用的接口,利用MAXQ1103
    发表于 04-27 16:12 1001次阅读
    <b class='flag-5'>利用</b><b class='flag-5'>MAXQ</b>1103<b class='flag-5'>微控制器</b>产生RSA密钥

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

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

    MAXQ1061加密控制器保护存储安全

    MAXQ1061是用于嵌入式设备的DeepCover®加密控制器。DeepCover嵌入式安全方案采用多重先进的物理安全机制保护敏感数据,提
    的头像 发表于 10-09 05:00 3782次阅读

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

    中,以访问存储数据。本应用笔记演示如何使用IAR嵌入式工作台工具MAXQ
    的头像 发表于 02-21 11:14 1409次阅读
    使用<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>闪存和SRAM<b class='flag-5'>存储器</b>

    IAR编译MAXQ2000评估板入门

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

    使用IAR嵌入式工作台调用实用程序ROM函数用于MAXQ

    实现了所谓的“伪冯诺依曼”架构:开发人员可以在程序空间中存储数据和表,但只能使用特殊的实用程序ROM例程。除了这些核心功能外,每个MAXQ微控制器的ROM都可以具有特定于该器件的例程。
    的头像 发表于 03-03 14:14 1630次阅读
    使用<b class='flag-5'>IAR</b>的<b class='flag-5'>嵌入式</b>工作台调用实用程序ROM函数用于<b class='flag-5'>MAXQ</b>