Easyelectronics.ru

Электроника для всех
Текущее время: 21 окт 2018, 11:15

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Один датчик, несколько задач
СообщениеДобавлено: 29 дек 2017, 12:35 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1330
Откуда: Курск
Первый опыт с FreeRTOS, сильно не пинайте если туплю
Есть один датчик освещённости. Опрашивается относительно редко. Просто что бы определить день/ночь
Это значение используется в нескольких задачах. Как это правильнее передать задачам?
Глобальная переменная? Но что-то в мануалах отговаривают от них
Семафор, очередь - тоже не совсем то
Что-то я видимо упускаю
Ткните плиз в какую сторону смотреть


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Один датчик, несколько задач
СообщениеДобавлено: 29 дек 2017, 13:09 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2689
Глобальная переменная защищенная мьютексами для совместного доступа, вполне себе решение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Один датчик, несколько задач
СообщениеДобавлено: 29 дек 2017, 13:22 
Старожил
Аватара пользователя

Зарегистрирован: 01 авг 2016, 10:47
Сообщения: 263
Откуда: Таганрог
если передавать только "день\ночь", то можно задействовать флаги событий (eventgroup если не ошибаюсь).

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Один датчик, несколько задач
СообщениеДобавлено: 29 дек 2017, 13:30 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 5007
Не понял, зачем "это" привязывать к ОС. Если бы сие было глобальным переключателем, то имело какой-то смысл, а так то зачем? Искусство ради искусства?
Если есть функция, которая что-то сообщает (день/ночь, состояние батареи, температура &etc), то надо эту функцию и спрашивать. А вот когда выдавать закешированное значение, а когда реально измерять - это личное дело самой функции.
В вашем варианте - ну наплодите вы глобальных переменных, а кто и когда их будет менять?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Один датчик, несколько задач
СообщениеДобавлено: 31 дек 2017, 20:28 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 ноя 2010, 20:11
Сообщения: 61
Откуда: Омск
ИМХО, если глобальная переменная удовлетворяет условиям атомарного доступа, а именно, не может быть изменена частично и изменение не может быть прервано переключением процесса - используйте глобальную переменную.
Простейший пример. Для AVR (8bit) размер атомарной переменной - 1 байт. Особенно, если она используется как флаг. Например: 0x00 - темно, любое другое значение - светло. Запись производится, например, в прерывании, а чтение - в пользовательских функциях. Здесь атомарно.
Или же переменная отражает уровень яркости. Но запись только в одном месте, а чтение - где угодно. Тоже будет работать.

А если переменная дробится на биты и уже от них зависят вычисления - не атомарно.
Например, [00011001] + [00000010] -> [00011011]. Здесь происходит R-M-W операция - чтение-изменение-запись. Прерывание может произойти в самый неподходящий момент.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB