у меня вопрос концептуальный, с реализацией выбранной концепции я разберусь сам.
я вижу несколько вариантов концептуальной реализации работы с датчиками:
1. опрос датчиков в фоне с периодом, который определяется их параметрами, и накопление результатов в промежуточном массиве. а обработку делать уже с другим периодом (заданным пользователем) по значениям из массива.
2. опрос всех датчиков делать с периодом, заданным пользователем, и сразу делать обработку.
3. опрос и обработку вести по одному датчику.
достоинства подходов:
1. независимость обработки от поступления интформации с датчиков, т.е. можно соблюсти идеально периодичность обработки, как захотел пользователь.
2. четкая взаимосвязь моментов принятия решения (обработки) с моментом поступления информации с датчиков.
3. минимальная загрузка "ядра" программы, т.к. опрос одного датчика занимает минимум времени.
недостатки подходов:
1. разрыв между моментом измерения и моментом принятия решения.
2. относительно долгий процесс обработки всех 8-и датчиков (100 мс)
3. невозможность обеспечить заданный пользователем интервал опроса датчиков с высокой точностью.
вероятно, я предусмотрел не все варианты... но вопрос контретно такой: какую бы из этих концепций вы приняли? пока я склоняюсь к 1-й или 2-й... и менее всего нравится третья...
но хочется ознакомиться с иными подходами и мнениями, чтобы увидеть слабость своих или наоборот, увериться в их силе...
Добавлено after 2 minutes 1 second:
Аlex писал(а):их можно вообще повесить на отдельные пины целого порта и опрашивать одновременно. Вот вам и быстродействие и одновременность.
я и так их повесил на пины одного порта... только вот с одновременностью не очень: если работать ПАРАЛЛЕЛЬНО со всем сразу, обработка получается слишком сложной, хотя... в этом направлении, вероятно, стоит подумать подольше
Добавлено after 38 minutes 7 seconds:
пока вопрос про датчики в стадии обдумывания, поделюсь немного своими достижениями в плане RTOS, а точнее, в получающейся у меня кооперативной ОС.
концептуально у меня получается event-driven система, т.е. диспетчер "процессов" у меня работает путем разбора очереди поступающих событий.
событие может генерироваться прерыванием или другим процессом.
процесс, само собой, это просто функция без больших циклов, уж точно без бесконечных циклов.
дополнительно к прерываниям есть и ранее описанная система таймеров, которая тоже может генерировать сообщения.
если в очереди в текущий момент нет сообщений (в RTOS такое называется состоянием Idle), у меня работает система "отложенных действий" - это мое очередное "изобретение"

в чем его смысл? допустим, возникла необходимость отправить СМС, а по каким-то причинам GSM-сеть отвалилась. ну, представим себе на минуту, что это так, хотя для стационарного устройства это достаточно редкое явление. что делать в этом случае? event-driven система, теоретически, обнаружив ситуацию, когда обработать событие невозможно, может посылать его сама себе снова и снова, в надежде, что когда-нибудь... ну вы поняли. но в этом случае очередь сообщений будет засрана бесполезными сообщениями, что блкирует работу полезных. можно, конечно, ставить какие-то флаги, а потом по таймеру эти флаги отслеживать... ну и т.д.
я же решил все это упростить. у меня есть "очередь" отложенных действий, т.е. массив структур, где хранятся функции, которые надо вызывать, если больше делать нечего (Idle). функция может вернуть true - и это будет означать, что она свое дело сделала, и больше вызывать её не надо (в этом случае она удаляется из списка). если же она вернула false - она остается в списке и вызывается снова и снова.
так вот, в ранее описанном случае отправки СМС я помещаю в список отложенных функцию, которая тупо пытается отправить СМС и возвращает результат этой отправки (на самом деле я делаю чуть иначе, но для простоты описания пусть будет так). и это означает, что если в очереди сообщений нет других сообщений, моя программа пытается отправить СМС, пока, наконец, не сумеет это сделать (т.е. как только сеть восстановится - так сразу и оправит). но если в очереди есть сообщение - оно приоритетно обработается.
поскольку в моей системе много устройств, которые могут либо быть готовыми, либо быть неготовыми, и заранее невозможно предсказать, когда готовность/неготовность появится, система "отложенных" действий помогает разрулить это вполне красиво, как мне кажется...