Правильно ли я вообще понимаю как устроенны клавиатурные прерывания?
In the default configuration, break codes are the make scan codes with the high bit set; make codes 60h,61h,70h, etc. are not available because the corresponding break codes conflict with prefix codes (code 2Ah is available because the self-test result code AAh is only sent on keyboard initialization). An alternate keyboard configuration can be enabled on AT and later systems with enhanced keyboards, in which break codes are the same as make codes, but prefixed with an F0h scan code.
11.1.1 Processor State After Reset
третьего тома увидеть следующее:Откуда процессор берёт значения которые указывают адрес reset vector. Где они хранятся пока процессор выключен.
STM32 общается с микросхемой по SPI.
Почему вместо ведомого снова говорит мастер?
Может у вас есть мысли какие-то?
Может надо сделать их объектными elf файлами, затем скомпоновать и зачистить формат?
gcc
для компиляции исходников на С (*.c
) и ассемблере (*.S
), gcc
или ld
для линковки, objcopy
для преобразования ELF-файла с выхода линковщика в бинарник.как Cmake передать расположение библиотеки openssl под нужную архитектуру (я попытаюсь собрать openssl из исходников под aarch64).
В CMakeLists.txt модуль обнаруживается при помощи find_package(OpenSSL REQUIRED).
Если сигнал синусоидальный то погрешность не превышает 0,3% на 2 КГц, но если цифровой сигнал(мендр) то погрешность может достигать 2% на 2 КГц.
Почему у меня не хотят работать корректно цепные команды?
mov ax,Data2
mov es,ax ; запис адреси data2 в ds
...
lea si, node1 ; <---
node1
находится в сегменте Data2
, адрес которого загружен в es
, но команда lodsb
загружает данные из ds:si
.@finish_cycle_namex:
inc I_struc ;+1 до ітерації
add si, 5
si
? si
указывает на область памяти в которой лежит массив 5-символьных имён, внутренний цикл как раз перемещает si
на следующее имя. Почему от добавления функций помимо main() в начало кода ядро перестает работать?
i686-elf-ld -Ttext 0x7E00 --oformat binary kernel.o -o kernel -e main
; Jump to the kernel's entry point
JMP 0x0000:0x7E00
-e main
?main()
. Чтобы поместить нужный код в нужное место собранного образа обычно используют скрипт линковщика.Как ... автоматически запускать bash скрипт после загрузки ядра linux?
/etc/inittab
или добавлением файла с именем вида S[0-9][0-9]*
в /etc/init.d
(если busybox), либо добавлением юнита systemd если systemd.С помощью buildroot
Как узнать, какой адрес этих регистров уже после инициализации устройств и загрузки ОС?
ioremap()
или какой-нибудь его обёрткой. Если драйверу нужен доступ к регистрам -- драйвер просто вызывает ioremap()
сам и получает адрес. Если доступ нужен в юзерспейсе -- можно (при наличии разрешений) сделать mmap()
файлу /dev/mem
по смещению равному физическому адресу устройства.Или обратная задача: есть процесс, который пишет в некоторую область памяти, как узнать, возможно, это какие-то регистры SOM
cat /proc/<pid>/maps
и посмотреть, что отображено в эту область виртуальных адресов.// Получаю ошибку:
7FFF0000: The instruction at 0x7FFF0000 referenced memory at 0x7FFF0000. The memory could not be executed -> 7FFF0000 (exc.code c0000005, tid 6332)
В чем проблема?
7FFF0000
-- не исполняемая.Как починить?
7FFF0000
исполняемой. После этого вывод в лог должен заработать, но будет падать после него, потому что функция mySuperFunction
не возвращается. Почему ОС не запускается на Virtual box, а на QEMU запускаеться?
-enable-kvm
, то оно тоже не будет работать.ret
в реализацию GDT::load_gdt()
и не вызывать load_tss()
то оно начинает в qemu-kvm работать:diff --git a/src/GDT/GDT_impl.s b/src/GDT/GDT_impl.s
index 4f69835abd9d..5476837f3d0a 100644
--- a/src/GDT/GDT_impl.s
+++ b/src/GDT/GDT_impl.s
@@ -2,6 +2,7 @@
.extern _ZN8SimpleOS3GDT7gdt_ptrE
_ZN8SimpleOS3GDT8load_gdtEv:
lgdt _ZN8SimpleOS3GDT7gdt_ptrE
+ ret
.global _ZN8SimpleOS3GDT8load_tssEv
_ZN8SimpleOS3GDT8load_tssEv:
выводится ошибка - [: missing `]'
Что значит эта ошибка
if [ "$projectDir" == "video" && "$flag" != "noflag" ]; then
следующим образом: ключевое слово if
, команда [
с аргументами "$projectDir" == "video"
, оператор &&
, команда "$flag"
с аргументами != "noflag" ]
, разделитель ;
, оператор then
.[
(она же test
), очевидно, не нашла в своих аргументах закрывающей скобки ]
, которая должна там быть при таком её вызове.как ее можно исправить?
-a
вместо &&
, как говорит man test. std::copy(arr1, arr1 + n, buf);
int off = 0;
...
for (GLfloat i = 0; i <= 3.14; i += 0.01)
for (GLfloat j = 0; j <= 2.0 * 3.14; j += 0.01)
{
...
std::copy(arr1, arr1 + n, buf + off);
off += n;
}
кода я не нашел, или плохо искал
через ряд тейлора не вариант при больших значениях угла ряд медленно сходится