реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Реализация системных вызовов (SVCcall) для Cortex M3 в IAR, хочу поделиться
sysel
сообщение Mar 10 2012, 11:25
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Здравствуйте!
Работаю над одним проектом, в котором некоторые операции решил делать через системные вызовы.
Родился код, позволяющий довольно элегантно это реализовать под IAR-ом (версия 6.30.1).

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

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

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

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

Прикрепленные файлы
Прикрепленный файл  tst01.zip ( 13.74 килобайт ) Кол-во скачиваний: 51
 
Go to the top of the page
 
+Quote Post
Forger
сообщение Mar 10 2012, 17:12
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



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

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


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 10 2012, 17:26
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



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

Скоро CMSIS вытащит на свет гибрид лягушки с носорогом
Как Вы думаете, чем будут реализованы системные вызовы? sm.gif
Go to the top of the page
 
+Quote Post
sysel
сообщение Mar 10 2012, 20:58
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



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

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

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

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

Думаю что эту реализацию дадут на откуп разработчикам операционок. Хотят реализовывают через SVCall, хотят без него. Главное в CMSIS что? И пофигу на корявую реализацию, главное чтобы интерфейс соотвтетствовал.
Может я, конечно, погорячилса. Сужу по кишащим ошибками и кривизной драйверов от NXP для этого самого CMSIS.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 11 2012, 16:09
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



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

Можете ещё до кучи реализовать некоторые операции через механизм исключений.
К примеру: пишем некое значение в некий адрес памяти физически несуществующий, получаем что там - bus error вроде? В обработчике исключения (который кста выполняется в привилегированном режиме) получаем значения целевого адреса записи и записываемого значения, которые юзаем как аргументы.
sm.gif
Так можно например представить память, висящую к примеру на SPI, как виртуальную страницу в общем адресном пространстве.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 11 2012, 17:25
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(jcxz @ Mar 11 2012, 19:09) *
получаем что там - bus error вроде?

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

Сообщение отредактировал _Pasha - Mar 11 2012, 17:26
Go to the top of the page
 
+Quote Post
sysel
сообщение Mar 11 2012, 17:37
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(jcxz @ Mar 11 2012, 20:09) *
Так можно например представить память, висящую к примеру на SPI, как виртуальную страницу в общем адресном пространстве.

Принципиально реализуемо (ради спортивного интереса или на "слабо"), а практическая выгода под сомнением.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 01:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016