Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 1

Подсказка по алгоритму чтения/записи

22.04.2015, 15:55. Показов 883. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу подсказки для написании алгоритма.

Исходные данные:
1) Имеется специализированный контроллер. В нем 50кБ рабочей памяти (аналог RAM) и 4Мб внешней памяти (аналог ROM).
2) К контроллеру подключен некий аналоговый датчик, данные с которого должны сохраняться каждых 100мс в ячейку памяти в массиве находящемся в рабочей памяти, при достижении конца массива запись начинается с начала массива (при условиях о которых дальше). Размер одной записи 14 байт (значение сигнала — 4 байта, значение доп. — 4 байта, таймстамп — 6 байт)
3) Приложение на компьютере должно читать данные с рабочей памяти контроллера пачками не более PDU 190 байт и складывать в свою базу данных, также строить график. После вычитывания компьютер должен путем записи в рабочую память контроллера сигнализировать какие записи он уже вычитал.
4) В идеальном случае указатель чтения контроллером бежит рывками за указателем записи. В случае же когда связь между контроллером и приложением на компьютере обрывается, указатель чтения останавливается и при достижении определенного расстояния между указателями программа контроллера должна начать сохранять данные во внешнюю память, но на так как писать прямо во внешнюю память сразу нельзя, необходимо использовать функцию перемещения области памяти из рабочей памяти во внешнюю. Область которая подлежит перемещению во внешнюю память не должна поддаваться записи во время перемещения. Таким образом запись ведется до окончания всей памяти (и внешней и внутренней), после чего прекращается, пока не будет восстановлена связь с ПК.
5) Когда связь с ПК восстановлена необходимо начать процесс чтения данных в порядке в котором они были сохранены. Обратный алгоритм перемещения, аналогично, — копировать область памяти из внешней памяти в рабочую, а оттуда читать приложением. Параллельно может начаться процесс записи в рабочую область новых значений.

Что имею:
Работу с датчиком не рассматриваем - это я уже сделал.
Что касается приложения на ПК - там свои вопросы выходящие за пределы этой темы.
Алгоритм записи в память у меня сейчас приблизительно такой:
- создано три массива данных по 600 записей (1 минута логирования) размером по 14*600 = 8`400 байт в рабочей памяти контроллера (в сумме 3*8400 = 25`200 байт).
- создано 300 массивов данных по 600 записей (5 часов логирования) во внешней памяти - всего 300*8400 = 2`520`000 байт.
- последовательно записываем данные в массивы рабочей памяти. Сначала заполняем первый, потом второй, когда начинаем заполнять третий - первый функцией перемещения области памяти копируем в первый из 300 массивов внешней памяти. Доходим до конца третьего - начинаем писать в первый, таким же образом копируем второй буферный массив во второй из 300 внешней памяти. Продолжаем пока внешняя память не будет заполнена.
- указатель записи состоит из трех: номер текущего активного буфера (1..3 в рабочей памяти), номер текущей записи в этом массиве, номер последнего записанного массива во внешней памяти.

В чем прошу помощи:

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

Буду благодарен за любые предложения, в том числе связанные с пересмотром архитектуры.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2015, 15:55
Ответы с готовыми решениями:

Написать функции для чтения/записи отдельных бит для любой записи из данного набора
Начиная с адреса А в памяти МК находятся N записей длиной k бит каждая. Записи выровнены по границе слова. Написать функции для...

Как усовершенствовать алгоритму обратной польской записи?
Коллеги, добрый день! Написал алгоритм ОПЗ на выполнение следующих операций: сложения, вычитания, деления, умножения, sin(x) и cos(x). ...

Ускорение чтения/записи
Найдя в инете статейку , обрадовавшись, приступил к процессу. В итоге получил не столь радужный результат, как там говорилось. К...

1
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
22.04.2015, 19:09
Цитата Сообщение от Rebornavt Посмотреть сообщение
указывать какие данные уже получены
Не вчитываясь в детали, для ограниченного и фиксированного по размеру хранилища, битовая карта (a la FAT), будет самым простым и быстрым решением. Посмотрите еще решения по хранилищам на Konstantin Knizhnik Home Page.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.04.2015, 19:09
Помогаю со студенческими работами здесь

Скорость чтения/записи
Всем привет! Есть ли какие-нибудь библиотеки в Java, чтобы узнать скорость чтения/записи на диск? Интересует именно Java, потому что...

Чтения записи в реестре
Помогите добрые люди пожалуйста:cry: Ни в какую не могу прочесть запись в реестре Делаю так Dim key As Microsoft.Win32.RegistryKey ...

Ошибка чтения записи №
Добрый день! Может кто-то сможет подсказать. Формирую отчет в Excel появляется "Ошибка чтения записи №". Принтскрин с ошибкой...

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

Ошибка чтения/записи в/из файла
Добрый день. Имеется программа для отправки запросов на биржу для покупки/продажи по определенной стратегии. Первым делом она...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru