Jump to content
    

Порт scmRTOS для RISC-V

Сделал для себя порт GCC-RISC-V. За основу брал порт для Cortex.
Юзаю на К1921ВГ015. В проекте всего 2 процесса, все работает как надо.
Специальных тестов для выявления всех возможных косяков не делал, нет на это времени.
Код тоже особо не причесывал.

Если кому интересно, могу выложить

Share this post


Link to post
Share on other sites

On 8/7/2025 at 3:40 PM, injen-d said:

Если кому интересно, могу выложить

К чему эти вопросы ?
Если есть желание выложить, то надо обязательно выложить.

Share this post


Link to post
Share on other sites

On 8/7/2025 at 3:57 PM, dimka76 said:

К чему эти вопросы ?
Если есть желание выложить, то надо обязательно выложить.

Вопросы к тому, что годами в этой ветке никто не пишет, возможно я последний динозавр, кто польузет scmRTOS, и то, что я сделал, нафиг никому не нужно.
scmRTOS-GCC-RISCV.zip

Share this post


Link to post
Share on other sites

On 8/7/2025 at 4:07 PM, injen-d said:

Вопросы к тому, что годами в этой ветке никто не пишет, возможно я последний динозавр, кто польузет scmRTOS, и то, что я сделал, нафиг никому не нужно.

Возможно и так.
На github последний релиз аж 2021 году вышел

Share this post


Link to post
Share on other sites

А чему там выходить -- оно в рамках своей концепции развилось до потолка. Релиз не выпускали, но в прошлом году добавился порт для GCC-Cortex-A9 (Zynq-7000) в репозиторий. А использоваться -- используется, работает вроде стабильно и предсказуемо.

Share this post


Link to post
Share on other sites

Надо бы всё же сделать релиз. Много чего накопилось уже. Ну и показать, что проект жив:)

Share this post


Link to post
Share on other sites

On 9/16/2025 at 9:15 AM, RabbitRabbit said:

"Раз пошла такая пьянка", то тоже налабал себе порты scmRTOS 5.2 под К1921ВГ015 и MIK32 Амур. Каждый с парой примеров.

Не нашел, где у вас trap_handler()? Интересно глянуть что там

Share this post


Link to post
Share on other sites

Я намеренно перенес trap_handler() в код ОС, так как это позволяет:
1. Избежать двойного сохранения контекста (trap_handler на всех один и в нем должен сохраняться контекст, а вы еще в своем обработчике софтовых прерываний еще раз его сохраняете).
2. Избежать ненужных выходов из trap_handler() (с лишним сохранением/восстановлением контекста) пока не будут обработаны все активные прерывания.
3. Избежать ненужного сохранения/восстановления callee-saved-регистров, если не произошло софтовое прерывание (которое может привести к переключению контекста). Обработчики обычных прерываний в RISC-V - это обычные функции, они сами сохраняют/восстанавливают callee-saved регистры.

Ну и еще у меня есть пара оптимизаций за счет условной компиляции:
- если использование float отключен ключами компилятора,
- если данный RISC-V поддерживает расширение ZBB (битовые операции - К1921ВГ015 поддерживает) - дает существенный выигрыш при поиске самой приоритетной задачи

Share this post


Link to post
Share on other sites

3 часа назад, injen-d сказал:

Я намеренно перенес trap_handler() в код ОС, так как это позволяет:
1. Избежать двойного сохранения контекста (trap_handler на всех один и в нем должен сохраняться контекст, а вы еще в своем обработчике софтовых прерываний еще раз его сохраняете).
2. Избежать ненужных выходов из trap_handler() (с лишним сохранением/восстановлением контекста) пока не будут обработаны все активные прерывания.
3. Избежать ненужного сохранения/восстановления callee-saved-регистров, если не произошло софтовое прерывание (которое может привести к переключению контекста). Обработчики обычных прерываний в RISC-V - это обычные функции, они сами сохраняют/восстанавливают callee-saved регистры.

Ну и еще у меня есть пара оптимизаций за счет условной компиляции:
- если использование float отключен ключами компилятора,
- если данный RISC-V поддерживает расширение ZBB (битовые операции - К1921ВГ015 поддерживает) - дает существенный выигрыш при поиске самой приоритетной задачи

Зато у меня всё прокомментировано, по-русски 🙂

Share this post


Link to post
Share on other sites

7 часов назад, injen-d сказал:

а вы еще в своем обработчике софтовых прерываний еще раз его сохраняете

Хорошее замечание, спасибо. Убрал у себя сохранение лишних регистров. Повысилась скорость переключения контекста :)

Share this post


Link to post
Share on other sites

On 9/24/2025 at 12:03 AM, RabbitRabbit said:

Зато у меня всё прокомментировано, по-русски 🙂

Пользователь не должен лазить в эти файлы, а значит наличие подробных комментариев на русском существенного значения не имеет

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...