Опубликован: 19.01.2025 | Доступ: свободный | Студентов: 1 / 0 | Длительность: 02:34:00
Лекция 3:

Инструменты разработчика

< Лекция 2 || Лекция 3: 123 || Лекция 4 >

Примеры к этому курсу выложены на GitHub, в каждом из каталогов примеров лежит файл platformio.ini. Эти файлы подготовлены для запуска примеров в Qemu с использованием пользовательского режима.

Пример работы в Visual Studio Code с расширением PlatformIO

Для получения окружения для программирования на языке Assembler в расширении PlatformIO среды разработки VS Code наберите к консоли расширения PlatformIO команду:

https://github.com/e1d1-academy/platform-linux_riscv.git

В расширении PlatformIO есть возможность работать под различны платформы, и если в диалоге вы наберёте "Linux", вам будет доступно окружение для ОС Linux для архитектуры RISC-V.

В появившемся списке вы можете кликнуть на требуемое окружение и увидите, что там есть раздел с примерами, которые можно импортировать и попробовать их в работе. Все примеры идут с конфигурационными файлами, которые позволяют сгенерировать шаблон приложения с вашим собственным кодом на языке Assembler. Этот код можно компилировать прямо из среды VS Code, а также запускать его как в обычном режиме, так и в режиме отладки.

В результате работы показанного примера на экран выводится фраза "Hello World!".

Мини-компьютер StarFive VisionFive и набор инструментов RISC-V GNU Toolchain

Одноплатный компьютер StarFive VisionFive поставляется с двухъядерным RISC-V процессором с архитектурой RV64IMAFDC. По умолчанию поставляется с ОС Fedora Linux и предустановленным набором инструментов. Этот одноплатный компьютер можно использовать как "живую" аппаратную платформу с процессором RISC-V и работать на нём без необходимости устанавливать эмуляторов, симуляторов и кросс-ассемблеров.

На рис.2.4 показан скриншот рабочего стола xfce4 с четырьмя открытыми терминалами, запущенного на плате VisionFive.

Рабочий стол Linux на плате VisionFile с запущенными терминалами с набором инструментов GNU toolchain

Рис. 2.4. Рабочий стол Linux на плате VisionFile с запущенными терминалами с набором инструментов GNU toolchain

В левом верхнем углу расположен первый терминал, в нём открыт текстовый редактор nano с исходным кодом файла example.s. Чтобы воспроизвести это, наберите в консоли команду:

nano example.s

Затем вставьте скопированный программный код (или напишите его самостоятельно) и запишите содержимое файла на диск, нажав сочетание клавиш ^O (Сtrl+o).

Во втором терминале, расположенном слева посередине, показан результат сборки и линковки с последующей распечаткой дизассемблированного кода, выполненной с использованием утилиты objdump, а также результат запуска программы - демонстрация возвращаемого программой кода возврата. Отладочная информация внесена в исполняемый бинарный файл благодаря ключу "-g" компилятора. Для воспроизведения этих результатов введите в консоли команды:

as -g -o example.o example.s
ld -o example example.o
objdump -d example
./example
echo $?

В третьем терминале, расположенном слева внизу, показана работа отладчика. Для воспроизведения введите в консоли команду:

gdb example

После запуска отладчика были использованы следующие управляющие команды: "layout src" - показать исходный код, "b 5" - установить точку останова на строке 5, "r" - запустить код на исполнение до точки останова, "info reg x107quot; - показать содержимое регистра x10:

(gdb) layout src
(gdb) b 5
(gdb) r
(gdb) info reg x10

Из отладчика можно выйти, набрав команду "q".

И, наконец, четвёртый терминал, расположенный справа, выводит информацию о процессоре.

Исходные коды примеров:

Исходные коды доступны в репозитории github по адресу: http://https://github.com/U2654/LFD117x

Контрольные вопросы

  1. Чем объектный файл отличается от исполняемого?
  2. В чём отличие ассемблера от языка ассемблера?
  3. Как компоновщик получает исполняемый файл из нескольких объектных?
  4. Состояние каких модулей процессора позволяет отслеживать Ripes?
  5. Чем симулятор отличается от эмулятора?
  6. В каких режимах может работать Qemu?
  7. Как с помощью objdump посмотреть информацию об исполняемом файле?
  8. Как отладчиком подключиться к запущенному процессу в Qemu?
  9. Какие команды отладчика необходимо использовать для выполнения программы?
  10. Какие команды позволяют просматривать значения переменных/регистров в процессе отладки?
< Лекция 2 || Лекция 3: 123 || Лекция 4 >