工具与软件:
你(们)好 我需要执行测试来检查 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 |