yes 5 15 февраля, 2010 Опубликовано 15 февраля, 2010 · Жалоба есть система, в которой реалтаймовая часть (прерывания, флаги/семафоры и т.п.) взаимодействует с некими вычислительными задачами, которые являются вычислениями и время завершения цикла неопределено и большое (ну и код соответственно большой/ветвистый и вставить в него ожидание каких-то событий типа OSSemPend трудно) таких задач несколько, ну и также хочется, чтобы статистическая задача работала кажется, что это можно сделать так : в uCOS эти вычислительные задачи получают приоритеты ниже самой низкоприоритетной реал-таймовой задачи, в задачу с высоким (наверно самым высоким) uCOS приоритетом вставляется "шедулер" высокоприоритетная задача (uCOS priopity=1) срабатывает по периодическому таймеру, в этой задаче суспендятся эти три вычислительные задачи и инкрементируется счетчик каждое второе срабатывание запускается более приоритетная задача, каждое четвертое со средним приоритетом ну и каждое 8 - с низким при этом приоритеты означают не приоритеты uCOS, а количество времени, которое процессор тратит на задачу (возможно равномерное распределение - каждый тик одна задачка суспендится, одна запускается, но это не нужно) остальное время выделено на статистическую+IDLE ничего я тут не перемудрил? будет это работать (предполагается использовать OSTaskSuspend(), OSTaskResume())? может такая фигня есть уже в uCOS? (давно не имел дело с uCOS) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 15 февраля, 2010 Опубликовано 15 февраля, 2010 · Жалоба В uC/OS-II тайм-слайсинга и карусели нет. Предложенное работать должно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 15 февраля, 2010 Опубликовано 15 февраля, 2010 · Жалоба В uC/OS-II тайм-слайсинга и карусели нет. Предложенное работать должно. да, работает, только с таймерами какая-то фигня (то ли я доки не понял, то ли еще что-то) тикать надо вручную посредством OSTmrSignal(), из этого OSTmrSignal семафор и специальная задача (Task) его ждет в Альтеровской реализации при разрешении таймеров занимается задача с максимальным приоритетом и т.п. мне проще сделать таймер в железе (Альтера, NIOS) и к нему этот шедулер прицепить, вроде и код прямее, и "оверхед" меньше, ну или вешать на hook системного таймера Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 15 февраля, 2010 Опубликовано 15 февраля, 2010 · Жалоба мне проще сделать таймер в железе (Альтера, NIOS) и к нему этот шедулер прицепить, вроде и код прямее, и "оверхед" меньше, ну или вешать на hook системного таймера Так ведь предполагается, что OSTmrSignal() вызывается из OSTimeTickHook(). Пример есть в описании OSTmrSignal() в Reference Manual. Так как задачи явно будут нечасто переключаться, то делать прерывания с высокой частотой не нужно. И зачем лишний обработчик? По моему, лучше оставить так, как есть. А задача, управляющая таймерами - это ведь хорошо, так как расчет и отслеживание таймеров вынесено с уровня ISR. Кстати, чтобы не плодить лишние задачи, почему не модифицировать OSTmrTask() для Вашей задачи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 16 февраля, 2010 Опубликовано 16 февраля, 2010 · Жалоба да, понятно, спасибо. да, понятно, спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться