工具/软件:TI C/C++编译器
为什么在 FRAM 中不配置标准段顺序?
需求
//seg1 = const、只读
//seg2 =代码=读取+执行访问
//seg3 =任何读取+写入持久性变量
在该 CMD 中、不会影响自动计算
部分
{
.TI.noinit:{}>RAM /*用于#pragma noinit *
.bss :{}> RAM /*全局和静态变量 *
.data :{}> RAM /*全局和静态变量 *
堆栈 :{}> RAM (high)/*软件系统堆栈 *
组(IPENCAPSULATED_MEMORY)
{
ipestruct :{} /* IPE 数据结构 *
IPE :{} /* IPE *
.IPE:_ISR :{} /* IPE ISR */
} PALIGN (0x0400)、RUN_START (FRAM_IPE_START) RUN_END (FRAM_IPE_END)> FRAM
组(只读_存储器)
{
.cinit :{} /*初始化表 *
.pinit :{} /* C++构造函数表 *
init_array :{} /* C++构造函数表 *
.mspabi.exidx:{} /* C++构造函数表 *
.mspabi.extab:{} /* C++构造函数表 *
.const :{} /*常量数据 */
} PALIGN (0x0400)、RUN_END (fram_Rx_start)> FRAM
GROUP (可执行文件存储器)
{
.text:_ISR :{} /*代码 ISR *
.text :{} /*代码 */
} PALIGN (0x0400)、RUN_END (fram_rw_start)> FRAM
组(READ_WRITE_MEMORY)
{
.TI.persistent:{} 对于#pragma PERSISTENT *
.cio :{} /* C I/O 缓冲器 *
sysmem :{} /*动态内存分配区域*/
} PALIGN (0x0400)、RUN_START (FRAM_Rx_END)> FRAM
Logger_buff :{}>DATA2 type=NOINIT
jtagsignature:{}> JTAGSIGNATURE /* JTAG 签名 *
bslsignature:{}> BSLSIGNATURE /* BSL 签名 *
组(signature_SHAREDMEMORY)
{
ipesignature:{} /* IPE 签名 *
.jtagpassword:{} /* JTAG 密码 */
} > IPESIGNATURE
信息 A :{}>INFOA /* MSP430信息 FRAM 内存段*/
信息 B :{}>INFOB
.infoC :{}>INFOC
信息 D :{}>INFOD
/* MSP430中断矢量 */
。
复位 :{} >复位/* MSP430复位矢量 */
}/
********* //*
MPU/IPE 特定内存段定义 */
********* /.....
//段定义
#ifdef _MPU_manual //用于在 GUI 中选择的自定义大小
MPU_SEARD_Border1 =_MPU_SEGB1 >> 4;
MPU_SEARD_Border2 =_MPU_SEGB2 >> 4;
MPU_SAM_VALUE =(_MPU_SAM0 << 12)|(_MPU_SAM3 << 8)|(_MPU_SAM2 << 4)|_MPU_SAM1;
#else //链接器生成的自动大小
//seg1 = const、只读
//seg2 =代码=读取+执行访问
//seg3 =任何读取+写入持久性变量
MPU_SEGM_Border1 = fRAM_Rx_START >> 4;
MPU_SEGM_Border2 = fram_rw_start >> 4;
MPU_SAM_VALUE = 0x1531;// Info R、Seg3 RW、Seg2 RX、Seg1 R
#endif
#ifdef _MPU_LOCK
#ifdef _MPU_ENABLE_NMI
MPU_ctl0_value = MPUPW | MPUENA | MPULOCK | MPUSEGIE;
其他
MPU_ctl0_value = MPUPW | MPUENA | MPULOCK;
ENDIF
#else
#ifdef _MPU_ENABLE_NMI
MPU_ctl0_value = MPUPW | MPUENA | MPUSEGIE;
其他
MPU_ctl0_value = MPUPW | MPUENA;
#endif
#endif
结果映射:
