Вопрос

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

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

Какой запуск Address Address Address Special Functions (16 байт) 0x0000 0x000f 8-битные периферийные устройства (240 байт) 0x0010 0x00ff 16-битные периферийные устройства (256 байт) 0x0100 0x01ff RAM-память (2 кбайты) 0x1100 0x18ff Flash-память (56 кбайт) 0x2000 0xffff.
Это было полезно?

Решение

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

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

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

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

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

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

Последний сегмент охватывает верхнюю часть памяти, поэтому вам придется работать назад, вы знаете, что он заканчивается на 0xFFFF (конец доступной памяти), а это 56 КБ длиной. Если вы преобразуете 56 КБ в Hex, это 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];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top