4

以下是我在计算机工程课程中的最后一次测试中给出的问题示例。有人介意向我解释如何获取每个的开始/结束地址吗?我已经在底部列出了正确的答案...

MSP430F2410 器件的地址空间为 64 KB(基本的 MSP430 架构)。如果我们知道以下内容,请填写下表。地址空间的前 16 个字节(从地址 0x0000 开始)为特殊功能寄存器(IE1、IE2、IFG1、IFG2 等)保留,接下来的 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
4

2 回答 2

4

对于初学者,不要被每个段中存储的内容所迷惑——那只会让你感到困惑。问题只是要求您找出十六进制编号,这并不太难。以下是要求:

  • 64 KB 总内存
  • 地址空间的前16 个字节(从地址 0x0000 开始)保留用于特殊功能寄存器(IE1、IE2、IFG1、IFG2 等)
  • 接下来的240 字节保留给 8 位外围设备
  • 接下来的256 字节保留给 16 位外围设备
  • RAM 内存容量为2 KB,从地址 0x1100 开始
  • 地址空间的顶部是为代码和中断向量表保留的56KB闪存。

由于内存地址中的每个十六进制数字都可以处理 16 个值(0-F),因此您需要 4 位数字来显示 64KB 的内存(16 ^ 4 = 65536,或 64K)。

您从 16 个字节开始,涵盖 0x0000 - 0x000F(地址的一个完整数字)。这意味着紧随其后开始的下一个段(8 位设备)从 0x0010(下一个字节)开始,由于它有 240 个字节长,所以它在字节 256 (240 + 16) 或 0x00FF 处结束。

下一段(16 位设备)从下一个字节开始,即 0x0100,长度为 256 字节 - 结束于 0x01FF。

然后是 2KB(2048 字节)的 RAM,但正如描述所述,它从 0x1100 开始,而不是紧跟在前一段之后,所以这是你的起始地址。加上 2048,你得到 0x18FF。

最后一段覆盖了内存的上部,所以你必须向后工作,你知道它在 0xFFFF(可用内存的结尾)处结束,它有 56KB 长。如果将 56KB 转换为十六进制,则为 0xDFFF。如果你想象这个段从 0 开始,那么剩下 2000 个未使用(0xE000-0xEFFF 和 0xF000-0xFFFF),所以你知道这个段必须从 0x2000 开始到内存空间的上端结束。

我希望这更清楚,尽管当我阅读它时,我根本不知道这有什么帮助:(也许这就是为什么我会把这个概念留给更有资格的人来教授......

于 2010-05-10T14:33:04.787 回答
0
#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];
}
于 2010-05-10T14:22:36.893 回答