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