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

Как В C Сделать Одновременное Выполнение Нескольких Задач


flowerASS

Рекомендуемые сообщения

Доброе время суток.

Подскажите пожалуйста новичку, как осуществить одновременное выполнение нескольких задач(потоков).

Пример: при подачи питания на МК вывод PA1 начинает постоянно мигать с интервалом 1секунда предположим(индикатор работы). При появление напряжения на входе PB1 на выход PA2 подается напряжение на 5 секунд. А при нажатие на PB2 подается напряжение на PA3 на 2 секунды. В моем (явно неправильном варианте :rolleyes: ) я использовал несколько процедур и _delayms(); в итоге, пока не завершится 1 цикл , программа не переходит в следующему и так далее.

Заранее Спасибо за помощь!

P.S. пишу в AtmelStudio под C.

Изменено пользователем flowerASS
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Для AVRStudio 4

Исходник+hex.rar

Изменено пользователем Rhime

- А совесть в курсе? - А совесть в доле! :-D

Эксперт — это человек, который совершил все возможные ошибки в некотором узком поле.

Все грамматические ошибки являются авторским стилем изложения материала.

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

Ваша задача решается легко без потоков. Да и покажите хоть один код для аврки с потоками :blink:

П.С. Программирование на Си под Винду или Линукс всё таки имеет отличия от программирования под слабенький МК.

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

С точки зрения МК одновременное выполнение нескольких потоков-это последовательное выполнение операций за четко определенный промежуток времени. Не будем вдаваться в глубь вопроса, но это получается некая операционная система где управление процессами передается ядру это самой системы. Для очень серьезных задач такое решение имеет место, а для повседневных - это бессмысленная затрата ресурсов. Учитесь пользоваться таймерами это самый оптимальный вариант для "распаралеливания" задач.

- А совесть в курсе? - А совесть в доле! :-D

Эксперт — это человек, который совершил все возможные ошибки в некотором узком поле.

Все грамматические ошибки являются авторским стилем изложения материала.

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

Благодарю за ответ, я не спорю, что в данной задаче многопоточность не нужна, просто на ее примере хотел просмотреть способ реализации.

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

Могу предложить свой вариант, он довольно простой, наверняка не оптимальный но все же.

Суть такова: по прерыванию таймера в стек сохраняются все регистры и SREG. Далее идет переход на следующий процесс - запись нового значения в SPL-SPH и возврат из прерывания. Поскольку наверху стека оказался сохраненный в прошлый раз адрес возврата, возврат автоматически идет куда нужно. Над ним правда лежат регистры но они извлекаются по своим местам. В той же области памяти хранится флаг занята она процессом или еще нет (вроде бы если значения для стека равны 0, пустая, переход на следующий процесс, но уже не уверен). Таким образом в памяти всегда висит набор процессов по 64 байта (могу ошибаться).

Достоинства: простота и очевидность, сравнительно высокая скорость, возможность запустить или удалить один процесс несколько раз динамически.

Недостатки: ограниченный и фиксированный объем, много времени уходит на загрузку-сохранение регистров откуда суммарно редкое переключение, практическое применение или хотя бы демонстрационный пример придумать так и не удалось :ph34r: , трудности в практической реализации (создание и удаление процессов), использование как минимум одного таймера. И специфичное для контроллера - все процессы хранятся в ПЗУ, то есть динамически изменять их крайне сложно а учитывая доступный размер ОЗУ не факт что вообще возможно.

+/- : Для скорости и полного контроля (те же регистры и стек) написано на Ассемблере из чего следует огромный размер исходников для процессов.

Вопрос по теме: как лучше организовать доступ к переферии - портам ввода-вывода, UART'у и прочим, чтобы процессы друг другу не мешали? Как продемонстрировать многозадачность на простейшем примере, кнопках и светодиодах чтобы однозначно отличить от однозадачной программы?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Благодарю за ответ, я не спорю, что в данной задаче многопоточность не нужна, просто на ее примере хотел просмотреть способ реализации.

Тогда вам к RTOS. Например OSA

В поисках работы..

Looking for job

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

