Простой лог

78125

✩✩✩✩✩✩✩
1 Дек 2019
76
2
Добрый день.
Каждые 4мс, те часто, идет опрос датчика сигнал 0-1, выводить в лог слишком шумно.
Потом идет цифровая обработка сигнала и некое решение(триггер).

Подскажите как логгировать скажем последние 255 состояний датчика до срабатывания триггера, чтобы их можно было вывести в лог
для оценки.
Те мне надо чтобы последнее значение проталкивало всю цепочку 0-1 и самое старое стиралось.
В результате последовательность 0-1 от новейшего к старому.
Вывод по триггеру.
Спасибо!
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Идея в целом такая:
Заводите массив на нужное кол-во данных в логе. Количество N
Заводите индекс для массива, куда будете писать. Изначально он I=0
Далее по ходу
записываете данные в ячейку I
Увеличиваете I на 1
Если I равно N , то I=0 // тут если брать тип данных I - байт, а N будет 256 , от 0 до 255 включительно, то можно без проверки , после 255 I само станет 0
На этом "внос" данных закончен.

Вывод будет начинаться с I до I-1 с переходом через максимум.

Если заносить только 0 и 1, то теоретически можно писать биты, но это усложнит ввод и вывод наных.
Если назначить все элементы массива равными например 255, а хранить только 0 и 1, то при выводе можно игнорировать данные с 255, что сократит вывод, но это только пока массив не заполнится один раз.
 

78125

✩✩✩✩✩✩✩
1 Дек 2019
76
2
Спасибо.
Я думал есть какое то элегантное решение.
Типа писать со сдвигом последнее значение - которое само протолкнет все остальные...
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Теоретически и такое можно сделать. Но подумайте, что быстрее записать одно значение и увеличить одно число или сдвинуть 254 значения и записать еще одно число ?
 

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
98
@78125,я согласен с @Старик Похабыч,типичный кольцевой буфер.
А про "проталкивание" это чисто железная фича на сдвиговых регистрах.
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
А про "проталкивание" это чисто железная фича на сдвиговых регистрах.
Ну почему же, не только железная. Например, команды POP и PUSH для регистров в ассемблере. Правда, здесь это неприменимо: в языке С для массивов и переменных таких операторов нет. 😁
 
Изменено:
  • Лойс +1
Реакции: te238s