From ab21e222e4c7a65ff62a187fe55d3993cd20a574 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 23 Jan 2024 14:17:14 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A013.=20=D0=9E=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BA=D1=80=D0=B8?= =?UTF-8?q?=D0=BF=D1=82=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D1=89=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ранее, чтобы секция данных начиналась с адресов, кратных размеру памяти данных (поскольку при обращении к ячейкам памяти данных мы отбрасываем старшие биты адреса) в скрипте компоновщика размер секции .text приравнивался размеру памяти данных, что сбивает с толку. Вместо этого добавлен тернарный оператор для выбора подходящего стартового адреса. Кроме того, добавлена проверка того, что размер памяти инструкций и данных является степенью двойки. --- Labs/13. Programming/linker_script.ld | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Labs/13. Programming/linker_script.ld b/Labs/13. Programming/linker_script.ld index d77583fb..139afe00 100644 --- a/Labs/13. Programming/linker_script.ld +++ b/Labs/13. Programming/linker_script.ld @@ -5,10 +5,18 @@ ENTRY(_start) /* мы сообщаем компоно находится у метки "start" */ -_text_size = 0x4000; /* Размер памяти инстр.: 16KiB */ -_data_base_addr = _text_size; /* Стартовый адрес секции данных */ +_text_size = 0x1000; /* Размер памяти инстр.: 4KiB */ _data_size = 0x4000; /* Размер памяти данных: 16KiB */ +ASSERT(!(_text_size & (_text_size-1)), /* Проверка что размеры памяти */ +"Instr mem size is not power of 2") /* являются степенью двойки */ +ASSERT(!(_data_size & (_data_size-1)), +"Data mem size is not power of 2") + +_data_base_addr = _text_size >= _data_size ? /* Стартовый адрес секции данных */ + _text_size : _data_size; /* указан как больший из размеров*/ + /* секции инструкций/данных */ + _data_end = _data_base_addr + _data_size; _trap_stack_size = 2560; /* Размер стека обработчика перехватов.