01.12.2016, 10:36
|
#11
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Организация памяти.
Сообщение от worldmasters
|
Проблема возникает в том появляются ситуации когда начинается чтение буфера по SPI но в этот же момент идет изменение этого буфера в основном коде так как сработало прерывание от датчика какого нибудь.
Хотел сделать второй буфер, но проблема в том что понятия цикла опроса не существует и данные с датчиков сыпятся как только готовы.
|
Не описана политика сбора данных
Не описана политика интерфейса с хостом.
типа:
Времянки всего, обновление не переданных показаний, кто инициатор обмена, что делать если датчик не готов, если есть новые данные а старые ещё не переданы?
|
|
|
|
01.12.2016, 11:03
|
#12
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Организация памяти.
Чтобы избежать долгого копирования всего буфера, можно перед передачей инфы в головное устройство от очередного датчика сначала скопировать инфы от этого датчика (я так понимаю, инфа содержит несколько байт на датчик) во временный буфер, и передать из временного буфера. И так для каждого датчика.
Так же мы не знаем, как именно головное устройство запрашивает инфу. В виде байтовой команды? Или в виде опускания чип-селект?
|
|
|
|
01.12.2016, 11:30
|
#13
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Организация памяти.
Сообщение от NewWriter
|
Чтобы избежать долгого копирования всего буфера
|
Зачем копировать буфер?! Все работают по указателю, он указывает то на один буфер, то на другой. Хорошо, два указателя: один для SPI другой для датчиков.
|
|
|
|
01.12.2016, 11:48
|
#14
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Организация памяти.
Сообщение от NewWriter
|
Или в виде опускания чип-селект?
|
CS сигнал. Срабатывает высокоприоритетное прерывание и включается спи.
Сообщение от makakus
|
Зачем копировать буфер?! Все работают по указателю, он указывает то на один буфер, то на другой. Хорошо, два указателя: один для SPI другой для датчиков.
|
Я выше писал что голове требуется актуальные данные. АЦП работает быстро а УЗ медленно ...
Голова за раз считывает все данные.
Последний раз редактировалось worldmasters; 01.12.2016 в 11:53.
|
|
|
|
01.12.2016, 12:03
|
#15
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Организация памяти.
Сообщение от worldmasters
|
Я выше писал что голове требуется актуальные данные. АЦП работает быстро а УЗ медленно
|
Вы, если хотите помощи, распишите процесс: что когда за какое время, кто кого пинает кто кому чего должен.
А экстарсенсорить кто у вас голова и что такое УЗ, сколько времени "быстро" и "медленно" как-то непонятно почему мы должны.
|
|
|
|
01.12.2016, 12:17
|
#16
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Организация памяти.
Копировать во временный буфер текущую передаваемую инфу нужно для того, чтобы сохранить целостность инфы. Допустим, передаётся первый байт инфы одного датчика, а в этот момент из-за прерывания датчик изменяет инфу и второй байт будет уже другой. Получится грубая ошибка.
Если одни датчики быстро готовят инфу, а другие медленно, а головном нужно выдать немедленно по запросу актуальную инфу по сразу всем датчиках, то такого не будет. Инфа будет передана такая, которая была на мебель последнего получения с датчиков.
Последний раз редактировалось NewWriter; 01.12.2016 в 12:22.
|
|
|
|
01.12.2016, 12:35
|
#17
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Организация памяти.
Сообщение от NewWriter
|
Копировать во временный буфер текущую передаваемую инфу нужно для того, чтобы сохранить целостность инфы. Допустим, передаётся первый байт инфы одного датчика, а в этот момент из-за прерывания датчик изменяет инфу и второй байт будет уже другой. Получится грубая ошибка.
|
Вот такая ошибка и получается... ((
Сообщение от NewWriter
|
Если одни датчики быстро готовят инфу, а другие медленно, а головном нужно выдать немедленно по запросу актуальную инфу по сразу всем датчиках, то такого не будет. Инфа будет передана такая, которая была на мебель последнего получения с датчиков.
|
да да .. именно .. пусть будут переданы новые данные по 3 цапам а другие данные как есть. Но нужно исключить ситуацию как в первом варианте.
Сейчас сделал блокировку на запись при включенном спи.
Наверное невероятная ситуация когда идет запись в буфер и приходит запрос по спи.
float значение вписывается в буфер со скоростью 3.5us.
|
|
|
|
01.12.2016, 12:40
|
#18
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Организация памяти.
Сообщение от NewWriter
|
Копировать во временный буфер текущую передаваемую инфу нужно для того, чтобы сохранить целостность инфы. Допустим, передаётся первый байт инфы одного датчика, а в этот момент из-за прерывания датчик изменяет инфу и второй байт будет уже другой. Получится грубая ошибка.
|
Это очевидно. Только не нужно.
Пусть "датчик изменяет инфу" в другом месте! Делает не рабочий буфер и его копию для передачи, а два рабочих буфера, памяти столько же. Добавляете два указателя на эти буферы. Один для датчиков, второй - для передатчика. Датчик пишет по адресу Указатель_1+длина данных*номер датчика. Передатчик передаёт байты начиная с указателя_2. Когда заполнится рабочий буфер, указатели меняют адреса наоборот.
Вопрос "когда переключить буферы" вообще говоря требует творческого подхода, как здесь где сталкивается "быстро" и "медленно". Зависит от применения: в электросчётчиках надо строго одновременно оцифровать напряжение и ток, а если это датчики температуры, разбросанные по двигателю или там котлу, то временной разнобой на пару секунд ничего не меняет.
|
|
|
|
01.12.2016, 12:53
|
#19
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Организация памяти.
Сообщение от worldmasters
|
Наверное невероятная ситуация когда идет запись в буфер и приходит запрос по спи.
|
была бы невероятная не было бы ошибок. Они выскакивают при любой вероятности, видел ошибки при вероятности 10^-24.
Сообщение от worldmasters
|
едаётся первый байт инфы одного датчика, а в этот момент из-за прерывания датчик изменяет инфу и второй байт будет уже другой
|
Сообщение от worldmasters
|
пусть будут переданы новые данные по 3 цапам а другие данные как есть.
|
Проще всего так: запрет прерывания от датчика - копирование данных одного датчика во временный буфер - разрешение прерывания - передача - следующий датчик.
|
|
|
|
01.12.2016, 13:16
|
#20
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Организация памяти.
Ха. Я этот вариант уже дважды предложил.
Какая разница, копировать все равно придётся.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:26.
|
|