Перейти к содержанию
    

Вопрос по RTOS

Использую CMSIS-RTOS RTX от Keil. Одна задача ждет сигнала, который выдает прерывание от FPGA. Дождавшись сигнала, выполняет некую обработку и т.д, вывод в буфер индикатора. Другая задача обрабатывает панель управления, и тоже записывает в память индикатора. Еще имеется мьютекс, ограничивающий доступ к памяти индикатора, чтобы задачи выполняли свои дела целиком. До вчерашнего дня все устраивало. Но возникла необходимость в некоторых случаях не доводить первую задачу, а игнорировать ее результаты, перезапустить. Не понимаю, как это сделать. "Ператрахивать" всю структуру задач не хочу. Что делать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может банальный флажок завести, надо ли той задаче выводить результаты ? Если нет - то простое continue

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может банальный флажок завести, надо ли той задаче выводить результаты ? Если нет - то простое continue

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

В-общем, буферизация (конвейер) портит жизнь.

 

К-сожалению, всплыли более важные дела (чисто, многозадачная работа!), пока мне не до этой темы. Если найду решение, доложу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В-общем, буферизация (конвейер) портит жизнь.

 

по идее терминэйтет поток должен быть. но как бы по отношению к захватываемым ресурсам не есть гуд.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по идее терминэйтет поток должен быть.

Так ведь нет такой функции в ОС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

osThreadTerminate !?

По идее, надо делать как Вам уже подсказали, в задаче оцифровка-вычисление надо предусматривать флаг о перезапуске оцифровки-вычислений (break и goto start :) ) , либо из задачи управления управлять задачей оцифровка-вычисление ( osThreadTerminate , osThreadCreate ) не обращая внимание где и что там вычисяется и на каком этапе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думал, osThreadTerminate только сама себя останавливает, ошибся. Не знаю, насколько это хорошо, удалять задачу, создавать задачу. Может, досоздаешься так, что и память ОЗУ кончится? :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думал, osThreadTerminate только сама себя останавливает, ошибся. Не знаю, насколько это хорошо, удалять задачу, создавать задачу. Может, досоздаешься так, что и память ОЗУ кончится? :rolleyes:

Если такое случится то не надо использовать такую RTOS. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...