Я новичок в этой области & Я пишу C ++ / ассемблерный код для сравнения (измерения времени выполнения) части кода в тактах. Мне нужно отключить упреждающие и жесткие прерывания через мой код. Я знаю, что разработка ядра Linux позволяет использовать preempt_disable (); &Функция raw_local_irq_save (flags) делает то же самое.
Мой вопрос заключается в том, что я пишу не модуль ядра, а обычную программу на C / C ++ в пространстве пользователя. Могу ли я использовать эти системные вызовы через мой код C ++ (т. Е. Из пространства пользователя / без модуля ядра?) Какие файлы заголовков следует включить. Если да. Может ли кто-нибудь дать мне ссылки для чтения или примеры?
Спасибо!!
Вы не можете сделать это из пользовательского приложения, особенно отключая аппаратные прерывания, которые обеспечивают основу для многих основных функций ядра, таких как хронометраж.
Вместо этого вы можете использовать sched_setscheduler(2)
установить, скажем, SCHED_FIFO
приоритет в реальном времени, то есть попросите ядро не выгружать ваше приложение до тех пор, пока оно добровольно не освободит процессор (обычно системный вызов). Будьте осторожны — вы можете легко заблокировать свою систему таким образом.
Обычно это невозможно. Ядро не позволит вам блокировать прерывания.
Но назначение себя очень высоким prio обычно достаточно хорошо. Кроме того, убедитесь, что тестируемый код выполняется достаточно долго, например, запустив его 10000 раз в цикле. Таким образом, некоторые прерывания не имеют значения при подсчете общего цикла. По моему опыту, время выполнения кода в 1 секунду достаточно (при условии, что ваша система не подвергается нагрузке), для домашних тестов.