Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 30.11.2016, 17:17  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 551
Сказал спасибо: 37
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Организация памяти.

Здравствуйте, возникла тут одна проблемка, как решить неясно.
В общем есть PIC18f452. Он опрашивает несколько датчиков. около 10 штук.
Результаты с датчиков я складываю в буфер длиной 64 байта.
Далее по запросу с головного устройства по SPI этот буфер передается.
Опрос датчиков происходит параллельно с использованием прерываний.

Проблема возникает в том появляются ситуации когда начинается чтение буфера по SPI но в этот же момент идет изменение этого буфера в основном коде так как сработало прерывание от датчика какого нибудь.

Хотел сделать второй буфер, но проблема в том что понятия цикла опроса не существует и данные с датчиков сыпятся как только готовы.

Подскажите пожалуйста как можно решить эту задачу???
Реклама:
worldmasters вне форума  
Непрочитано 30.11.2016, 17:57  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Организация памяти.

Ну распараллеливания процессов в этом МК то нету и в помине. Так что при запросе инфы с головного устройства просто прекращаете прием с датчиков, не реагируете на получение инфы с датчиков и отправляете то, что есть. Либо, если вам важно, чтобы данные на всех датчиках обновились полностью, то в ответ на запрос головного устройства можете ему отправить сообщение о неготовности пакета данных. Это зависит от формата команд головного устройства и вообще от организации его работы. Предусмотрен ли у головного устройства обмен служебной инфой, помимо чисто данных, предусмотрена ли интеллектуальная работа типа "готово? -- нет! -- аа, ну я тогда попозже зайду".

Либо, (особенно если скорость передачи в головное устройство невысокая, слишком медленная для вас), то складываете инфу с датчиков в один буфер, не откладывая. А как только приходит запрос от головного устройства, кратковременно запрещаете реакцию на датчики (прерывания от них), копируете этот буфер во второй буфер полностью до конца, разрешаете прерывания от датчиков и спокойно отправляете второй буфер в головное устройство, этот буфер будет содержать инфу, зафиксированную в момент копирования из первого во втогой.
NewWriter вне форума  
Непрочитано 30.11.2016, 20:44  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Организация памяти.

Два буфера. Просто перекидывать указатель и все.
Easyrider83 вне форума  
Непрочитано 30.11.2016, 20:55  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Организация памяти.

Сообщение от Easyrider83 Посмотреть сообщение
Два буфера. Просто перекидывать указатель и все.
Один большой буфер с отправкой по СПИ при заполненной половине.
STM32F0 вне форума  
Непрочитано 30.11.2016, 21:28  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Организация памяти.

Сообщение от worldmasters Посмотреть сообщение
Он опрашивает несколько датчиков. около 10 штук.
Сообщение от worldmasters Посмотреть сообщение
и данные с датчиков сыпятся как только готовы
Так мк датчики опрашивает, или получает с них данные по их собственной инициативе?

Во втором случае, если он еще и на SPI является слэйвом, проблема системная. Так нельзя. Более продвинутый МК с DMA может такое делать, а ваш ПИК нет (хотя если общение с каждым датчиком занимает немного времени, то заставить работать таки можно).
AR_Favorit вне форума  
Непрочитано 30.11.2016, 21:47  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Организация памяти.

Я так думаю, что датчик имеет выход INT прерывания по готовности. Некоторые АЦП-шки например имеют такой. RTC так же поступают, выводя секундные импульсы. А МК реагирует нна это по внешнему прерыванию.
NewWriter вне форума  
Непрочитано 30.11.2016, 21:59  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Организация памяти.

По INT надо флаг выставлять, а не датчики опрашивать.
Easyrider83 вне форума  
Непрочитано 01.12.2016, 01:54  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Организация памяти.

По существу задачи (без технических деталей)
В памяти организуются два буфера для данных.
Переключение идёт командой xor для флага указателя буфера.
Дополнительно к флагу организуются два поля (битовых) по биту на датчик.
При записи информации в буфер соответствующий бит or 1.
Тогда при запросе spi делаем xor, затем передаём всех у кого флаг 1 и записываем 0 во все биты флагов (and).
При таком алгоритме получается полностью независимая обработка.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 01.12.2016, 08:55  
Stazher
Вид на жительство
 
Регистрация: 03.02.2010
Сообщений: 347
Сказал спасибо: 138
Сказали Спасибо 65 раз(а) в 46 сообщении(ях)
Stazher на пути к лучшему
По умолчанию Re: Организация памяти.

Сообщение от worldmasters Посмотреть сообщение
В общем есть PIC18f452. Он опрашивает несколько датчиков. около 10 штук.
Сообщение от worldmasters Посмотреть сообщение
Проблема возникает в том появляются ситуации когда начинается чтение буфера по SPI но в этот же момент идет изменение этого буфера в основном коде так как сработало прерывание от датчика какого нибудь.
Странно что у вас не возникает вопроса о том что делать если прерывания поступили сразу от двух и более датчиков. Вы же эту ситуацию как то разруливаете.
Stazher вне форума  
Непрочитано 01.12.2016, 09:57  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 551
Сказал спасибо: 37
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Организация памяти.

Сообщение от Stazher Посмотреть сообщение
Странно что у вас не возникает вопроса о том что делать если прерывания поступили сразу от двух и более датчиков. Вы же эту ситуацию как то разруливаете.
Приоритетами. некоторые датчики это УЗ дальномеры там важно между импульсами замерять время. Это по прерыванию с высоким приоритетом.
ацп - низкий приоритет.
контактные датчики в теле основного main опрашиваются.

когда сработало прерывание в нем фиксируются основные сигналы, время там или количество импульсов.
затем в основном цикле происходит обработка, запись в буфер и инициирование нового запроса.

NewWriter В данном случае под параллельностью можно понимать неблокирующее исполнение. В идеале голова должна иметь актуальные данные со всех датчиков максимально быстро. Подготовить полностью пакет не получается потому что например цап сможет опросить свои датчики за 100ms, а для уз этого времени мало. И получится что надо ацп запускать по новому кругу или ждать пока все уз будут готовы. Но к тому времени данные ацп уже станут неактуальными.

mike-y-k Была подобная идея. для передачи по спи есть указатель на начало массива. Далее проси перелистываем на 1 указатель и отправляем все байты что есть.
А если для каждого результата менять указатель по флагу готовности ... как это правильно расписать чет не соображу. К тому же этот пик не торопливый поэтому я стараюсь сложных алгоритмов организации избегать.


Сразу уточню что железо изменить нет возможности. Понимаю что есть более шустрые чипы но в данном случае без вариантов. Именно этот пик, 25Mhz частота кварца.
worldmasters вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
МСС18: корректировка файла линкера - выделение памяти urry Микроконтроллеры, АЦП, память и т.д 0 08.12.2009 10:32
А что если...прицепить к МК планку DDR памяти? vchik Микроконтроллеры, АЦП, память и т.д 9 03.06.2008 08:47
Как уменьшить размер памяти под стек? greafuger Микроконтроллеры, АЦП, память и т.д 1 03.04.2008 08:23


Часовой пояс GMT +4, время: 08:52.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot