HHIMERA 0 29 декабря, 2017 Опубликовано 29 декабря, 2017 · Жалоба Для передачи вообще можно аппаратный вывод с регистра compare таймера использовать. Ну или тот же UART если больше нравится. Да, конечно прерываний будет немного больше. Можно вообще без прерываний... на ДМА... типа аппаратно... Это уже кому как больше нравится... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 29 декабря, 2017 Опубликовано 29 декабря, 2017 (изменено) · Жалоба Forger, Зачем дергать прерывания раз в 1мкс? 01.gif У 1-wire все времена указаны как минимум от 15мкс. Если Вы внимательно прочитаете мое сообщение, то увидите, что я говорил по ХУДШИЙ случай. Конечно, в большинстве случаев такие реакции таймера не нужны. scifi, 1-wire удобно делается на уарте, там нет всей этой головной боли. Будем считать, что ног в корпусе не осталось. И это не допущение, а факт. AlexandrY, Прерывания все надо профайлить до такта чтобы узнать бюджет задержек, что автор как бы и начал делать, но видимо решил, что и так сойдёт. Т.е. продолжает цепь ошибок. Я не решил, что и так сойдет. Я попытался найти оптимальный выход из ситуации. Напомню, что переделывать железо никто не будет, а то, что 180МГц Cortex-M4F не сможет правильно и лаконично обработать датчик на фоне других процессов - не поверю. jcxz, Работу 1-wire естественно эмулировать при помощи capture- и compare- режимов какого-либо таймера. Ногодрыг или UART - это колхоз. Если бы 1-Wire был выведен на ножку аппаратного таймера, я бы не задавал таких вопросов. Очевидно, я спрашивал не про то, как мне переделать железо, а про то, как архитектурно продумать программную часть. Тут товарищи некоторые осциллографы с ЖК-экранами на сраных 8-битных AVR-ках делают с красивым меню, и памяти хватает, и более-менее опрятно выглядит, а меряет как китайщина с Aliexpress (то есть вполне допустимо для радиолюбительских поделок для монитора SPI, I2C и пр.). Поверьте, перезаполнять регистр совпадения таймера в прерывании по каждому прерыванию для автомата состояний, ЛИБО делать то же самое но дополнительно дернуть ножкой при этом программно - разница не существенная абсолютно в данном случае, ибо не двигателем управляем. P.S.: На ум все-таки приходит вариант с DMA на регистр совпадения... Но в прерывании ножку дергать, так как заведена не на таймер... В общем, почитав Ваши комментарии, я пришел к выводу, что... что никакого вывода, собственно, и нет. Кто-то делал так, кто-то делал так. Кто-то кого-то поливает говном, называя последнего быдлокодером, кто-то, в свою очередь, считает наоборот. Из всего прочитанного можно лишь сделать одно заключение - что бы ты ни делал - другие буду считать сделанным через одно место... Люблю этот форум:rolleyes: Изящное решение найду в любом случае, поскольку не сдаюсь на "и так сойдет" (перфекционизм в душе ликует). Всех с наступающим Новым Годом! Изменено 29 декабря, 2017 пользователем Arlleex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 30 декабря, 2017 Опубликовано 30 декабря, 2017 · Жалоба Если Вы внимательно прочитаете мое сообщение, то увидите, что я говорил по ХУДШИЙ случай.1 мкс - НЕКУДЫШНЫЙ случай. Можно прекрасно ограничиться 5мкс, например. Конечно, в большинстве случаев такие реакции таймера не нужны.Вы уж определитесь, наконец, какую помощь ожидаете тут получить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 30 декабря, 2017 Опубликовано 30 декабря, 2017 · Жалоба ...никакого вывода, собственно, и нет. Кто-то делал так, кто-то делал так. ...Изящное решение найду...Всех с наступающим Новым Годом! Вы правы - пока прозвучала реализация двумя путями: - ногодрыг в прерываниях - уарт всевозможные потуги на захватах и дма = нас всех туда тянет, но увы отличия от ногодрыга минимальные, что нивелирует (ну или почти) весь колхоз и нагромождение... по крайней мере раздувание в эту степь щёк - так и осталось хотелками (у тех кто прямо заявлял что это кашэрно)... Из всех озвученных вариантах - для варианта промышленного (куча датчиков и каждый датчик = свой вход) остаётся одын единственный вариант - ногодрыг. вот своё изящное решение - это правильная колбаса. ведь всё зависит от поставленной задачи. и Вас с новым годом! с уважением (круглый) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HHIMERA 0 30 декабря, 2017 Опубликовано 30 декабря, 2017 · Жалоба всевозможные потуги на захватах и дма = нас всех туда тянет, но увы отличия от ногодрыга минимальные, что нивелирует (ну или почти) весь колхоз и нагромождение... по крайней мере раздувание в эту степь щёк - так и осталось хотелками (у тех кто прямо заявлял что это кашэрно)... Из всех озвученных вариантах - для варианта промышленного (куча датчиков и каждый датчик = свой вход) остаётся одын единственный вариант - ногодрыг. Это просто один вариант вы и знаете... Так бывает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 30 декабря, 2017 Опубликовано 30 декабря, 2017 (изменено) · Жалоба Это просто .. я с удовольствие(на полном серьёзе) послушаю Вас, про ваше виденье решения. Вы кажется декларировали опыт использования ПДП(DMA) для поддержки 1-Wire протокола? с уважением (круглый) Изменено 30 декабря, 2017 пользователем kolobok0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 30 декабря, 2017 Опубликовано 30 декабря, 2017 · Жалоба я с удовольствие(на полном серьёзе) послушаю Вас, про ваше виденье решения. Вы кажется декларировали опыт использования ПДП(DMA) для поддержки 1-Wire протокола?1-wire не делал, а одновременный прием четырех и передачу восьми независимых каналов ARINC429 на stm32f050 реализовывал. Там скорость 100 кбит, если что. В памяти массив, в этот массив пишется желаемая выходная диаграмма. Этот массив по таймеру через ПДП загоняется в выходной регистр порта. Если в порту есть ноги, которые надо дергать независимо - пишем желаемое их состояние в соответствующий бит всех элементов массива, после чего дергаем ногой. Второй канал ПДП по тому же таймеру заносит в кольцевой буфер состояние входного регистра. Заполнили половину буфера - обрабатываем, ПДП в это время заполняет вторую половину буфера. 1-wire можно реализовать по тому же принципу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HHIMERA 0 30 декабря, 2017 Опубликовано 30 декабря, 2017 · Жалоба 1-wire можно реализовать по тому же принципу. Совершенно верно... Там даже все проще чем кажется... при куче вариантов... В простейшем варианте... один массив из двух значений по ЖПИО... другой - времянки слотов... третий - чтение состояния шины.... Заюзав прелоад там все отрабатывается автоматически... Остаётся распарсить принятые данные... Даже если там 16 каналов... это уже не напряжно... Заюзав два эвента на один канал ДМА... можно сэкономить на канале ДМА... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 30 декабря, 2017 Опубликовано 30 декабря, 2017 · Жалоба Сергей Борщ, ...одновременный прием четырех и передачу восьми независимых каналов ARINC429... Коллегам с оборонки (авиация?) отдельный привет :) Собственно говоря, чего тут уже изобретать. Сделал автомат формирования времянки слотов 1-Wire на прерывании по переполнению таймера. Код в прерывании меньше 1мкс, сколько точно не скажу, ибо мерял таймером с шагом 1мкс. Но это уже допустимый вариант. Прерывание имеет бОльший приоритет относительно всех используемых прерываний FreeRTOS, поэтому прерывание не может быть перебито RTOS. В прерывании выдается статичный флаг в низкоприоритетную задачу опроса датчиков. Соответственно на критичных временных интервалах перебития контекста происходить не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 30 декабря, 2017 Опубликовано 30 декабря, 2017 · Жалоба Сергей Борщ, Коллегам с оборонки (авиация?) отдельный привет :) Не, все гораздо приземленнее - любители-строители домашних полноразмерных кабин самолетов для авиасимуляторов. "Оживление" настоящих приборов. Поправил ссылку. Еще одна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 31 декабря, 2017 Опубликовано 31 декабря, 2017 · Жалоба Прерывание имеет бОльший приоритет относительно всех используемых прерываний FreeRTOS, поэтому прерывание не может быть перебито RTOS. В прерывании выдается статичный флаг в низкоприоритетную задачу опроса датчиков. Соответственно на критичных временных интервалах перебития контекста происходить не будет. Не очень понятно что такое "перебитие контекста" и чем оно так страшно? Также не понимаю - зачем FreeRTOS-у использовать какие-то прерывания кроме прерывания SysTick? (PendSV можно не учитывать, так как оно априори должно иметь приоритет ниже любого аппаратного прерывания). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 1 января, 2018 Опубликовано 1 января, 2018 · Жалоба 1-wire не делал, а одновременный прием четырех и передачу восьми независимых каналов ARINC429 на stm32f050 реализовывал. Там скорость 100 кбит, если что. ... Ну в общем аналогичный способ я применяю для изготовления 8ми I2S-интерфейсов на LPC1768. 3Mbps (48к*32 бита * 2 канала) на каждом получается. Причем, BICK (клок битов) приходит снаружи, а не генерируется внутри, это, правда, потребовало некоторых извращений - внешний клок подается на таймер в режиме счета импульсов снаружи, а максимальное значение таймера установлено в 1, вот он и генерирует DMAREQ каждый фронт (или спад, зависит от режима детектора у таймера) внешнего сигнала. CPU load просто смешной. Хотя, конечно, есть нюансы в транспонировании битовой матрицы, чтобы из принятой колбасы битов получить обычные int32. Обработать так один канал 1-wire - это просто как два пальца. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 1 января, 2018 Опубликовано 1 января, 2018 · Жалоба CPU load просто смешной.Кстати, а как вы его меряете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 1 января, 2018 Опубликовано 1 января, 2018 · Жалоба Кстати, а как вы его меряете? Да есть же масса способов. Самый простой - измерить сначала в основном потоке количество богомипсов без обработки периферии, а потом - с обработкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 1 января, 2018 Опубликовано 1 января, 2018 · Жалоба Да есть же масса способов. Самый простой - измерить сначала в основном потоке количество богомипсов без обработки периферии, а потом - с обработкой. Лишь хотел уточнить учитывается загрузка лишь голого ядра или загрузку всего проца с учетом его встроенной периферии :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться