Как правильно рассчитать адресные пространства?

Ниже приведен пример вопроса, заданного на моем последнем тесте по курсу компьютерной инженерии. Кто-нибудь может объяснить мне, как получить начальный/конечный адреса каждого? Я написал правильные ответы внизу...

Устройство MSP430F2410 имеет адресное пространство 64 КБ (базовая архитектура MSP430). Заполните приведенную ниже таблицу, если нам известно следующее. Первые 16 байт адресного пространства (начиная с адреса 0x0000) зарезервированы для регистров специальных функций (IE1, IE2, IFG1, IFG2 и т. д.), следующие 240 байт зарезервированы для 8-битных периферийных устройств, а следующие 256 байт зарезервировано для 16-битных периферийных устройств. Объем оперативной памяти составляет 2 Кбайта, и она начинается с адреса 0x1100. В верхней части адресного пространства находятся 56 КБ флэш-памяти, зарезервированные для кода и таблицы векторов прерываний.

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

person Nedlinin    schedule 10.05.2010    source источник


Ответы (1)


Во-первых, не сбивайтесь с толку тем, что хранится в каждом сегменте — это только запутает вас. Проблема только в том, чтобы попросить вас вычислить шестнадцатеричную нумерацию, и это не так уж сложно. Вот требования:

  • 64 КБ общей памяти
  • Первые 16 байт адресного пространства (начиная с адреса 0x0000) зарезервированы для регистров специальных функций (IE1, IE2, IFG1, IFG2 и т. д.)
  • Следующие 240 байт зарезервированы для 8-битных периферийных устройств.
  • Следующие 256 байт зарезервированы для 16-битных периферийных устройств.
  • Объем оперативной памяти составляет 2 Кбайта и начинается с адреса 0x1100.
  • В верхней части адресного пространства находится 56 КБ флэш-памяти, зарезервированной для кода и таблицы векторов прерываний.

Поскольку каждая шестнадцатеричная цифра в вашем адресе памяти может обрабатывать 16 значений (0-F), вам потребуется 4 цифры для отображения 64 КБ памяти (16 ^ 4 = 65536 или 64 КБ).

Вы начинаете с 16 байтов, и это охватывает 0x0000 - 0x000F (одна полная цифра вашего адреса). Это означает, что следующий сегмент, который начинается сразу после него (8-битные устройства), начинается с 0x0010 (следующий байт), а поскольку его длина составляет 240 байт, он заканчивается на байте 256 (240 + 16), или 0x00FF.

Следующий сегмент (16-битные устройства) начинается со следующего байта, который равен 0x0100, и имеет длину 256 байтов, то есть заканчивается на 0x01FF.

Затем идут 2 КБ (2048 байт) ОЗУ, но они начинаются с 0x1100, как указано в описании, а не сразу после предыдущего сегмента, так что это ваш начальный адрес. Добавьте к этому 2048, и вы получите 0x18FF.

Последний сегмент покрывает верхнюю часть памяти, поэтому вам придется работать в обратном порядке. Вы знаете, что он заканчивается на 0xFFFF (конец доступной памяти) и имеет длину 56 КБ. Если вы преобразуете 56 КБ в шестнадцатеричный формат, это будет 0xDFFF. Если вы представите, что этот сегмент начинается с 0, это оставит 2000 неиспользованными (0xE000-0xEFFF и 0xF000-0xFFFF), поэтому вы знаете, что этот сегмент должен начинаться с 0x2000 и заканчиваться в верхнем конце области памяти.

Я надеюсь, что это более понятно, хотя, когда я читаю это, я не знаю, поможет ли это вообще :( Может быть, поэтому я оставлю преподавание этой концепции кому-то более квалифицированному...

person SqlRyan    schedule 10.05.2010
comment
Это объяснение как раз то, что мне было нужно. Не стесняйтесь, приходите и учите наш класс... будьте намного полезнее, чем нынешний учитель! Очень признателен. - person Nedlinin; 10.05.2010