Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Реализация системных вызовов (SVCcall) для Cortex M3 в IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
sysel
Здравствуйте!
Работаю над одним проектом, в котором некоторые операции решил делать через системные вызовы.
Родился код, позволяющий довольно элегантно это реализовать под IAR-ом (версия 6.30.1).

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

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

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

Проект IAR 6.30.1. Отладка на симуляторе.
Forger
Цитата(sysel @ Mar 10 2012, 15:25) *
Работаю над одним проектом, в котором некоторые операции решил делать через системные вызовы.

До кучи, вы, пожалуйста, приведите примеры, где удобно использовать такие вызовы.
_Pasha
Цитата(Forger @ Mar 10 2012, 21:12) *
До кучи, вы, пожалуйста, приведите примеры, где удобно использовать такие вызовы.

Скоро CMSIS вытащит на свет гибрид лягушки с носорогом
Как Вы думаете, чем будут реализованы системные вызовы? sm.gif
sysel
Цитата(Forger @ Mar 10 2012, 21:12) *
До кучи, вы, пожалуйста, приведите примеры, где удобно использовать такие вызовы.

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

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

Цитата(_Pasha @ Mar 10 2012, 21:26) *
Скоро CMSIS вытащит на свет гибрид лягушки с носорогом
Как Вы думаете, чем будут реализованы системные вызовы? sm.gif

Думаю что эту реализацию дадут на откуп разработчикам операционок. Хотят реализовывают через SVCall, хотят без него. Главное в CMSIS что? И пофигу на корявую реализацию, главное чтобы интерфейс соотвтетствовал.
Может я, конечно, погорячилса. Сужу по кишащим ошибками и кривизной драйверов от NXP для этого самого CMSIS.
jcxz
Цитата(sysel @ Mar 10 2012, 17:25) *
Работаю над одним проектом, в котором некоторые операции решил делать через системные вызовы.

Можете ещё до кучи реализовать некоторые операции через механизм исключений.
К примеру: пишем некое значение в некий адрес памяти физически несуществующий, получаем что там - bus error вроде? В обработчике исключения (который кста выполняется в привилегированном режиме) получаем значения целевого адреса записи и записываемого значения, которые юзаем как аргументы.
sm.gif
Так можно например представить память, висящую к примеру на SPI, как виртуальную страницу в общем адресном пространстве.
_Pasha
Цитата(jcxz @ Mar 11 2012, 19:09) *
получаем что там - bus error вроде?

Народ такие штуки не одобряет, хотя, виртуальные адреса никто не отменял. Или корректор при ошибке доступа к невыровненным данным. Вроде бы маскирует ошибку, а на деле - обеспечивает портабельность и надежность программы. За счет дополнительных тактов. Везде ли это главное? А быстрые вещи - дык их все равно под камень точат - там выравнивания уже автоматом учтены.
sysel
Цитата(jcxz @ Mar 11 2012, 20:09) *
Так можно например представить память, висящую к примеру на SPI, как виртуальную страницу в общем адресном пространстве.

Принципиально реализуемо (ради спортивного интереса или на "слабо"), а практическая выгода под сомнением.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.