kan35 7 29 ноября, 2012 Опубликовано 29 ноября, 2012 · Жалоба Системный таймер это как бы понятно. Я использую STM32, там дополнительно еще 2 ISR для FreeRTOS: xPortPendSVHandler: vPortSVCHandler: В них вроде бы переключение контекста. Зачем прерываниями это сделано? Почему 2? Прошу пояснить доходчиво... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 29 ноября, 2012 Опубликовано 29 ноября, 2012 · Жалоба Я использую STM32, там дополнительно еще 2 ISR для FreeRTOS: xPortPendSVHandler: vPortSVCHandler: В них вроде бы переключение контекста. Переключение контекста в PendSVHandler. SVCHandler - вызывается командой svc - Supervisor Call. Зачем прерываниями это сделано Какие ещё варианты реализации переключения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 30 ноября, 2012 Опубликовано 30 ноября, 2012 · Жалоба У меня был опыт использования embos на avr - контекст там переключался по системному таймеру.. Хорошо, пусть контекст переключается в PendSVHandler, а системный таймер взводит это прерывание, так? а зачем еще SVHandler и что он все таки делает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 30 ноября, 2012 Опубликовано 30 ноября, 2012 · Жалоба У меня был опыт использования embos на avr - контекст там переключался по системному таймеру.. То есть в прерывании. Хорошо, пусть контекст переключается в PendSVHandler, а системный таймер взводит это прерывание, так? В частности может и таймер. Задачи также могут его вызать при переходе в неактивное состояние. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 30 ноября, 2012 Опубликовано 30 ноября, 2012 · Жалоба а зачем еще SVHandler и что он все таки делает? Чтобы вручную досрочно вызывать планировщик из задачи Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 30 ноября, 2012 Опубликовано 30 ноября, 2012 · Жалоба Чтобы вручную досрочно вызывать планировщик из задачи Почему задача не может сама вызвать планировщик? Если ей уже делать нечего? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LightElf 0 19 декабря, 2012 Опубликовано 19 декабря, 2012 · Жалоба xPortPendSVHandler: vPortSVCHandler: vPortSVCHandler используется один раз - для запуска самой первой задачи. На кортексе для прерываний используется отдельный стек. Вот для того, чтобы на него переключиться и используется инструкция SVC. xPortPendSVHandler используется для переключения задач во всех остальных случаях. Потому что: 1) этому прерыванию можно назначить самый низкий приоритет - переключение задач не вызовет блокировку обработки важных событий 2) это прерывание асинхронно - можно взвести битик, доделать текущие дела, обработать более приоритетные прерывания и т.д. Не нужно где-то запоминать флажок "надо переключить задачу", выполнять какие-то вызовы, учитывать что требование переключить задачу может проистекать из нескольких источников и т.д. 3) это прерывание можно вызвать программно откуда угодно (из задачи или из обработчика другого прерывания) - переключение контекста в одном месте кода ОС, меньше глюков, проще отладка. 4) это прерывание имеется на любом Кортексе-М - не нужно писать вариации под каждый новый камень Почему задача не может сама вызвать планировщик? Если ей уже делать нечего? Чтобы не делать несколько разных точек входа в планировщик (одна для входа из задачи, другая для входа из прерывания, третья из таймера systick). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба Почитайте книжку "THE DEFINITIVE GUIDE TO THE ARM CORTEX-M3 SECOND EDITION" (Joseph Yiu) чтобы понять как вообще ядро работает, какие аппаратные "фичи" заложила компания ARM в ядро, чтобы облегчить работу многопоточных приложений под управлением малениких RTOS (и FreeRTOS в том числе). Там написано, что прерывание PendSV задумывалось как прерывание для переключения контекста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться