-
- Т.е. у задачи нет статических переменных? Можно и так. Т.е. все статические данные - это некая внешнаяя структура. Задача получат указатель на нее, и дрочится с ней. Тогда вполне реально. - Evgeny_CD(30.10.2007 12:58)
- а зачем задаче статические переменные?? зачем тогда RTOS вообще? задача должна общаться с внешним миром (прерываниями, другими задачами) через сервисы RTOS. И никаких глобальных переменных. Вы же сами об этом постоянно твердите... - Gamma SPb(30.10.2007 13:06)
- Вопрос в том, что мы можем перезагрузить. Если чистую высокоуровневую логику - нивапрос. А если баг в обработчике прерывания нашелся - вот тогда его просто так не перезагрузишь. Спор, по сути дела, о глубине перезагрузки. И задачу с зависшим семафором Evgeny_CD(263 знак., 30.10.2007 13:13)
- Интересно, каково ваше решение "нивапроса"? Мне видится, что в выделенном куске ОЗУ должны храниться векторы входных и выходных данных. Такой механизм сносен для ПЛК, где задача - ввод-вывод, но вряд ли применим для систем с пакетной передачей данных. - Алексей Мусин(30.10.2007 13:26)
- Да нет, векторы могут храниться извне, в обработчиках прерываний, быть очередями сообщений ОСи и пр. Доступ к ним получаем по дескрипторам. Несколько задач могут получить один и тот же дескриптор, но не работать с ними одновременно :) - Evgeny_CD(30.10.2007 13:30)
- В общем, для этого толстые ОСи и мегабайты памяти и нужны :) Это вам не big loop патчить :) - Evgeny_CD(30.10.2007 13:32)
- Для пакетного контроллера - легко. Есть входная очередь, и выходная. Все объекты ОСи. Даем "старой" задаче сообщение - прекратить формирование новых пакетов, очистить выходную очередь. Входные копятся в буфере, но не вычитываются. Даем ей другую коману Evgeny_CD(279 знак., 30.10.2007 13:36)
- ну, правильно все. Необязательно правда выходную очередь чистить, потому как она отдельно от задачи живет, ну да ладно. state machine можно передать как аргумент функции новой задачи - задача запускается смотрит параметр Gamma SPb(96 знак., 30.10.2007 13:41)
- В общем, получается, что убиваемая задача должна иметь, как минимум, механизм управления. А это уже нетривально для простых ОСей. Сигналы нужны. - Evgeny_CD(30.10.2007 13:41)
- два проца на плате, не меньше, угу, иначе работать не будет. - Gamma SPb(30.10.2007 13:33)
- Мне неохота спорить про принципы ОСей. Книжку Таненбаума почитайте штоль. -> - Evgeny_CD(30.10.2007 13:38, ссылка)
- Для пакетного контроллера - легко. Есть входная очередь, и выходная. Все объекты ОСи. Даем "старой" задаче сообщение - прекратить формирование новых пакетов, очистить выходную очередь. Входные копятся в буфере, но не вычитываются. Даем ей другую коману Evgeny_CD(279 знак., 30.10.2007 13:36)
- В общем, для этого толстые ОСи и мегабайты памяти и нужны :) Это вам не big loop патчить :) - Evgeny_CD(30.10.2007 13:32)
- Да нет, векторы могут храниться извне, в обработчиках прерываний, быть очередями сообщений ОСи и пр. Доступ к ним получаем по дескрипторам. Несколько задач могут получить один и тот же дескриптор, но не работать с ними одновременно :) - Evgeny_CD(30.10.2007 13:30)
- ну понятно, что посередине выполнения задачу корректно оборвать не получится. Александр этого и не хотел, как я понял, он хотел загрузить новую задачу и запустить ее только после того, как старая дойдет до Gamma SPb(384 знак., 30.10.2007 13:25)
- Интересно, каково ваше решение "нивапроса"? Мне видится, что в выделенном куске ОЗУ должны храниться векторы входных и выходных данных. Такой механизм сносен для ПЛК, где задача - ввод-вывод, но вряд ли применим для систем с пакетной передачей данных. - Алексей Мусин(30.10.2007 13:26)
- Вопрос в том, что мы можем перезагрузить. Если чистую высокоуровневую логику - нивапрос. А если баг в обработчике прерывания нашелся - вот тогда его просто так не перезагрузишь. Спор, по сути дела, о глубине перезагрузки. И задачу с зависшим семафором Evgeny_CD(263 знак., 30.10.2007 13:13)
- Но как ни крути, распределение памяти надо тщательно продумывать на уровне системного проекта. Т.е. есть два стека - основной и запасной для переменной задачи. И есть два куска программной памяти - основной и запасной. Иначе будет взрослый менеджер Evgeny_CD(7 знак., 30.10.2007 13:01)
- Да, я уже понял легкий маразм получается. AlexandrY(376 знак., 30.10.2007 13:10)
- +1 - Evgeny_CD(30.10.2007 13:14)
- да не надо там никакое распределение памяти придумывать. Просто отдельная задачка - менеджер, которая запускает/убивает то что нужно - Gamma SPb(30.10.2007 13:08)
- Ну и еще надо придумать, как бороться с ошибками. Типа выгружаем мы задачу - а она не "отпустила" объекты ядра - семафоры и пр. Можно на них забить, но память кончится. В общем, закат солнца вручную получается. Unix изобретаем. - Evgeny_CD(30.10.2007 13:03)
- опять не понял. Куда она кончится, память-то? объекты не должны принадлежать одной задаче, какой тогда в них смысл? - Gamma SPb(30.10.2007 13:10)
- Да, я уже понял легкий маразм получается. AlexandrY(376 знак., 30.10.2007 13:10)
- а зачем задаче статические переменные?? зачем тогда RTOS вообще? задача должна общаться с внешним миром (прерываниями, другими задачами) через сервисы RTOS. И никаких глобальных переменных. Вы же сами об этом постоянно твердите... - Gamma SPb(30.10.2007 13:06)
- Т.е. у задачи нет статических переменных? Можно и так. Т.е. все статические данные - это некая внешнаяя структура. Задача получат указатель на нее, и дрочится с ней. Тогда вполне реально. - Evgeny_CD(30.10.2007 12:58)