Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
“Рецепт Счастья” — увлекательная игра в жанре «соедини предметы»! Помогите Эмили раскрыть тайны пропавшего родственника, найти сокровища и восстановить её любимое кафе.

Рецепт Счастья

Казуальные, Головоломки, Новеллы

Играть

Топ прошлой недели

  • Rahlkan Rahlkan 1 пост
  • Tannhauser9 Tannhauser9 4 поста
  • alex.carrier alex.carrier 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
21
limpopoEmil
limpopoEmil
6 лет назад

Наш верный друг⁠⁠

Наш верный друг Диспетчер задач, Не отвечает, Спасти рядового Райана, Гифка

Думаю перевод не нужен

Диспетчер задач Не отвечает Спасти рядового Райана Гифка
4
XanderEVG
XanderEVG
6 лет назад
Arduino & Pi

Таймерная служба и диспетчер для ардуино от DiHalt⁠⁠

Пост по мотивам  дверного звонка.

Можно сказать логическое его продолжение. Совместим приятное с полезным и заодно рассмотрим таймерную службу и диспетчер задач от DiHalt. Мне показалось эта система довольно удобна для организации кода, особенно если кода много и он чуть сложнее чем мигание светодиодом.


Логично в таком случае делить весь код на мелкие задачи, выполняющие что-то одно и запускать их по мере необходимости, по очереди. Этим занимается диспетчер задач: у нас есть очередь из таких задач, диспетчер проходит по очереди и выполняет наиболее старую (первый встал в очередь, первый выполнился).


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

SetTask(BlinkON); 

Функция добавления выполняется не долго (конкретно сколько - хз, можно посчитать, это вам в качестве домашки). Понятно что моргнуть светодиодом можно и в самом прерывании, это быстрее. Но к примеру:

SetTask(SendToSerial_длинный_текст); 

уже выгода ощущается заметно.


Вторая часть "системы" - это таймерная служба. Суть та же, но задачи выполняются с задержкой.

Например в прерывании мы спалили что нажата кнопка:

if(кнопка нажата){

отключаем прерывание у этой кнопки;

SetTask(btnPress); 

}


В btnPres() мы выполняем нужные действия и добавляем SetTimerTask(btnRelease, 100);

Таким образом через 100мс после нажатия кнопки сработает btnRelease, где мы обратно включим прерывания с кнопки. Этим самым мы добиваемся того, что в главном цикле меньше говнокода, портянки проверок и запусков всего, упрощаем масштабирование кода(пример в конце) и заодно, конкретно в этом примере мы избавляемся от головняка отслеживания дребезга.


Теперь кусок псевдокода моего проекта, задача:

1) по нажатию кнопки включать проигрывание мелодии

2) ночью снижать громкость, время синхронизировать с RTC микрухой

3) ограничивать звук вручную с переменного резистора

4) синхронизироваться с телефоном(выбор мелодии, установка времени тихого режима, синхронизация времени телефон->ардуино->RTC и тд)


Главный цикл:

void setup() {

поднимаем_serial();

настраиваем_пины();

инициализируем_переменные();

настраиваем_mp3();

настраиваем_прерывание_с_кнопки(PCIN2);

настраиваем_таймер_для_отсчета_времени();


InitRTOS(); // Инициализируем ядро таймерной службы

RunRTOS(); //Запускаем таймерную службу и диспетчер задач


// Запуск фоновых задач

SetTimerTask(read_max_volume, 1000);  //читаем данные с переменного резистора каждые 1 сек

SetTimerTask(check_time, 1000);  //проверяем время, не поздно ли. если поздно - включим тихий режим

SetTimerTask(read_rtc, 65000);  //синхронизируемся с RTC

SetTimerTask(check_sync, SYNC_PERIOD); //читаем bluetooth модуль, проверяем пришли ли данные

SetTimerTask(BlinkON,500); //моргаем светодиодом

sei();

}


