- 
	- Обработчик прерывания по определению не может возвращать значение. Что сделать-то хотите? - Apтём(24.12.2013 13:19)
			- софтовое прерывание может - =AlexD=(24.12.2013 13:24)
					- софтовое прерывание возвращает не на стеке, а неким хитрым образом, например в регистре или в предопределенной ячейке, "обертка" к софт. прерыванию может создать специальный фрейм и туда это значение скопировать, а аппаратное прерывание оно кагбы  ыыыыыыыыыы(51 знак., 24.12.2013 15:24,  ) )
- Оно что вызываемыя функция? Бред.Или обосновать можете? - Apтём(24.12.2013 13:25)
							- Нет, прерывание, которое вызывается специальной инструкцией. - =AlexD=(24.12.2013 13:26)
									- И что? Оно от этого приобретает какие-то магические свойства?  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)
											
 
- Нет, прерывание, которое вызывается специальной инструкцией. - =AlexD=(24.12.2013 13:26)
									
 
- софтовое прерывание возвращает не на стеке, а неким хитрым образом, например в регистре или в предопределенной ячейке, "обертка" к софт. прерыванию может создать специальный фрейм и туда это значение скопировать, а аппаратное прерывание оно кагбы  ыыыыыыыыыы(51 знак., 24.12.2013 15:24, 
 
- софтовое прерывание может - =AlexD=(24.12.2013 13:24)
					
- Если это просто и красиво, то я папа римский ;-) - SciFi(24.12.2013 10:34)
 
- Обработчик прерывания по определению не может возвращать значение. Что сделать-то хотите? - Apтём(24.12.2013 13:19)