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

 
 
> Процесс, ограниченный по времени, помогите советом
_Pasha
сообщение May 24 2008, 05:17
Сообщение #1


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Доброго времени!
Требуется соорудить такую конструкцию:
предположим, у нас выполняется некий процесс. Считаем что-то, короче.
По наступлению прерывания от таймера необходимо из этого процесса выйти, да так, чтобы запомнить его состояние и впоследствии вернуться и продолжить его выполнение.
На ассемблере это делается элементарно.
Проблема в реализации этой конструкции на C - мешает нереентерабельность функций, огромные сохраняемые контексты.
Пока что представляю, как это сделать в рамках main() - с помощью setjump() и такой-то матери.smile.gif
Как это сделать в любой другой функции - как эти функции заточить по правильному - не имею понятия.
В идеале хочу выйти на что-то типа
Код
TIME_LIMITED_BLOCK(T_100us)
{/*code*/
}


взяв за основу for() как ATOMIC_BLOCK в WINAVR.

В общем,если есть какие-то советы, милости просим.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Леонид Иванович
сообщение May 24 2008, 20:58
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 318
Регистрация: 21-07-06
Из: Минск
Пользователь №: 18 986



Поскольку все процессы для системы на МК пишутся специально под задачу, вместо вытесняющей многозадачности возможно применение кооперативной многозадачности. Минимальный объем сохраняемого контекса, да и вообще, минимальные накладные расходы.

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


--------------------
Go to the top of the page
 
+Quote Post



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

 


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


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