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

 
 
 
Reply to this topicStart new topic
> Вопрос по RTOS, перезапустить задачу
ViKo
сообщение Jul 8 2014, 10:00
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Использую CMSIS-RTOS RTX от Keil. Одна задача ждет сигнала, который выдает прерывание от FPGA. Дождавшись сигнала, выполняет некую обработку и т.д, вывод в буфер индикатора. Другая задача обрабатывает панель управления, и тоже записывает в память индикатора. Еще имеется мьютекс, ограничивающий доступ к памяти индикатора, чтобы задачи выполняли свои дела целиком. До вчерашнего дня все устраивало. Но возникла необходимость в некоторых случаях не доводить первую задачу, а игнорировать ее результаты, перезапустить. Не понимаю, как это сделать. "Ператрахивать" всю структуру задач не хочу. Что делать?
Go to the top of the page
 
+Quote Post
DASM
сообщение Jul 9 2014, 11:28
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Может банальный флажок завести, надо ли той задаче выводить результаты ? Если нет - то простое continue
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 9 2014, 11:49
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(DASM @ Jul 9 2014, 14:28) *
Может банальный флажок завести, надо ли той задаче выводить результаты ? Если нет - то простое continue

Там получается так - работает первая задача, входной сигнал принимает в буфер, обрабатывает, рисует (не цифру показывает, а рисует сигнал). Это процессы длительные. И в любой момент, в середине рисования, например (да где угодно, не важно) может выскочить задача от органов управления. Что бы она ни делала, после нее первая задача доведет свое черное дело до конца (или не доведет, если флажки проверять постоянно). Приоритеты задавал разные - не помогает. Всегда рисуется сигнал от прежнего режима работы.
В-общем, буферизация (конвейер) портит жизнь.

К-сожалению, всплыли более важные дела (чисто, многозадачная работа!), пока мне не до этой темы. Если найду решение, доложу.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jul 10 2014, 06:18
Сообщение #4


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(ViKo @ Jul 9 2014, 15:49) *
В-общем, буферизация (конвейер) портит жизнь.


по идее терминэйтет поток должен быть. но как бы по отношению к захватываемым ресурсам не есть гуд.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 10 2014, 07:55
Сообщение #5


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(kolobok0 @ Jul 10 2014, 09:18) *
по идее терминэйтет поток должен быть.

Так ведь нет такой функции в ОС.
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jul 10 2014, 08:37
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



osThreadTerminate !?
По идее, надо делать как Вам уже подсказали, в задаче оцифровка-вычисление надо предусматривать флаг о перезапуске оцифровки-вычислений (break и goto start sm.gif ) , либо из задачи управления управлять задачей оцифровка-вычисление ( osThreadTerminate , osThreadCreate ) не обращая внимание где и что там вычисяется и на каком этапе.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 11 2014, 10:59
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Думал, osThreadTerminate только сама себя останавливает, ошибся. Не знаю, насколько это хорошо, удалять задачу, создавать задачу. Может, досоздаешься так, что и память ОЗУ кончится? rolleyes.gif
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jul 11 2014, 13:09
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(ViKo @ Jul 11 2014, 14:59) *
Думал, osThreadTerminate только сама себя останавливает, ошибся. Не знаю, насколько это хорошо, удалять задачу, создавать задачу. Может, досоздаешься так, что и память ОЗУ кончится? rolleyes.gif

Если такое случится то не надо использовать такую RTOS. sm.gif
Go to the top of the page
 
+Quote Post

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

 


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


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