From 9e95dfc8618d4c9f85f3e3d645bda387ae0a642c Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Fri, 10 Jan 2025 18:01:44 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A014.=20=D0=A3=D1=82=D0=BE=D1=87?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B5=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/14. Programming/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Labs/14. Programming/README.md b/Labs/14. Programming/README.md index db0f47d..0577b5e 100644 --- a/Labs/14. Programming/README.md +++ b/Labs/14. Programming/README.md @@ -496,7 +496,7 @@ _Листинг 2. Пример содержимого файла первичн Исполняемый файл компилятора тот же самый, флаги компоновки будут следующие: - `-march=rv32i_zicsr -mabi=ilp32` — те же самые флаги, что были при компиляции (нам все ещё нужно указывать архитектуру, иначе компоновщик может скомпоновать объектные файлы со стандартными библиотеками от другой архитектуры) -- `-Wl,--gc-sections` — указать компоновщику удалять неиспользуемые секции (сокращает объем итогового файла) +- `-Wl,--gc-sections` — указать компоновщику удалять неиспользуемые секции (сокращает объем итогового файла). Обратите внимание, что **после запятой не должно быть пробела** — это важно! - `-nostartfiles` — указать компоновщику не использовать стартап-файлы стандартных библиотек (сокращает объем файла и устраняет ошибки компиляции из-за конфликтов с используемым стартап-файлом). - `-T linker_script.ld` — передать компоновщику скрипт компоновки @@ -739,7 +739,7 @@ _Листинг 4. Пример кода на C++, взаимодействую 5. [Скомпилируйте](#практика) программу и [стартап-файл](startup.S) в объектные файлы. 6. Скомпонуйте объектные файлы исполняемый файл, передав компоновщику соответствующий [скрипт](linker_script.ld). 7. Экспортируйте из объектного файла секции `.text` и `.data` в текстовые файлы `init_instr.mem`, `init_data.mem`. Если вы не создавали инициализированных статических массивов или глобальных переменных, то файл `init_data.mem` может быть оказаться пустым. - 1. Если файл `init_data.mem` не пустой, необходимо проинициализировать память в модуле `ext_mem` c помощью системной функции `$readmemh` как это было сделано для памяти инструкций. + 1. Если файл `init_data.mem` не пустой, необходимо проинициализировать память в модуле `data_mem` c помощью системной функции `$readmemh` как это было сделано для памяти инструкций. 2. Перед этим из файла `init_data.mem` необходимо удалить первую строку (вида `@20000000`), указывающую начальный адрес инициализации. 8. Добавьте получившиеся текстовые файлы в проект Vivado. 9. Запустите моделирование исполнения программы вашим процессором с помощью тестбенча из ЛР№13.