-
- И что? Оно от этого приобретает какие-то магические свойства? Apтём(141 знак., 24.12.2013 13:47 - 13:54)
- Да, оно магическим образом позволяет из юзерспейс перейти в кернелспейс с передачей аргументов и возвратом результата. Собственно другого способа и нет. Этим все оси пользуются, с защитой памяти которые. - =AlexD=(24.12.2013 14:44)
- Если говорить о Cortex-M (к примеру), то любое прерывание может перевести в режим кернел (handler mode). Как вызвать прерывание вопрос отдельный - svc или ещё как - неважно. - Apтём(24.12.2013 16:01)
- SVC (и только он) является единственной возможностью вызывать сервисы RTOS из пользовательского режима при работающем MPU, т.к. из пользовательского режима нельзя, например, запретить прерывания. - VVB(24.12.2013 16:23)
- Это смотря какая Ось используется - совсем необязательно ведь thread mode использовать (для Cortex-M в частности). Linux - дело другое...Да и MPU может быть по-разному настроен... - Apтём(24.12.2013 16:39)
- и-и-и...? вопрос в чём? или всё, вопросов больше нет? - =AlexD=(24.12.2013 19:11)
- Вопрос исчерпан...все свободны... - Apтём(24.12.2013 19:23)
- и-и-и...? вопрос в чём? или всё, вопросов больше нет? - =AlexD=(24.12.2013 19:11)
- Это смотря какая Ось используется - совсем необязательно ведь thread mode использовать (для Cortex-M в частности). Linux - дело другое...Да и MPU может быть по-разному настроен... - Apтём(24.12.2013 16:39)
- SVC (и только он) является единственной возможностью вызывать сервисы RTOS из пользовательского режима при работающем MPU, т.к. из пользовательского режима нельзя, например, запретить прерывания. - VVB(24.12.2013 16:23)
- Если говорить о Cortex-M (к примеру), то любое прерывание может перевести в режим кернел (handler mode). Как вызвать прерывание вопрос отдельный - svc или ещё как - неважно. - Apтём(24.12.2013 16:01)
- Да, магические свойства. А именно: инструкция, следующая за SVC, выполняется после того, как сработал обработчик SVC. А тот может пошаманить в стеке, и после SVC регистр R0 будет содеражать возвращаемое значение. Если же обработчик обычного SciFi(77 знак., 24.12.2013 13:58)
- Смотря что нашаманит...PendSV тоже со стеком работает... - Apтём(24.12.2013 16:03)
- Из юзермода нельзя вызвать PendSV. - LightElf(24.12.2013 16:31)
- Смотря что нашаманит...PendSV тоже со стеком работает... - Apтём(24.12.2013 16:03)
- Артем, вы когда-нибудь пользовались в DOS функциями Int21h? - LightElf(24.12.2013 13:59)
- Нет не пользовался. И что? Это вызов прерывания? - Apтём(24.12.2013 14:26)
- Да, софтверный. С передачей параметров и возвратом результата. Стандартная фишка. В Линуксе (и в винде вроде) на x86 используется int80h для вызова функций ядра из пользовательского приложения, ессно с передачей параметров и возвратом результата. - LightElf(24.12.2013 14:33)
- Только причём здесь возвращение результата? В линуксе и в винде вызываются функции ядра, например open(). Вот они и возвращают результат. А внутри функции аргументы раскладываются в нужные регистры, вызывается прерывание, регистры раскладываются fk0(313 знак., 24.12.2013 14:44 - 14:52)
- INT31. Эк досом по мозгам ударило-то. До сих пор остатки DPMI и его QEMM в памяти. Помнится в компе SIMM битый стоял. Написал программку выделяющую битый кусок через XMS. И винда (98) после загрузки этот кусок не трогала. - fk0(24.12.2013 15:02)
- вот это - раскладывание по регистам и дёргание INT31 - и есть передача и возврат аргументов в/из прерывание(я). - =AlexD=(24.12.2013 14:47)
- Ну так я о том, что нужно написать тогда функцию обёртку на каждый случай. А не пытаться непонятно как сразу вызвать SWI и потом из обработчика SWI пытаться вернуть результат. И в обёртке ограничиться передачей только в регистрах (включая fk0(188 знак., 24.12.2013 14:57)
- В IAR есть спецуевые прагмы и слово __swi - LightElf(24.12.2013 15:06)
- Вывод: GCC говно и паделка студентов, будущее за IAR. - fk0(24.12.2013 15:12)
- В IAR есть спецуевые прагмы и слово __swi - LightElf(24.12.2013 15:06)
- Ну так я о том, что нужно написать тогда функцию обёртку на каждый случай. А не пытаться непонятно как сразу вызвать SWI и потом из обработчика SWI пытаться вернуть результат. И в обёртке ограничиться передачей только в регистрах (включая fk0(188 знак., 24.12.2013 14:57)
- Только причём здесь возвращение результата? В линуксе и в винде вызываются функции ядра, например open(). Вот они и возвращают результат. А внутри функции аргументы раскладываются в нужные регистры, вызывается прерывание, регистры раскладываются fk0(313 знак., 24.12.2013 14:44 - 14:52)
- Да, софтверный. С передачей параметров и возвратом результата. Стандартная фишка. В Линуксе (и в винде вроде) на x86 используется int80h для вызова функций ядра из пользовательского приложения, ессно с передачей параметров и возвратом результата. - LightElf(24.12.2013 14:33)
- Нет не пользовался. И что? Это вызов прерывания? - Apтём(24.12.2013 14:26)
- Да, оно магическим образом позволяет из юзерспейс перейти в кернелспейс с передачей аргументов и возвратом результата. Собственно другого способа и нет. Этим все оси пользуются, с защитой памяти которые. - =AlexD=(24.12.2013 14:44)
- И что? Оно от этого приобретает какие-то магические свойства? Apтём(141 знак., 24.12.2013 13:47 - 13:54)