工具与软件:
你(们)好 我需要执行测试来检查 MSP430FR5969中的存储器是否正常工作。
我有一个简单的函数、该函数具有一个局部数组和两个循环。 第一个循环将循环索引分配给数组中的每个元素。 第二个循环检查数组的每个元素是否等于循环索引。 我假设数组被分配在 RAM 的堆栈部分中。 当我更改本地阵列的大小时、TI CCS 中的"Memory Allocation"面板仍然报告相同的 RAM 和堆栈使用情况、报告的 FRAM 和 FRAM2使用情况也不会改变。 如果我将阵列大小更改为一个 与微控制器 RAM 大小一样大的值、那么每次调用 RAM 测试函数时、TI CCS 都不会就此发出警告、但微控制器会复位。 仅当我将本地阵列的大小更改为大于微控制器的 SRAM 和 FRAM 组合大小时、TI CCS 才会生成"阵列太大"。 CCS 为什么不能可靠地生成该错误? 我缺少什么? 如何 确保不会遇到分配问题?
我在微控制器的链接器文件中查看存储器部分的地址。 其中、RAM 来源为0x1C00、长度为0x0800。 假设 RAM 段的第一个地址为0x1C00、最后一个地址为0x23FF。 当我调试上述函数时、本地数组中的某些元素的地址超出了预期的 RAM 范围。 但我还注意到、这些段及其地址并不是连续的、存储器段之间有一些未使用的地址。 存储器映射方式如下表所示、从最低存储器地址到最高、并且我还在链接器文件中包含了存储器映射规格部分。 我不知道如何读取链接器文件、因此我想问我的解释是否正确、存储器中是否有未映射的范围。 如果实际上有未映射范围、即使它们未映射、它们是否存在于芯片中? 如果它们存在、它们的用途是什么?
我还希望通过校验和算法或 CRC 模块执行指令完整性检查。 我如何知道指令驻留在了哪个地址? 我可以使用在项目文件夹中生成的.map 文件中的信息吗? 或者您会有其他建议吗?
谢谢。
| 起始地址 | 结束地址 | |
| SFR | 0x0000 | 0x000F |
| 外设_8位 | 0x0010 | 0x00FF |
| 外设_16位 | 0x0100 | 0x01FF |
| 未映射范围 | 0x0200 | 0x17FF |
| INFOD | 0x1800 | 0x187F |
| INFOC | 0x1880 | 0x18FF |
| INFOB | 0x1900 | 0x197F |
| INFOA | 0x1980 | 0x19FF |
| 未映射范围 | 0x1A00 | 0x1BFF |
| RAM | 0x1C00 | 0x23FF |
| 未映射范围 | 0x2400 | 0x43FF |
| FRAM 中 | 0x4400 | 0xFF7F |
| 签名和中断向量 | 0xFF80 | 0xFFFF |
| FRAM2 | 0x10000 | 0x13FF7 |
/****************************************************************************/
/* Specify the system memory map */
/****************************************************************************/
MEMORY
{
SFR : origin = 0x0000, length = 0x0010
PERIPHERALS_8BIT : origin = 0x0010, length = 0x00F0
PERIPHERALS_16BIT : origin = 0x0100, length = 0x0100
RAM : origin = 0x1C00, length = 0x0800
INFOA : origin = 0x1980, length = 0x0080
INFOB : origin = 0x1900, length = 0x0080
INFOC : origin = 0x1880, length = 0x0080
INFOD : origin = 0x1800, length = 0x0080
FRAM : origin = 0x4400, length = 0xBB80
FRAM2 : origin = 0x10000,length = 0x3FF8 /* Boundaries changed to fix CPU47 */
JTAGSIGNATURE : origin = 0xFF80, length = 0x0004, fill = 0xFFFF
BSLSIGNATURE : origin = 0xFF84, length = 0x0004, fill = 0xFFFF
IPESIGNATURE : origin = 0xFF88, length = 0x0008, fill = 0xFFFF
INT00 : origin = 0xFF90, length = 0x0002
INT01 : origin = 0xFF92, length = 0x0002
INT02 : origin = 0xFF94, length = 0x0002
INT03 : origin = 0xFF96, length = 0x0002
INT04 : origin = 0xFF98, length = 0x0002
INT05 : origin = 0xFF9A, length = 0x0002
INT06 : origin = 0xFF9C, length = 0x0002
INT07 : origin = 0xFF9E, length = 0x0002
INT08 : origin = 0xFFA0, length = 0x0002
INT09 : origin = 0xFFA2, length = 0x0002
INT10 : origin = 0xFFA4, length = 0x0002
INT11 : origin = 0xFFA6, length = 0x0002
INT12 : origin = 0xFFA8, length = 0x0002
INT13 : origin = 0xFFAA, length = 0x0002
INT14 : origin = 0xFFAC, length = 0x0002
INT15 : origin = 0xFFAE, length = 0x0002
INT16 : origin = 0xFFB0, length = 0x0002
INT17 : origin = 0xFFB2, length = 0x0002
INT18 : origin = 0xFFB4, length = 0x0002
INT19 : origin = 0xFFB6, length = 0x0002
INT20 : origin = 0xFFB8, length = 0x0002
INT21 : origin = 0xFFBA, length = 0x0002
INT22 : origin = 0xFFBC, length = 0x0002
INT23 : origin = 0xFFBE, length = 0x0002
INT24 : origin = 0xFFC0, length = 0x0002
INT25 : origin = 0xFFC2, length = 0x0002
INT26 : origin = 0xFFC4, length = 0x0002
INT27 : origin = 0xFFC6, length = 0x0002
INT28 : origin = 0xFFC8, length = 0x0002
INT29 : origin = 0xFFCA, length = 0x0002
INT30 : origin = 0xFFCC, length = 0x0002
INT31 : origin = 0xFFCE, length = 0x0002
INT32 : origin = 0xFFD0, length = 0x0002
INT33 : origin = 0xFFD2, length = 0x0002
INT34 : origin = 0xFFD4, length = 0x0002
INT35 : origin = 0xFFD6, length = 0x0002
INT36 : origin = 0xFFD8, length = 0x0002
INT37 : origin = 0xFFDA, length = 0x0002
INT38 : origin = 0xFFDC, length = 0x0002
INT39 : origin = 0xFFDE, length = 0x0002
INT40 : origin = 0xFFE0, length = 0x0002
INT41 : origin = 0xFFE2, length = 0x0002
INT42 : origin = 0xFFE4, length = 0x0002
INT43 : origin = 0xFFE6, length = 0x0002
INT44 : origin = 0xFFE8, length = 0x0002
INT45 : origin = 0xFFEA, length = 0x0002
INT46 : origin = 0xFFEC, length = 0x0002
INT47 : origin = 0xFFEE, length = 0x0002
INT48 : origin = 0xFFF0, length = 0x0002
INT49 : origin = 0xFFF2, length = 0x0002
INT50 : origin = 0xFFF4, length = 0x0002
INT51 : origin = 0xFFF6, length = 0x0002
INT52 : origin = 0xFFF8, length = 0x0002
INT53 : origin = 0xFFFA, length = 0x0002
INT54 : origin = 0xFFFC, length = 0x0002
RESET : origin = 0xFFFE, length = 0x0002
}
