Обработка прерываний в кооперативной версии

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Обработка прерываний в кооперативной версии

Сообщение БудДен » 17.10.22 09:59

Interrupts.Mod:

Код: Выделить всё

(* Handler for a specific interrupt. *)
проц Handle (index: размерМЗ);
	(* this is a workaround for a buggy USB driver that sends too many interrupts *)
	если index # CPU.IRQ0 (* timer interrupt *) то CPU.DisableIRQ(index) всё;
А ведь где-то уже упоминалось, что 0 - это таймер... Ща попробую найти, где.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Обработка прерываний в кооперативной версии

Сообщение БудДен » 17.10.22 10:13

Не смог найти, но стоит дальше поизучать кооп. версию - ведь там используются все процессоры, может быть и прерывания от таймера настроены для всех процессоров.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Обработка прерываний в кооперативной версии

Сообщение БудДен » 20.10.22 22:39

Ветка работает-таймер-RPiC описывает эксперимент в котором, как надеюсь, таймер прерывания срабатывает, хотя кто знает, что это на самом деле за прерывание с кодом 5?

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Обработка прерываний в кооперативной версии

Сообщение БудДен » 28.10.22 21:24

Выяснилось, что в RPi нет GIC, поэтому обрабатывать прерывания так же, как в Zynq - не получится, нужно переделывать ВСЁ.

https://forums.raspberrypi.com/viewtopic.php?t=138548

Но нужно понять, сколько нам вообще прерываний нужно. Таймер я уже научился настраивать.

You nominate 1 core to handle all peripheral interrupts. Other interrupts (like inter-core mailboxes) are routed separately. But it looks like you can send IRQ and FIQ to different cores, so if you don't mind losing FIQs you could divert ONE of the gpu interrupts to a separate core as an FIQ.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Обработка прерываний в кооперативной версии

Сообщение БудДен » 28.10.22 23:43

CPU.InstallInterrut(HandeTimer, CPU.IRQ) - все прерывания вещаются на IRQ, и уже сам обработчик должен проверять, его ли прерывание.

И при том, мы выкидываем старый обработчик, устанавливая новый - это какая-то чушь!

Хаха, в процессе инициализации RPiC вообще не инициализируеются прерывания! А где они используются?

Код: Выделить всё

Interrupts.Install
   Environment/Read 
   Environment/Sleep
   Objects/Interrupter.Init
      interrupt
         Objects/InstallHandler - нигде не используется
значит, надо попробовать, работает ли Sleep и Read. Или не надо. Непохоже, чтобы это всё вообще работало.

Ответить