Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по RTOS
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > Keil
ViKo
Использую CMSIS-RTOS RTX от Keil. Одна задача ждет сигнала, который выдает прерывание от FPGA. Дождавшись сигнала, выполняет некую обработку и т.д, вывод в буфер индикатора. Другая задача обрабатывает панель управления, и тоже записывает в память индикатора. Еще имеется мьютекс, ограничивающий доступ к памяти индикатора, чтобы задачи выполняли свои дела целиком. До вчерашнего дня все устраивало. Но возникла необходимость в некоторых случаях не доводить первую задачу, а игнорировать ее результаты, перезапустить. Не понимаю, как это сделать. "Ператрахивать" всю структуру задач не хочу. Что делать?
DASM
Может банальный флажок завести, надо ли той задаче выводить результаты ? Если нет - то простое continue
ViKo
Цитата(DASM @ Jul 9 2014, 14:28) *
Может банальный флажок завести, надо ли той задаче выводить результаты ? Если нет - то простое continue

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

К-сожалению, всплыли более важные дела (чисто, многозадачная работа!), пока мне не до этой темы. Если найду решение, доложу.
kolobok0
Цитата(ViKo @ Jul 9 2014, 15:49) *
В-общем, буферизация (конвейер) портит жизнь.


по идее терминэйтет поток должен быть. но как бы по отношению к захватываемым ресурсам не есть гуд.
ViKo
Цитата(kolobok0 @ Jul 10 2014, 09:18) *
по идее терминэйтет поток должен быть.

Так ведь нет такой функции в ОС.
Lagman
osThreadTerminate !?
По идее, надо делать как Вам уже подсказали, в задаче оцифровка-вычисление надо предусматривать флаг о перезапуске оцифровки-вычислений (break и goto start sm.gif ) , либо из задачи управления управлять задачей оцифровка-вычисление ( osThreadTerminate , osThreadCreate ) не обращая внимание где и что там вычисяется и на каком этапе.
ViKo
Думал, osThreadTerminate только сама себя останавливает, ошибся. Не знаю, насколько это хорошо, удалять задачу, создавать задачу. Может, досоздаешься так, что и память ОЗУ кончится? rolleyes.gif
Lagman
Цитата(ViKo @ Jul 11 2014, 14:59) *
Думал, osThreadTerminate только сама себя останавливает, ошибся. Не знаю, насколько это хорошо, удалять задачу, создавать задачу. Может, досоздаешься так, что и память ОЗУ кончится? rolleyes.gif

Если такое случится то не надо использовать такую RTOS. sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.