微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > MAXQ构架上闪存和SRAM存储器的分配

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

时间:05-21 来源:电子发烧友 点击:

__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所示。


图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,第二个初始化为规定值,第三个不初始化。全部三个变量均在闪存中。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top