реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> timeslicing в uCOS то есть внешнее управление не реалтаймовыми задачами, как сделать? может уже что-то есть такое готовое?
yes
сообщение Feb 15 2010, 13:00
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



есть система, в которой реалтаймовая часть (прерывания, флаги/семафоры и т.п.) взаимодействует с некими вычислительными задачами, которые являются вычислениями и время завершения цикла неопределено и большое (ну и код соответственно большой/ветвистый и вставить в него ожидание каких-то событий типа OSSemPend трудно)

таких задач несколько, ну и также хочется, чтобы статистическая задача работала

кажется, что это можно сделать так :
в uCOS эти вычислительные задачи получают приоритеты ниже самой низкоприоритетной реал-таймовой задачи,
в задачу с высоким (наверно самым высоким) uCOS приоритетом вставляется "шедулер"
высокоприоритетная задача (uCOS priopity=1) срабатывает по периодическому таймеру,
в этой задаче суспендятся эти три вычислительные задачи и инкрементируется счетчик
каждое второе срабатывание запускается более приоритетная задача,
каждое четвертое со средним приоритетом
ну и каждое 8 - с низким
при этом приоритеты означают не приоритеты uCOS, а количество времени, которое процессор тратит на задачу
(возможно равномерное распределение - каждый тик одна задачка суспендится, одна запускается, но это не нужно)
остальное время выделено на статистическую+IDLE

ничего я тут не перемудрил?
будет это работать (предполагается использовать OSTaskSuspend(), OSTaskResume())?

может такая фигня есть уже в uCOS? (давно не имел дело с uCOS)
Go to the top of the page
 
+Quote Post
Sergey'F
сообщение Feb 15 2010, 13:24
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660



В uC/OS-II тайм-слайсинга и карусели нет. Предложенное работать должно.
Go to the top of the page
 
+Quote Post
yes
сообщение Feb 15 2010, 17:11
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(Sergey'F @ Feb 15 2010, 16:24) *
В uC/OS-II тайм-слайсинга и карусели нет. Предложенное работать должно.


да, работает, только с таймерами какая-то фигня (то ли я доки не понял, то ли еще что-то)
тикать надо вручную посредством OSTmrSignal(), из этого OSTmrSignal семафор и специальная задача (Task) его ждет
в Альтеровской реализации при разрешении таймеров занимается задача с максимальным приоритетом
и т.п.

мне проще сделать таймер в железе (Альтера, NIOS) и к нему этот шедулер прицепить, вроде и код прямее, и "оверхед" меньше,
ну или вешать на hook системного таймера
Go to the top of the page
 
+Quote Post
Sergey'F
сообщение Feb 15 2010, 19:08
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660



Цитата(yes @ Feb 15 2010, 20:11) *
мне проще сделать таймер в железе (Альтера, NIOS) и к нему этот шедулер прицепить, вроде и код прямее, и "оверхед" меньше,
ну или вешать на hook системного таймера

Так ведь предполагается, что OSTmrSignal() вызывается из OSTimeTickHook(). Пример есть в описании OSTmrSignal() в Reference Manual. Так как задачи явно будут нечасто переключаться, то делать прерывания с высокой частотой не нужно. И зачем лишний обработчик? По моему, лучше оставить так, как есть.

А задача, управляющая таймерами - это ведь хорошо, так как расчет и отслеживание таймеров вынесено с уровня ISR. Кстати, чтобы не плодить лишние задачи, почему не модифицировать OSTmrTask() для Вашей задачи?
Go to the top of the page
 
+Quote Post
yes
сообщение Feb 16 2010, 12:48
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



да, понятно, спасибо.



да, понятно, спасибо.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th August 2025 - 08:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016