118 lines
3.5 KiB
Plaintext
118 lines
3.5 KiB
Plaintext
#let header = (
|
||
subject: "Системы ввода вывода",
|
||
lab_number: [1\ "Принципы организации ввода/вывода без
|
||
операционной системы"],
|
||
teacher: [Быковский Сергей Вячеславович]
|
||
)
|
||
|
||
#set text(16pt, lang: "ru")
|
||
#set align(center)
|
||
|
||
#v(1cm)
|
||
|
||
*Федеральное государственное автономное образовательное
|
||
учреждение высшего образования «Национальный исследовательский
|
||
университет ИТМО»*
|
||
|
||
\
|
||
|
||
Факультет Программной Инженерии и Компьютерной Техники
|
||
|
||
#v(2.5cm)
|
||
|
||
*#header.subject*\
|
||
*Отчёт по лабораторной работе №#header.lab_number*
|
||
|
||
#v(4cm)
|
||
|
||
#set text(16pt)
|
||
#set align(left)
|
||
|
||
#table(
|
||
columns: 2,
|
||
stroke: none,
|
||
[*Выполнил:*], [Зинченко Иван Николаевич],
|
||
[*Группа:*], [P3312],
|
||
[*ИСУ:*], [408657],
|
||
[*Преподаватель:*], [#header.teacher]
|
||
)
|
||
|
||
#set align(center)
|
||
|
||
#v(4cm)
|
||
Санкт-Петербург\
|
||
#datetime.today().year() год
|
||
|
||
#pagebreak()
|
||
#set text(12pt)
|
||
#set par(justify: true)
|
||
#set align(left)
|
||
|
||
= Введение
|
||
|
||
== Цель
|
||
|
||
Познакомится с принципами организации ввода/выводе без операционной системы на примере компьютерной системы на базе процессора с архитектурой RISC-V и интерфейсом OpenSBI с использованием эмулятора QEMU.
|
||
|
||
== Задание
|
||
|
||
+ Реализовать функцию `putchar` вывода данных в консоль;
|
||
+ Реализовать функцию `getchar` для получения данных из консоли;
|
||
+ На базе реализованных функций `putchar` и `getchar` написать программу,позволяющую вызывать определенные вариантом функции `OpenSBI` посредством взаимодействия пользователя через меню;
|
||
+ Запустить программу и выполнить вызов пунктов меню, получив результаты их работы;
|
||
+ Оформить отчет по работе в электронном формате.
|
||
|
||
Вариант: 1
|
||
|
||
Пункты меню
|
||
|
||
+ Get SBI implementation version
|
||
+ Hart get status (должно быть возможно задавать номер ядра)
|
||
+ Hart stop
|
||
+ System Shutdown
|
||
|
||
= Выполнение
|
||
|
||
Листинг функций вызова интерфейса OpenSBI:
|
||
|
||
```c
|
||
void putchar(char ch) {
|
||
sbi_call(ch, 0, 0, 0, 0, 0, 0, 0x1 /* Console Putchar */);
|
||
}
|
||
|
||
int getchar(void) {
|
||
return sbi_call(0, 0, 0, 0, 0, 0, 0, 0x2);
|
||
}
|
||
|
||
void sbi_shutdown(void) {
|
||
sbi_call(0, 0, 0, 0, 0, 0, 0, 0x8);
|
||
}
|
||
|
||
sbiret sbi_get_impl_id(void) {
|
||
return sbi_call(0, 0, 0, 0, 0, 0, 0x1, 0x10);
|
||
}
|
||
|
||
sbiret sbi_get_spec_version(void) {
|
||
return sbi_call(0, 0, 0, 0, 0, 0, 0x2, 0x10);
|
||
}
|
||
|
||
sbiret sbi_hart_stop(void) {
|
||
return sbi_call(0, 0, 0, 0, 0, 0, 0x1, 0x48534D);
|
||
}
|
||
|
||
sbiret sbi_hart_get_status(unsigned long hartid) {
|
||
return sbi_call(hartid, 0, 0, 0, 0, 0, 0x2, 0x48534D);
|
||
}
|
||
```
|
||
|
||
Вывод в консоль работы функций:
|
||
|
||
#figure(
|
||
image("Screenshot 2026-02-20 161216.png"),
|
||
caption: "результат работы команд 1, 2, 4, 5"
|
||
)
|
||
|
||
#figure(
|
||
image("Screenshot 2026-02-20 161228.png"),
|
||
caption: "Результат работы команды 3"
|
||
) |