如何正确地计算出地址的空间?
-
25-09-2019 - |
题
下面是一个例子的一个问题给予我的最后一次测试一个计算机工程课程。任何人想解释一下我如何获得开地址的每个?我已经列出了正确的答案在底部...
该MSP430F2410装置具有一个地址空间的64KB(基本MSP430构).填写下表,如果我们知道以下。第16字节的地址空间(从开始的地址0x0000)保留用于特殊功能的寄存器(IE1,IE2,IFG1,IFG2,等等), 下一个240字节是保留为8位的外围设备,以及下一个256bytes被保留用的16位外围设备。RAM的存储容量为2千字节,并开始在的地址0x1100.顶部的地址空间56KB的闪存留用于代码和中断矢量表。
What Start Address End Address Special Function Registers (16 bytes) 0x0000 0x000F 8-bit peripheral devices (240 bytes) 0x0010 0x00FF 16-bit peripheral devices (256 bytes) 0x0100 0x01FF RAM memory (2 Kbytes) 0x1100 0x18FF Flash Memory (56 Kbytes) 0x2000 0xFFFF
解决方案
对于初学者来说,不得扔掉的是什么储存在每个分段-这只会迷惑你。问题只是要你找出六角的编号,这是不是太困难。这要求:
- 64KB全存储器
- 第一 16字节 地址空间(从开始的地址0x0000)保留用于特殊功能的寄存器(IE1,IE2,IFG1,IFG2,等等。)
- 下一个 240字节 是保留为8位的外围设备
- 下一个 256bytes 被保留用的16位外围设备
- RAM记忆能力 2千字节 并且它开始在的地址0x1100
- 顶部的地址空间 56KB 的闪存留用于代码和中断矢量表。
由于每一六位数字在你的记忆地址可以处理16个值(0-F),你会需要4位数字显示64KB的存储器(16^4=65536,或64K).
你开始16个字节,涵盖0x0000-0x000F(一个完整的两位数你的地址)。这意味着,下一个分段,其开始之后立即它(8位设备),开始在0x0010(下一个字节),并且由于它是240字节长,它结束在字节256(240+16),或0x00FF.
下一分段(16位设备)开始,在下一个字节,其0x0100,并256bytes长即将结束,在0x01FF.
然后是2KB(2048字节)存,但是它开始在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];
}