void loop() {

TaskManager(); 

}


И все, ничего лишнего. check_sync проверяет есть ли данные в буфере от bluetooth модуля.

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

- если это запрос текущих настроек - отправляем ответ

- если это данные с новыми настройками - принимаем и сохраняем их

- если это запрос "воспроизведи текущую мелодию" запускаем задачу воспроизведения


Каждую задачу нужно писать так что бы она выполнялась как можно быстрее, никаких delay внутри быть не должно(кроме совсем уж мелких, как у 1-wire), вместо этого отдаем управление другой задаче, предварительно добавив нужный флаг состояния этой задачи и добавив себя же в очередь(таймерную)

Слишком сильно делить задачи тоже не стоит, т к очередь не бесконечная(это настраиваемый параметр)


Ознакомиться с полным псевдокодом можно тут (упростил для понимания, вырезав лишнее), весь проект можно глянуть тут (там же дернуть либу, в виде подключаемых файлов), и главное ознакомиться с первоисточником, прочитать устройство библиотеки, посмотреть некрасивые рисунки взаимодействия диспетчеров и почитать шутки от дихалта можно тут


UPD:  Забыл про пример расширяемости кода. Допустим мы захотели к дверному звонку добавить пару функций:  датчик дыма, угарного газа, с оповещением или датчик движения, с оповещением, etc.

Для этого нужно добавить в конец setup() пару строк:

SetTimerTask(check_gas, 1000);

SetTimerTask(check_motion_sensor, 500); 

Останется написать сами эти функции. т к опросы датчиков происходят очень редко, по меркам МК, это нисколько не нагрузит ни очередь, ни сам микропроцессор. Функция проигрывания уже написана, нам нужно только записать нужные мелодии на флешку и запомнить их id


Вопросы, пожелания и критика приветствуется)

Показать полностью
[моё] Arduino Dihalt Длиннопост Текст Быдлокодинг Программирование Диспетчер задач
16
Dmitriyi
7 лет назад

Помогите кто разбирается.Подозрительные процессы в диспетчере⁠⁠

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

[моё] Программист Помощь Вирусы-шифровальщики Диспетчер задач Специалисты Ремонт техники Ремонт компьютеров Текст
24
Stinzon
7 лет назад

Проблема с диспетчером задач⁠⁠

В последние 2 дня появились проблемы с ПК, перестал открываться диспетчер задач (только иногда открывался), компьютер после запуска начинал сильно тормозить, раньше было в CS:GO 250 фпс, щас падает до 40. Помогите пожалуйста :с

Диспетчер задач Компьютер Лаг Баг Тормозит ПК Текст Без рейтинга
7
dimanski
7 лет назад

Я не против конечно, но почему же так?⁠⁠

Да у меня 43 закладки ну и чо? Почему так много памяти? Даже Virtualbox столько не ест.

Я не против конечно, но почему же так? Google Chrome, Оперативная память, Диспетчер задач
Показать полностью 1
[моё] Google Chrome Оперативная память Диспетчер задач
19
4856
kiberbarsuk
kiberbarsuk
7 лет назад

Диспетчер задач⁠⁠

Диспетчер задач Комиксы, Диспетчер задач, Приложение, Картинки, IT юмор, Юмор
Показать полностью 1
Комиксы Диспетчер задач Приложение Картинки IT юмор Юмор
405
Goroooo001
Goroooo001
7 лет назад

Что означает листик в диспетчере задач?⁠⁠

Что означает листик в диспетчере задач?
[моё] Диспетчер задач Windows 10 Вопрос
18
20
hskk
hskk
7 лет назад

Ты был нам как брат...⁠⁠

Ты был нам как брат... Диспетчер задач, Спасибо что живой, Windows

p.s. Нашел на просторах интернета, баянометр не выдавал ничего 

Показать полностью 1
Диспетчер задач Спасибо что живой Windows
8
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии