Поздравляем Лaгyнoв с днём рождения!
- RISC-V, прерывания, стек прерываний и mscratch применительно к ОСРВ
Задал вопрос в телеграм-канале RISC-V MCU. Задам и тут: Nikolay_Po(1626 знак., 10.06.2026 22:55, ARM, полностью)
- Доделал я порт FreeRTOS для QingKeV4 с включённой вложенностью
прерываний. Как тов. Клен тут пояснял в своих примерах, ограничился
только прерываниями с HPE, то есть, уровень вложенности до 3х
включительно. Nikolay_Po(1359 знак., 10.07.2026 14:25, +2)
- CAUTON: Не используйте HPE с FreeRTOS. Путём долгих страданий,
выяснил, что HPE не совместим с существующим шаблонным механизмом
сохранения, а, главное, восстановления контекста. Причём выяснил
это не сразу. Не давала покоя жажда оптимизаций и выжимки скорости. Nikolay_Po(585 знак., 15.06.2026 17:32)
- Вот моя шпаргалка на тему вымучивания HPE+FreeRTOS которую себе
написал храню в FreeRTOSConfig.h klen(3778 знак., 15.06.2026 19:50)
- В качестве ликбеза, почему SysTick должен вытеснять SWI? Пусть себе
переключится до конца. А то выйдет так, что SysTick обнаружил, что
нужно передать управление другой задаче и поменяет текущий TCB, в
то время, как процесс переключения контекста ещё не завершён... Я
наоборот думал, и, возможно, читал в комментариях на
forums.freertos.org, что вложение этих двух прерываний, таймера и
переключателя контекста, должно быть исключено... - Nikolay_Po(16.06.2026 16:50)
- OK. Приму объяснение, что SysTick нужен для выполнения регулярных,
требовательных к низкому джиттеру, действий, а так же для
минимального джиттера значения системного времени, используемого из
более приоритетных прерываний, как пользующихся API, так и нет.
Предположу, что SysTick-у безопасно отдать приоритет, так как
работа вызываемого внутри xTaskIncrementTick() влияет только на
определение потребности в переключении контекста, без влияния на
процесс переключение. Если Nikolay_Po(20 знак., 17.06.2026 16:42)
- Ну вроде это очевидно, что если ртосина не может контролировать
контекст, то и работать не будет. - =AlexD=(15.06.2026 17:55)
- Мне до обнаружения этой очевидности пара недель потребовалась.
Чувствую себя как тот кадр, у которого не получается
программировать МК... - Nikolay_Po(15.06.2026 17:59)
- Давайте разбирастя, ув. кроты! контекст прерывания ( читай по сути
исключения процессора ) и "что то где сохраняется контекст
FreeRTOS" - веши перпендикулярные. 0) в FreeRTOS прерываний не
существует 1) контекст исключений и контекст задач - ваще не одно и
тоже 2) FreeRTOS + исключения(прерывания у меня работают с HPE 3)
Где я балбес? - klen(15.06.2026 19:04)
- Есть вопросы. 1. Как при выходе из прерывания, при включённом HPE,
если это прерывание само меняет контекст и само восстанавливает по
своему разумению те же регистры, что восстанавливает и HPE,
оставить контекст RTOS для задачи, а не восстановленое HPE
состояние регистров на момент входа в прерывание? Я знаю только
один способ - установить GIHWSTKNEN и выйти, предварительно сбросив
MIE, чтобы защититься от вложенности. Nikolay_Po(579 знак., 16.06.2026 17:13)
- У меня такая переключалка выходит, в части блокировки прерываний
приоритетом до RTOS API включительно: Nikolay_Po(1443 знак., 16.06.2026 16:46)
- Контекст сохраняется не где-то каг-то, а в прерывании ;-). А из
прерывания переключения контекста он уходит не строго обратно, а
уже в другую задачу. А таг всё верно ;-). - =AlexD=(16.06.2026 10:24)
- Дык, стек РТОС, это доступ через какой-нить индексный регистр,
программно, а стек вызовов-прерываний проца, это чисто механическая
штука. Прерывания, вообще, для кода, прозрачны, он их не осчучает:
откуда-то, из параллельной вселенной, ему падают флаги и данные. - mse homjak(15.06.2026 19:15)
- я разумею почти так же ( сохранение регистров проца при эксепшене
не совсем аппаратная штука - традиционно компилятор генерит пролог
и эпилог ). вопрос в том где связзь HPE и кода сохранения и подъема
контекста задачи ОС? я утверждаю что её нет. но это не точно :)
думаю что суть в правильном назначении приоритетов прерываниям - у
меня в этом было откровения после которых все заработало с HPE - klen(15.06.2026 19:43)
- Меня что беспокоит: если я выхожу из прерывания, при входе в
которое было включено HPE, то при выходе, регистры, сохраняемые
аппаратно, восстановятся на значения в момент входа. Как быть, в
таком случае, с прерыванием, которое переключало контекст задачи и
при выходе должно оставить новые значения регистров, не те, чтобы
были на момент входа? Разве HPE не будет препятствовать сохранению
новых значений регистров, если они - контекст задачи RTOS, на
которую только что Nikolay_Po(14 знак., 16.06.2026 17:16)
- Дык, этта... Контекст задачи должэн переключать планировщик. - mse homjak(16.06.2026 18:46)
- Ну так все порты FreeRTOS на RISC-V (да и на прочие схожие по
возможностям контроллера прерываний чипы/архитектуры), используют
для переключения контекста прерывание. Контекст прерывания (содержимое набора регистров, значение указателя стека) перед
возвратом из прерывания, заменяется на контекст задачи ОС (то же самое, плюс некоторые регистры, которые могут не
сохранятся при обычном прерывании). И HPE этому препятствует,
восстанавливая контекст прерывания Nikolay_Po(996 знак., 16.06.2026 21:10)
- Ну, ХЗ. Я предполагал, что стек задачи, это не стек машины. Или там
нет возможности для такого финта ушами? Ну, типа, mashine/user
mode. Там указателя стека, как такового, нет, мож как-то можно
разделять стек машины и стек задачи? По крайней мере, команда mret
на что-то намекает. Да и, в принцыпе, наработана масса трюков, типа
замены вершины стека и возврат из прерывания в процэдуру
сохранения/смены контента для переключения задач. - mse homjak(16.06.2026 22:36)
- Если задача должна быть вытеснена (а FreeRTOS - вытесняющая ОС),
это можно сделать, лишь прервав задачу прерыванием. Внутри
прерывания, вместо восстановления контекста прерывания "как было до
прерывания", восстанавливается контекст более приоритетной задачи.
И вот это нетиповое использование прерывания, с возвратом не в
прежний контекст прерывания, а в новый, и, по моему мнению, не
совместимо с аппаратным восстановлением контекста. Nikolay_Po(387 знак., 16.06.2026 22:37)
- Сохранение, да. Но эксепшын, аппаратен и сразу, в машине моде. Т.е
код будет исполнен всегда, плус, у него свои регистры и всё такое. mse homjak(366 знак., 15.06.2026 19:58)
- А нет желания спросить у синего кита? Он тоже китайский, про свои
родные контроллеры ответят: ### Резюме по вашим вопросам: 1.
**Верно.** Каждое прерывание (и вложенное в том числе), которое
может вызвать переключение контекста, должно работать на выделенном
стеке прерываний, чтобы не затереть стек задачи. 2. **Верно.**
Использовать `naked` обязательно. Компилятор не знает про
`mscratch` и вашу логику переключения стеков. Только ручное
управление контекстом спасет Yft(925 знак., 11.06.2026 17:11)
- ниче не понял, но вопросы правильные. я когда портил - сильно лоб
морщил. у меня сделано 1) не все прерывания выключаются, только те
что могуть влиять на планировщик, для этого есть регистр
PFIC_ITHRESDR порога пиоритета 2) таски работают в user режиме чтоб
не достали до SCR-регистров. 3)чтото еще перепиливал klen(23200 знак., 11.06.2026 01:00, ссылка)
- Посмотрел я. И не понравилось в твоих примерах, что прерывания
глобально блокируются дольше, чем мне хотелось, см. GIHWSTKNEN. С
момента его установки, глобально прерывания блокированы. Nikolay_Po(179 знак., 24.06.2026 23:26)
- Кстати, в шаблоне для RISC-V, в свежем порте FreeRTOS, заложили
условное сохранение контекста FPU: Nikolay_Po(129 знак., 15.06.2026 13:42, ссылка)
- Правильно ли я понял, что для ОСРВ, прерывания полностью
блокируются сбросом бита MIE? И нет возможности
разрешать не запрещать более приоритетные прерывания, не влияющие на задачи
и переключения контекста ОС? Nikolay_Po(975 знак., 12.06.2026 22:03)
- А где эти? Особенно интересуют макросы для обработчиков прерываний
при входе POP_ISR_SP и выходе PUSH_ISR_SP. Nikolay_Po(451 знак., 11.06.2026 15:30)
- какая прелЭсть этот buzzer + RTTTL: залип на сутки... акацца мы все
композиторы, то что музыканты это талантливые люди - в общем то
вранье, что такое ноты и как ими писать музло выучил за пол часа klen(16549 знак., 09.07.2026 21:43, dao, ссылка, картинка, полностью, +2)
- Пишут, что принят закон об обороне, который отменяет ряд других
законов и правил. - БAPMAЛEЙ(1 знак., 08.07.2026 18:22, Off, ссылка, полностью)
- Цифровой железный занавес: Как новая политика Google к 2027 году
может стереть VK и мессенджер MAX с ваших смартфонов - De_user(1 знак., 09.07.2026 14:28, zen, ссылка, полностью)
- Подскажите, какая существует альтернатива Multisim с похожим
интерфейсом ввода схемы для симуляции? Кроме Proteus. Multisim
никак не показывает нелинейность транзисторного двухтактного
усилителя вблизи 0,7В. - Make_Pic(01.07.2026 18:56, SCH, полностью)
- Увидел диво дивное Овен МК210-302! В чем диво? Езернет соединяется
по типу Езеркат!!! на каждом модуле два порта, сначала подумал что
запихнули в модуль коммутатор, ан нет. Написано, что при выключении
питания сигнал прокидывается между портами. Как они это сделали?
Подозреваю, что тупо соединили РЖ45 в параллель. - IBAH(1 знак., 08.07.2026 15:52, SCH, ссылка, полностью)
- Здесь ссылка на вскрытие с фото в конце - bodis(1 знак., 08.07.2026 18:27, ссылка)
- У MOXA ioLogic1200 подсмотрели. Только там, по-моему, все же
коммутатор стоит. bodis(2 знак., 08.07.2026 16:37, ссылка, картинка)
- Вот есть гигабитная сетевая карта с двумя портами и релюхами для
проброса между ними: SciFi(155 знак., 08.07.2026 16:10, ссылка)
- (Поляризованное?) реле с переключающими контактами на 4 (8?)
направления. В нормальном режиме работают два раздельных линка, в
режиме Ethernet Bypass контакты обоих разъемов замыкаются промеж
себя. - reZident(08.07.2026 16:00)
- к слову про новость. ПОКА еще солярка идет по обычным у нас ценам
(в отличие от 115-170руб/литр бензина). Но вот Новак делает то, что
должны были по бензину 4 месяца назад - "Правительство России ввело
запрет на экспорт дизельного топлива. Об этом заявил вице-премьер
РФ Александр Новак." - Лaгyнoв(1 знак., 08.07.2026 18:52, Off, ссылка, полностью)
- это ж надо придумать такое название :-) - Мегациклон «Гайдар»
обрушится на Москву 11 и 12 июля Об этом сообщает "Рамблер". - Лaгyнoв(1 знак., 08.07.2026 15:30, Off, ссылка, полностью)
- а за ним - "Чубайс"! - =L.A.=(08.07.2026 19:29)
- Название "Бернадетт" (2023).. В главной роли Катрин Денев.. Кто то
с Егоркой спутал.. Solo(2 знак., 08.07.2026 18:50, ссылка, картинка)
- А они там не добавили "через 35 лет снова " ? - Kpoк(08.07.2026 16:53)
- Гайдар или Гейдар (азербайджанское имя) в тюркоязычных языках
означает "впереди идущий" или "всадник, скачущий впереди". - reZident(08.07.2026 15:54)
- По мне, так всадник без головы лучше звучит. - Visitor(08.07.2026 20:28)
- Аркадий Голиков, если и получил это погоняло в Хакассии от хакасов
(енисейских татар), то видимо, в насмешку "хайдар" на хакасском -
"покажи дорогу" bodis(335 знак., 08.07.2026 16:53 - 16:58)
- Heydər Əliyev (Гейдар Алиев) - папа нынешнего президента
Азербайджана. - reZident(08.07.2026 17:03)
- Heydər - Лев bodis(1 знак., 08.07.2026 18:01, картинка)
- "Словарь арабских и персидских слов". Причем тут арабский язык? Он
не входит в семейство тюркских языков. Как и персидский. Хотя
А(р)слан в тюркских языках - да, как Лев переводится. По-татарски
Лев - Арыслан вроде бы. - reZident(08.07.2026 18:13)
- Тебя не смущает, что большинство русских имен происходят из
древнегреческого, латинского или древнеарамейского языков.
Например, Леонид - "Подобный льву", а то просто - Лев. - bodis(08.07.2026 18:23)
- Нет, не смущает. В русском языке "лев" обозначает животное
семейство кошачьих, а Леонид - просто мужское имя, имеющее
иноязычное происхождение. В тюркских языках "лев" это именно а(р)слан, а не хейдар, как в арабском. - reZident(08.07.2026 19:12)
- Самая древняя форма тюркских языках "аң" - "зверь". На том же
тюркском "арсты-аң" , "арслы-аң" - "рычащий зверь", по другой
версии "ар(с)-аң" - "желтый зверь" . У арабов, вообще, около 500
названий для "льва", и все они могут использоваться как мужские
имена. Например, Асад, Усама, Хейдар (рычащий зверь), Музафар
(желтый зверь). В древнерусском также существовало 2 формы для
обозначения льва: "лютый зверь" (в летописях и устном народном
творчестве), "лев" (в переводной bodis(119 знак., 09.07.2026 13:18)
- Хедер - начальная школа у евреев. - Kpoк(08.07.2026 18:03)
- И только скромность мешала ему писать Гайдар-16. - Kpoк(08.07.2026 16:54)
- ну это все советские школьники знали. :-) - Лaгyнoв(08.07.2026 16:28)
- Бывало, пели эту песню - Этo_Я(490 знак., 08.07.2026 16:21)
- То есть "пионер Гайдар" - это как "вожатый вожатый"... - SciFi(08.07.2026 16:11)
- Пришла мне в голову дурацкая мысль, дурацкая потому, что
позитивного применения не увидел. Ig_B(267 знак., 15.06.2026 21:21, Off, полностью)
- Сцуки в Дом.ру сегодня забанили дойчландский квн по айпишнику! :-(
Он теперь даже не пингуется. Через других провайдеров работает без
проблем. - reZident(08.07.2026 17:06, Off, полностью)
- "По ночам супруга звала его спать, он отвечал «сейчас приду» уже
ближе к двум ночи." Не, не! У нас таких, в топиках "о смысле..",
"офф" - нет! Остальные - прислушайтесь! :) - Solo(1 знак., 09.07.2026 08:57, Off, ссылка, полностью)
- Ну не смог не принести в Пустыню Kpoк(1 знак., 29.06.2026 10:14, Off, картинка, полностью)
- Хочется возродить к жизни некоторое количество неисправных модулей
Овен МДВВ-Р. Может, есть у кого его схема или схема других МДВВ? - bodis(14.11.2025 09:24, SCH, полностью)
- LordN, С днем рождения! Здоровья и все наилучшие пожелания! - Visitor(06.07.2026 19:13, misc, полностью)
- Поздравляю! - De_user(08.07.2026 20:26)
- С Днем Рождения! Здоровья, успехов!!! - Sl(08.07.2026 11:06)
- С Днём Рождения! - vpv.vpv(08.07.2026 06:36)
- Поздравляю! - AlexG(07.07.2026 16:59)
- по бокалу вкусного компота, с ананасами и ежевикой, на шампаньском
вине, каждому! LordN(1 знак., 07.07.2026 14:21, картинка)
- Поздравляю! Здорового тела и бабу! А духом мы всех повалим! - Solo(07.07.2026 14:03)
- Поздравляем!! - Balda(07.07.2026 13:09)
- Ура! - SciFi(07.07.2026 13:06)
- Поздравляю! - Гyдвин(07.07.2026 13:00)
- О! Поздравляю! Всяческих благ! - bodis(07.07.2026 11:06)
- Поздравляю ! - scorpion(07.07.2026 08:48)
- Поздравляю, болеть только с похмелья!!! - il-2(07.07.2026 08:38)
- Поздравляю!! - vesago(07.07.2026 08:34)
- Поздравляю! Всех благ! - Лaгyнoв(07.07.2026 07:48)
- Поздравляю! Пусть жизнь приносит приятные сюрпризы! Cкpипaч(30 знак., 07.07.2026 06:48)
- Спасибо деды! LordN(3 знак., 07.07.2026 05:38)
- Поздравляю! - carlosh(07.07.2026 05:06)
- С днем рождения! - DVV(07.07.2026 04:32)
- Спасибо, но ещё рановато - LordN(1 знак., 06.07.2026 19:34)
- парни, подскажите, плз, где купить уже обжатый конец? LordN(2 знак., 07.07.2026 07:29, SCH, ссылка, картинка, полностью)