Перейти к содержанию
    

Реализация системных вызовов (SVCcall) для Cortex M3 в IAR

Здравствуйте!

Работаю над одним проектом, в котором некоторые операции решил делать через системные вызовы.

Родился код, позволяющий довольно элегантно это реализовать под IAR-ом (версия 6.30.1).

 

Добился того, что при написании программы системный вызов (с параметрами и возвращаемым значением) ни чем не отличается от вызова обычной функции.

 

Сейчас без ухищрений в вызов можно передать до четырёх 32-битных параметров.

 

Знатоков архитектуры Cortex M3 прошу покритиковать.

 

Проект IAR 6.30.1. Отладка на симуляторе.

tst01.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работаю над одним проектом, в котором некоторые операции решил делать через системные вызовы.

До кучи, вы, пожалуйста, приведите примеры, где удобно использовать такие вызовы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

До кучи, вы, пожалуйста, приведите примеры, где удобно использовать такие вызовы.

Скоро CMSIS вытащит на свет гибрид лягушки с носорогом

Как Вы думаете, чем будут реализованы системные вызовы? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

До кучи, вы, пожалуйста, приведите примеры, где удобно использовать такие вызовы.

Например: делим код и память на пользовательскую (реализация логики работы программы) и на системную (операционная система, функции работы с периферией). Разграничиваем стеки (PSP и MSP), разграничиваем доступ к памяти (с помощью MPU). Системный код выполняется в привилегированном режиме, логика программы - в непривилегированном.

С помощью SVCall из юзеркода можно организовать вызов функций системного кода: функции ОС, работа с периферией и т.д.

 

Если же Вы не задействуете MPU и программа работает только в привилегированном режиме, то да - механизм системных вызовов бесполезен.

 

Скоро CMSIS вытащит на свет гибрид лягушки с носорогом

Как Вы думаете, чем будут реализованы системные вызовы? :)

Думаю что эту реализацию дадут на откуп разработчикам операционок. Хотят реализовывают через SVCall, хотят без него. Главное в CMSIS что? И пофигу на корявую реализацию, главное чтобы интерфейс соотвтетствовал.

Может я, конечно, погорячилса. Сужу по кишащим ошибками и кривизной драйверов от NXP для этого самого CMSIS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работаю над одним проектом, в котором некоторые операции решил делать через системные вызовы.

Можете ещё до кучи реализовать некоторые операции через механизм исключений.

К примеру: пишем некое значение в некий адрес памяти физически несуществующий, получаем что там - bus error вроде? В обработчике исключения (который кста выполняется в привилегированном режиме) получаем значения целевого адреса записи и записываемого значения, которые юзаем как аргументы.

:)

Так можно например представить память, висящую к примеру на SPI, как виртуальную страницу в общем адресном пространстве.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

получаем что там - bus error вроде?

Народ такие штуки не одобряет, хотя, виртуальные адреса никто не отменял. Или корректор при ошибке доступа к невыровненным данным. Вроде бы маскирует ошибку, а на деле - обеспечивает портабельность и надежность программы. За счет дополнительных тактов. Везде ли это главное? А быстрые вещи - дык их все равно под камень точат - там выравнивания уже автоматом учтены.

Изменено пользователем _Pasha

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так можно например представить память, висящую к примеру на SPI, как виртуальную страницу в общем адресном пространстве.

Принципиально реализуемо (ради спортивного интереса или на "слабо"), а практическая выгода под сомнением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...