新闻中心

EEPW首页 > 模拟技术 > 设计应用 > MAXQ构架上闪存和SRAM存储器的分配

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

作者:时间:2013-05-25来源:网络收藏
gb(31,43,56); BORDER-RIGHT-COLOR: rgb(204,205,207); FONT-SIZE: 10pt; PADDING-TOP: 3px" class=tablebody4>———0x80000xFFFF


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

和SRAM中的存储器分配

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

pragma location

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

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 ProjectOptionGeneral OptionTarget window)使其可存取,如图4所示。


图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 2 3 下一页

关键词: MAXQ 闪存 SRAM存储器

评论


相关推荐

技术专区

关闭