Алгоритм чтения данных из памяти - C (СИ)
Формулировка задачи:
Привет.
Не могу придумать алгоритм чтения данных из памяти.
В общем, данные (данные - это массив char размером 64 байта) пишутся в память по кольцу. Данные формирует прибор после каждого измерения. По достижению 2048 записей в память счетчик обнуляется, и запись данных начинается сначала (с нулевого сектора в памяти). Получается, прибор сделал измерение положил данные в память, сделал следующее измерение снова положил в память и т.д. как достиг 2048 обнулил адрес записи данных и начал все с начало (стирание предыдущих данных не делается).
Проблема в чтение последних данных из памяти после обнуления счетчика.
Предположим прибор у нас не чего ранее не мерил и память и счетчик пусты. Мы сделали одно измерение и хотим считать его из памяти. Для этого нам надо указать адрес начало данных в памяти и длину пакета и все данные получены (все хорошо). Сделали сто измерений и хотим получить последних 10 для этого (зная длину данных и начальный адрес вычисляем) вычисляем адрес и также указываем длину и т.д. до 2048 измерения. После счетчик обнулился и начинает перезаписывать данные в памяти, а старые то остались в памяти. И вот тут возникает проблема вычисления адреса от куда читать данные. Нужно взять кусок с начало и кусок с конца. Как это сделать?
Решение задачи: «Алгоритм чтения данных из памяти»
textual
Листинг программы
while(ptr1 < ptr2) putchar(ptr1++);
Объяснение кода листинга программы
В данном коде выполняется следующая последовательность действий:
- Указатель
ptr1инициализируется значениемptr2 - 1. - В цикле
whileвыполняется условиеptr1 < ptr2. - В каждой итерации цикла значение
ptr1увеличивается на единицу. - В каждой итерации цикла выводится значение
ptr1с помощью функцииputchar. - Цикл завершается, когда значение
ptr1становится равнымptr2. Список действий: - Инициализация
ptr1значениемptr2 - 1. - Выполнение условия
ptr1 < ptr2в циклеwhile. - Увеличение значения
ptr1на единицу в каждой итерации цикла. - Вывод значения
ptr1с помощью функцииputcharв каждой итерации цикла. - Цикл завершается, когда значение
ptr1становится равнымptr2.