COKPOWEHEU

Я, если честно , пока плохо понимаю все вышеизложенное Вами. Но надеюсь разобрать все по полочкам. А пример: наверно поставить постоянное мигание 1ого диода с интервалами 5 секунд на включение и на выключение, и включение на 20 секунд 2 ого диода при нажатие на кнопку.

fuckir

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

Спасибо всем за инфу! роюсь в гугле=)

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

наверно поставить постоянное мигание 1ого диода с интервалами 5 секунд на включение и на выключение, и включение на 20 секунд 2 ого диода при нажатие на кнопку
К сожалению, о точном выдерживании временных интервалов речи не идет, поскольку процессы переключаются по таймеру. А поскольку переключение долгое (одних регистров сохранять 33 штуки да потом загружать столько же), каждому выделяется довольно много времени. Насчет синхронизации я думаю можно использовать часы либо на том же таймере либо на другом, чтобы по их значению каждый процесс ориентировался. Но точность, понятно, невелика.
RTOS
Скорее где требуется быстрая и предсказуемая реакция на внешние события.

С использованием ОС-то как отдельной программы всегда будет требоваться больше ресурсов чем без нее.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Ну вот, пока готовил эскиз, на все вопросы ответили :-) Действительно, в 3D моделях DipTrace нет (или не нашёл) модели корпуса ТО220 с распайкой с нижней стороны и креплением к радиатору - по этому и получился такой 3D-портрет платы. Задуманная конструкция выглядит примерно так:  По факту, для наладки, сейчас подключаю транзисторы, закрепленные на радиаторе, проводами.
    • Чтобы потом не допиливать паровоз до истребителя. Заводские варианты схемотехники куда более предсказуемы. Из "вольностей" в первую очередь как-то решать проблему коммутации, подходящий переключатель для режимов искать история долгая и грустная. Что-то там с реле. На диапазоны 6п4н вроде же ?  пг2 хрен найдёшь, п2г тугое неудобство(  Рассыпушный ацп делать, боже упаси. Ну разве что был грешен, побаловался когда-то пнч-ацп. С 1108пп1 и 155 серией
    • Но зачем повторять 1в1? Там дана просто топология   Но не совсем же с нуля. Маловероятно, что вы найдете расширение диапазона 7135 до 200мВ по тому же методу, что это реализовано в В7-38, тем не менее, это вполне реализуемо. А вот до 20мВ я спустить диапазон не смог Что-то предусилитель интегратора отказывается вести себя хорошо   Для сравнения, та же точка (вход интегратора) при 200мв пределе, усиление х10   Ну и 2В Госпаде боже лтц2400, на этой штуке можно и 6 разрядник собрать, лютый АЦП, какие 4.5 разряда Цена на него сейчас конечно негуманная кстати.
    • Что то не нашёл примеров такой реализации замены. С нуля целесообразность подобного действа под вопросом. Тут мои полномочия всё) Как бы почему смотрю на hm8011-3, возможность реализации +/- норм настольного мультиметра без всякой там жести в виде кодинга и микро-мелких современных элементов. Для калибровки валяется где-то в1-12 и прецизионных резисторов если моих не хватит, есть где заказать.  На данный момент разве что качественного файла нет, пытался там всякими улучшайками чего сделать, увы. Пойду через впн лазить по уголочкам всяким, вдруг всплывёт чего. ------------- 8012, 80c32 + 27c512. Чертежи плат есть, осталось hex раздобыть 
    • Вот на этом фото? Я думал  тут радиатор будет под ними, и они к нему "пузом" будут прикручиваться, а дырочки - для отвёртки. У @asng60 транзисторы в наружную сторону "мордой" смотрят. "Пузом" на плату ложатся. Плата так разведена. Вот и непонятно, как их "пузом" к радиатору прикручивать.
    • Что касаемо модели Парафина, я бы порекомендовал товарищу Джексону проверить ток покоя выходного каскада, это первым делом, и вторым делом- проверить модель ОУ. Ибо в ОМ нет никаких оу а в парафине- есть. 
×
×
  • Создать...