下面是我在计算机工程课程的最后一次测试中给出的问题示例。有人介意向我解释如何获取每个的起始/结束地址吗?我已在底部列出了正确答案...
MSP430F2410 器件的地址空间为 64 KB(基本 MSP430 架构)。如果我们知道以下内容,请填写下表。地址空间的前 16 个字节(从地址 0x0000 开始)保留给特殊功能寄存器(IE1、IE2、IFG1、IFG2 等),接下来的 240 个字节保留给 8 位外围设备,接下来的 240 个字节保留给 8 位外围设备。 256 字节保留给 16 位外围设备。 RAM 内存容量为 2 KB,从地址 0x1100 开始。地址空间的顶部是 56KB 的闪存,为代码和中断向量表保留。
什么 起始地址 结束地址 特殊功能寄存器(16 字节) 0x0000 0x000F 8 位外围设备(240 字节) 0x0010 0x00FF 16 位外围设备(256 字节) 0x0100 0x01FF RAM 内存(2 KB) 0x1100 0x18FF 闪存(56 KB) 0x2000 0xFFFF
对于初学者来说,不要被每个段中存储的内容迷惑——这只会让您感到困惑。问题只是要求你找出十六进制编号,这并不太难。要求如下:
由于内存地址中的每个十六进制数字可以处理 16 个值 (0-F),因此您需要 4 位数字才能显示 64KB 内存(16 ^ 4 = 65536 或 64K)。
从 16 个字节开始,涵盖 0x0000 - 0x000F(地址的整数位)。这意味着紧随其后的下一个段(8 位设备)从 0x0010(下一个字节)开始,由于它的长度为 240 字节,因此它以字节 255 (240 + 15) 或 0x00FF 结束。
下一个段(16 位设备)从下一个字节开始,即 0x0100,长度为 256 字节 - 结束于 0x01FF。
然后是 2KB(2048 字节)的 RAM,但正如描述所述,它从 0x1100 开始,而不是紧接在上一个段之后,所以这就是您的起始地址。添加 2048,您将得到 0x18FF。
最后一段覆盖了内存的上半部分,所以你必须向后工作,你知道它以 0xFFFF(可用内存的末尾)结束,并且它有 56KB 长。如果将 56KB 转换为十六进制,则为 0xDFFF。如果你想象这个段从 0 开始,那么剩下 2000 未使用(0xE000-0xEFFF 和 0xF000-0xFFFF),所以你知道这个段必须从 0x2000 开始到内存空间的上端结束。
我希望这更清楚,尽管当我读完它时,我不知道它有任何帮助:(也许这就是为什么我会把这个概念留给更有资格的人......
#define NUM_SIZES 5
uint16_t sizes[5] = {16, 240, 256, 2 * 1024, 56 * 1024};
uint16_t address = 0;
printf("Start End\n");
for (int i = 0; i < NUM_SIZES; i++)
{
printf("0x%04X 0x%04X\n", address, address + sizes[i] - 1);
address += sizes[i];
}