ZHCA930B June 2014 – August 2021 MSP430FR2032 , MSP430FR2033 , MSP430FR2110 , MSP430FR2111 , MSP430FR2311 , MSP430FR2433 , MSP430FR2532 , MSP430FR2533 , MSP430FR2632 , MSP430FR2633 , MSP430FR4131 , MSP430FR4132 , MSP430FR4133 , MSP430FR5720 , MSP430FR5721 , MSP430FR5722 , MSP430FR5723 , MSP430FR5724 , MSP430FR5725 , MSP430FR5726 , MSP430FR5727 , MSP430FR5728 , MSP430FR5729 , MSP430FR5730 , MSP430FR5731 , MSP430FR5732 , MSP430FR5733 , MSP430FR5734 , MSP430FR5735 , MSP430FR5736 , MSP430FR5737 , MSP430FR5738 , MSP430FR5739 , MSP430FR5847 , MSP430FR58471 , MSP430FR5848 , MSP430FR5849 , MSP430FR5857 , MSP430FR5858 , MSP430FR5859 , MSP430FR5867 , MSP430FR58671 , MSP430FR5868 , MSP430FR5869 , MSP430FR5870 , MSP430FR5872 , MSP430FR58721 , MSP430FR5887 , MSP430FR5888 , MSP430FR5889 , MSP430FR58891 , MSP430FR5922 , MSP430FR59221 , MSP430FR5947 , MSP430FR59471 , MSP430FR5948 , MSP430FR5949 , MSP430FR5957 , MSP430FR5958 , MSP430FR5959 , MSP430FR5967 , MSP430FR5968 , MSP430FR5969 , MSP430FR5969-SP , MSP430FR59691 , MSP430FR5970 , MSP430FR5972 , MSP430FR59721 , MSP430FR5986 , MSP430FR5987 , MSP430FR5988 , MSP430FR5989 , MSP430FR5989-EP , MSP430FR59891 , MSP430FR5994 , MSP430FR6820 , MSP430FR6822 , MSP430FR68221 , MSP430FR6870 , MSP430FR6872 , MSP430FR68721 , MSP430FR6877 , MSP430FR6879 , MSP430FR68791 , MSP430FR6887 , MSP430FR6888 , MSP430FR6889 , MSP430FR68891 , MSP430FR6920 , MSP430FR6922 , MSP430FR69221 , MSP430FR6927 , MSP430FR69271 , MSP430FR6928 , MSP430FR6970 , MSP430FR6972 , MSP430FR69721 , MSP430FR6977 , MSP430FR6979 , MSP430FR69791 , MSP430FR6987 , MSP430FR6988 , MSP430FR6989 , MSP430FR69891
在 IAR 中,如果按Topic Link Label5.2中所述使用 __persistent
属性将变量置于 FRAM 中,则很多用例将无需修改链接器命令文件 (.xcl)。但是,如果要将声明为 __noinit
的变量放到 FRAM 中,则可以在链接器命令文件中进行少量修改,以便将所分配的 DATA16_N
和 DATA20_N
段从 RAM 移到 FRAM 区域中,以达成这一目的。
IAR 链接器命令文件通常在所有工程之间共享,并位于 C:\<IAR installation directory>\430\config\linker\ 文件夹中。若要详细了解链接器命令文件中的每个存储器段名称,请访问 https://www.iar.com/support/user-guides/user-guidesiar-embedded-workbench-for-ti-msp430/,参阅《IAR C/C++ 编译器用户指南》中的“段参考”一章。
如果仍然需要定制的链接器命令文件,则需要为 lnk430xxxx.xcl 制作一个副本。以下步骤概述了如何创建定制的 IAR 链接器命令文件。
可以在 IAR 中直接修改链接器命令文件。以下代码提供适用于 MSP430FR2311 的 .xcl 文件解释和修改示例。
表 3-3 显示了 IAR 中的一些段,这些段可用于分配存储器。有关更多段说明,请参阅《IAR C/C++ 编译器用户指南(适用于 MSP430)》中的段参考 一章。
段 | 说明 |
---|---|
DATA16_AC | 保留 __data16 定位的常量数据。 |
DATA16_AN | 保留 __data16 定位的未初始化数据。 |
DATA16_C | 保留 __data16 常量数据。 |
DATA16_HEAP | 在 data16 存储器中保留用于动态分配数据的堆。 |
DATA16_I | 保留 __data16 静态和全局初始化变量。 |
DATA16_ID | 在 DATA16_I 中保存 __data16 静态和全局变量的初始值。 |
DATA16_N | 保留 __no_init __data16 静态和全局变量。 |
DATA16_P | 保留使用 _persistent 关键字定义的 __data16 变量。 |
DATA16_Z | 保留初始化为 0 的 __data16 静态和全局变量。 |
DATA20_AC | 保留 __data20 定位的常量数据。 |
DATA20_AN | 保留 __data20 定位的未初始化数据。 |
DATA20_C | 保留 __data20 常量数据。 |
DATA20_HEAP | 在 data20 存储器中保留用于动态分配数据的堆。 |
DATA20_I | 保留 __data20 静态和全局初始化变量。 |
DATA20_ID | 在 DATA20_I 中保存 __data20 静态和全局变量的初始值。 |
DATA20_N | 保留 __no_init __data20 静态和全局变量。 |
DATA20_P | 保留使用 _persistent 关键字定义的 __data20 变量。 |
DATA20_Z | 保留初始化为 0 的 __data20 静态和全局变量。 |
存储块可以直接分配到 IAR 中的每个段,并且存储器空间可以是不连续的,用“,”符号分隔。如果在 -Z 命令之后没有给出地址空间,则默认值与前一行相同。根据表 3-2 中 MSP430FR2311 的存储器组织情况,IAR 中提供了默认存储器分配文件。主要内容如以下代码所示,分为 RAM、FRAM、矢量段等等。更多有关存储器分配的信息,请参阅《IAR C/C++ 编译器用户指南(适用于 MSP430)》。
// -----------------------------------------------
// RAM 存储器
//
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,TLS16_I=2000-23FF
-Z(DATA)CODE_I -Z(DATA)DATA20_I,DATA20_Z,DATA20_N
-Z(DATA)CSTACK+_STACK_SIZE#
// -----------------------------------------------
// FRAM 存储器
//
// Read/write data in FRAM
-Z(CONST)DATA16_P,DATA20_P=F100-FF7F
-Z(DATA)DATA16_HEAP+_DATA16_HEAP_SIZE,DATA20_HEAP+_DATA20_HEAP_SIZE
// 常量数据
-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=F100-FF7F
-Z(CONST)DATA20_C,DATA20_ID
// 代码
-Z(CODE)CSTART,ISR_CODE,CODE_ID=F100-FF7F
-P(CODE)CODE,CODE16=F100-FF7F
// 特殊矢量
-Z(CONST)JTAGSIGNATURE=FF80-FF83
-Z(CONST)BSLSIGNATURE=FF84-FF87
-Z(CODE)INTVEC=FF88-FFFF
-Z(CODE)RESET=FFFE-FFFF