Написал свою Onewire для Codevision
Re: Написал свою Onewire для Codevision
[uquote="veso74",url="/forum/viewtopic.php?p=4494565#p4494565"]Думаю времена минимализма в написании программного кода давно прошли.[/uquote] Вот только утром читал статью о вредном, бесполезном раздутии кода...
- Реклама
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1907
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Написал свою Onewire для Codevision
Меня это тоже "раздражает", но пишете "быстро" код: через 10..30 минут, напр. уже есть рабочий образец (прогр. код и тест. конструкция), которому нужно немного, чтобы он стал "хороший". И не все профессионалы. Все в любительская часть в большинстве случаев.
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Написал свою Onewire для Codevision
[uquote="veso74",url="/forum/viewtopic.php?p=4494576#p4494576"]которому нужно немного, чтобы он стал "хороший".[/uquote]
А вот это не факт. Автор темы как раз об этом и пишет. Библиотечные функции могут оказаться блокирующими и нигде в более-менее серьезных изделиях использоваться не смогут.
А вот это не факт. Автор темы как раз об этом и пишет. Библиотечные функции могут оказаться блокирующими и нигде в более-менее серьезных изделиях использоваться не смогут.
Re: Написал свою Onewire для Codevision
Вот у меня как раз пример не блокирующей функции.)
Re: Написал свою Onewire для Codevision
[uquote="КРАМ",url="/forum/viewtopic.php?p=4494560#p4494560"]А зачем поиск для одного?[/uquote]
Один датчик внутри корпуса на той же линии и все, второй вы уже не подключите без SearchROM
Добавлено after 8 minutes 24 seconds:
[uquote="OKF",url="/forum/viewtopic.php?p=4494667#p4494667"]Вот у меня как раз пример не блокирующей функции.)[/uquote]
Где этот пример? Страницей ранее? Там вообще нет ничего, кусок кода. У одноваре довольно жесткие тайминги как и у любого асинхронного канала. Совсем неблокирующий код там можно сделать только повесив датчики на USART и рулить в прерывании. А это можно сделать далеко не всегда, и занимает две ноги.
Один датчик внутри корпуса на той же линии и все, второй вы уже не подключите без SearchROM
Добавлено after 8 minutes 24 seconds:
[uquote="OKF",url="/forum/viewtopic.php?p=4494667#p4494667"]Вот у меня как раз пример не блокирующей функции.)[/uquote]
Где этот пример? Страницей ранее? Там вообще нет ничего, кусок кода. У одноваре довольно жесткие тайминги как и у любого асинхронного канала. Совсем неблокирующий код там можно сделать только повесив датчики на USART и рулить в прерывании. А это можно сделать далеко не всегда, и занимает две ноги.
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Написал свою Onewire для Codevision
[uquote="AVK",url="/forum/viewtopic.php?p=4494830#p4494830"]второй вы уже не подключите без SearchROM[/uquote]
Шозабред?
При количестве датчиков более одного нужно определить их ID, чтобы начать обмен с каждым из них. Определение ID посредством SearchROM для термометров требует локализации каждого ID в пространстве. Делать это через измерение температуры возможно лишь тогда, когда разница температур очевидна. С другой стороны, автоматически это сделать невозможно, если диапазоны измерений разных датчиков пересекаются.
То есть гораздо проще создать тестовый разъем для датчика, в котором он будет один и в нем будет определен его ID. После чего он может быть включен в общую линию, а его ID в ПО на соответствующую позицию. SearchROM в этой процедуре не пришей-не пристегни - тупой никчемный процесс.
[uquote="AVK",url="/forum/viewtopic.php?p=4494830#p4494830"]Совсем неблокирующий код там можно сделать только повесив датчики на USART[/uquote]
Даладна...
Есть и другие способы. Например тот, который используется в самом UART на приеме.
Впрочем, все зависит от аппаратных ресурсов конкретного чипа.
Шозабред?
При количестве датчиков более одного нужно определить их ID, чтобы начать обмен с каждым из них. Определение ID посредством SearchROM для термометров требует локализации каждого ID в пространстве. Делать это через измерение температуры возможно лишь тогда, когда разница температур очевидна. С другой стороны, автоматически это сделать невозможно, если диапазоны измерений разных датчиков пересекаются.
То есть гораздо проще создать тестовый разъем для датчика, в котором он будет один и в нем будет определен его ID. После чего он может быть включен в общую линию, а его ID в ПО на соответствующую позицию. SearchROM в этой процедуре не пришей-не пристегни - тупой никчемный процесс.
[uquote="AVK",url="/forum/viewtopic.php?p=4494830#p4494830"]Совсем неблокирующий код там можно сделать только повесив датчики на USART[/uquote]
Даладна...
Есть и другие способы. Например тот, который используется в самом UART на приеме.
Впрочем, все зависит от аппаратных ресурсов конкретного чипа.
Re: Написал свою Onewire для Codevision
[uquote="AVK",url="/forum/viewtopic.php?p=4494830#p4494830"]Где этот пример? Страницей ранее? Там вообще нет ничего, кусок кода.[/uquote]
Этот кусок показывает как за один проход выполняется 1 команда к датчику.
Этот кусок показывает как за один проход выполняется 1 команда к датчику.
Re: Написал свою Onewire для Codevision
Этот кусок ничего вообще не показывает. Он бессмысленный без всего остального.
Мой код работает примерно в два раза быстрее родной библиотеки Кодевижена и прерывания блокирует минимально.
Добавлено after 4 minutes 19 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4494838#p4494838"]Есть и другие способы. Например тот, который используется в самом UART на приеме.
Впрочем, все зависит от аппаратных ресурсов конкретного чипа.[/uquote]
Я вам про это и говорю. Вы вообще читаете сообщения?
Мой код работает примерно в два раза быстрее родной библиотеки Кодевижена и прерывания блокирует минимально.
Добавлено after 4 minutes 19 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4494838#p4494838"]Есть и другие способы. Например тот, который используется в самом UART на приеме.
Впрочем, все зависит от аппаратных ресурсов конкретного чипа.[/uquote]
Я вам про это и говорю. Вы вообще читаете сообщения?
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Написал свою Onewire для Codevision
[uquote="AVK",url="/forum/viewtopic.php?p=4494923#p4494923"]Я вам про это и говорю. Вы вообще читаете сообщения?[/uquote]
Как раз все наоборот. Это вы не читаете мои.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4494838#p4494838"][uquote="AVK",url="/forum/viewtopic.php?p=4494830#p4494830"]Совсем неблокирующий код там можно сделать только повесив датчики на USART[/uquote]
Даладна...
Есть и другие способы....[/uquote]
Тема вообще запилена исключительно для чтения своих сообщений автором этой темы.
ЗЫ. Прикольная у вас "неблокирующая" библиотека в которой передатчик 1W построен на delay... (это только то, что я не поленился посмотреть). А вы точно знаете что такое "неблокирующая"?
Или вы полагаете, что только прерывания не стоит блокировать? Впрочем, они у вас тоже блокируются.
Даю на водку.
Не стоит тянуть пины МК за пределы платы - история про SearchROM она как раз про это в вашем случае... Потому не стоит извращаться с КМОП драйвером пина с целью получения однопинового драйвера шины 1W.
Как раз все наоборот. Это вы не читаете мои.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4494838#p4494838"][uquote="AVK",url="/forum/viewtopic.php?p=4494830#p4494830"]Совсем неблокирующий код там можно сделать только повесив датчики на USART[/uquote]
Даладна...
Есть и другие способы....[/uquote]
Тема вообще запилена исключительно для чтения своих сообщений автором этой темы.
ЗЫ. Прикольная у вас "неблокирующая" библиотека в которой передатчик 1W построен на delay... (это только то, что я не поленился посмотреть). А вы точно знаете что такое "неблокирующая"?
Или вы полагаете, что только прерывания не стоит блокировать? Впрочем, они у вас тоже блокируются.
Даю на водку.
- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Написал свою Onewire для Codevision
лучше дай на пиво. от водки у него может сильнее обостриться осеннее обострение...КРАМ писал(а):Даю на водку.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Написал свою Onewire для Codevision
А собственно как сделать работу с асинхронной шиной без delay?
На прерываниях конечно можно. Но вот незадача, прерываний лишних не бывает.
Уважаемы КРАМ поделитесь своей реализацией одноваре без делеев? Внезапно если мы не пользуемся прерываниями это невозможно под AVR. Но вы видимо на новом уровне.
На прерываниях конечно можно. Но вот незадача, прерываний лишних не бывает.
Уважаемы КРАМ поделитесь своей реализацией одноваре без делеев? Внезапно если мы не пользуемся прерываниями это невозможно под AVR. Но вы видимо на новом уровне.
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Написал свою Onewire для Codevision
[uquote="AVK",url="/forum/viewtopic.php?p=4495063#p4495063"]А собственно как сделать работу с асинхронной шиной без delay?[/uquote]
Так же, как работает приемник в UART. На таймере. Время захвата данных от синхронизирующего фронта известно. Причем тут delay?
Кстати, это время имеет приличный допуск. А на передачу допуск вообще ошеломительный - 60...120 мкс для нуля...
Какой еще нахрен delay? Вы вообще о чем?
[uquote="AVK",url="/forum/viewtopic.php?p=4495063#p4495063"]поделитесь своей реализацией одноваре без делеев?[/uquote]
Увы, у меня 1W крайний раз работал на 8-битном ПИКе и код был написан на АСМе примерно 12 лет назад. Такшта никаких "делеев" там нет по определению. Как и нопов со счетчиками циклов.
Так же, как работает приемник в UART. На таймере. Время захвата данных от синхронизирующего фронта известно. Причем тут delay?
Кстати, это время имеет приличный допуск. А на передачу допуск вообще ошеломительный - 60...120 мкс для нуля...
Какой еще нахрен delay? Вы вообще о чем?
[uquote="AVK",url="/forum/viewtopic.php?p=4495063#p4495063"]поделитесь своей реализацией одноваре без делеев?[/uquote]
Увы, у меня 1W крайний раз работал на 8-битном ПИКе и код был написан на АСМе примерно 12 лет назад. Такшта никаких "делеев" там нет по определению. Как и нопов со счетчиками циклов.
- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Написал свою Onewire для Codevision
при работе с этим термометром совсем не обязательно использовать таймер для отмеривания таймингов.
я вполне успешно пользуюсь простыми задержками.
но чтобы выдержать начало тайм-слота, запрещать прерывания нужно.
при чтении запретить прерывания и не позднее 15 мкс прочитать бит, и тут же разрешить прерывания. окончание тайм-слота я отмериваю простой задержкой. и тайм-слот приема может безболезненно быть растянут наступившим прерыванием.
при записи запретить прерывания, выдать бит в порт, и тут же разрешить прерывания. окончание тайм-слота я отмериваю простой задержкой. и тайм-слот передачи может безболезненно быть растянут наступившим прерыванием.
я вполне успешно пользуюсь простыми задержками.
но чтобы выдержать начало тайм-слота, запрещать прерывания нужно.
при чтении запретить прерывания и не позднее 15 мкс прочитать бит, и тут же разрешить прерывания. окончание тайм-слота я отмериваю простой задержкой. и тайм-слот приема может безболезненно быть растянут наступившим прерыванием.
при записи запретить прерывания, выдать бит в порт, и тут же разрешить прерывания. окончание тайм-слота я отмериваю простой задержкой. и тайм-слот передачи может безболезненно быть растянут наступившим прерыванием.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Написал свою Onewire для Codevision
[uquote="Starichok51",url="/forum/viewtopic.php?p=4495084#p4495084"]я вполне успешно пользуюсь простыми задержками.[/uquote]
А кто с этим спорил?
Разговор шел о блокирующем коде и задержка является типичным блокирующим кодом.
Таки да, опасность блокировки зависит от остального кода и для обычного термометра с динамической индикацией вообще по барабану как писать тайминги. Но ведь термометр нужен не только как термометр. И если он часть другого функционала, то не стоит торчать в задержках на нопах.
[uquote="Starichok51",url="/forum/viewtopic.php?p=4495084#p4495084"]тайм-слот приема может безболезненно быть растянут наступившим прерыванием.[/uquote]
С этим трудно не согласиться...
Слейвы на 1W работают без кварцев с таймингами плюс-минус лапоть. Поэтому протокол не требует точных интервалов. А таймер позволяет не точные интервалы формировать, а делать это прозрачно для остального кода. Если канешна эта прозрачность необходима...
А кто с этим спорил?
Разговор шел о блокирующем коде и задержка является типичным блокирующим кодом.
Таки да, опасность блокировки зависит от остального кода и для обычного термометра с динамической индикацией вообще по барабану как писать тайминги. Но ведь термометр нужен не только как термометр. И если он часть другого функционала, то не стоит торчать в задержках на нопах.
[uquote="Starichok51",url="/forum/viewtopic.php?p=4495084#p4495084"]тайм-слот приема может безболезненно быть растянут наступившим прерыванием.[/uquote]
С этим трудно не согласиться...
Слейвы на 1W работают без кварцев с таймингами плюс-минус лапоть. Поэтому протокол не требует точных интервалов. А таймер позволяет не точные интервалы формировать, а делать это прозрачно для остального кода. Если канешна эта прозрачность необходима...
- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Написал свою Onewire для Codevision
а у меня два больших проекта с этими термометрами (и в каждом проекте по два термометра), и простые задержки у меня не мешают работе основного функционала.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Написал свою Onewire для Codevision
[uquote="Starichok51",url="/forum/viewtopic.php?p=4495090#p4495090"]простые задержки у меня не мешают[/uquote]
Ну и замечательно.
Но согласись, что бывает и не так.
Аффтар обсуждал именно опасность возникновения этого "не так". Поэтому и рекламировал свой "малоблокирующий" код.
На поверку оказалось, что никакого отношения к "малоблокируемости" он не имеет.
Мало того, что с задержками на нопах, так еще и прерывания зачем то блокирует...
Ну и замечательно.
Но согласись, что бывает и не так.
Аффтар обсуждал именно опасность возникновения этого "не так". Поэтому и рекламировал свой "малоблокирующий" код.
На поверку оказалось, что никакого отношения к "малоблокируемости" он не имеет.
Мало того, что с задержками на нопах, так еще и прерывания зачем то блокирует...
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1907
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Написал свою Onewire для Codevision
Бы классифицировал использование 1-wire в процентах:
- с задержками/с/без использования прерываний для других целей/: напр. 95%
- с подсчетом времени по таймеру: напр. 4%
- другими специальными средствами: slave 1-wire /с другим МК/: 1 %
- с аппаратной частью: 0%
(DS2482: 1-wire to I2c и др.)
- другое: 0%
Можем переписать числа по своему усмотрению, но они мало что изменит. (Напр. до сих пор мне никогда не приходилось заменять "задержки" на "таймерное сч. время" за DS (за хобби). Но наверное мое употребление: всегда простое).
- с задержками/с/без использования прерываний для других целей/: напр. 95%
- с подсчетом времени по таймеру: напр. 4%
- другими специальными средствами: slave 1-wire /с другим МК/: 1 %
- с аппаратной частью: 0%
- другое: 0%
Можем переписать числа по своему усмотрению, но они мало что изменит. (Напр. до сих пор мне никогда не приходилось заменять "задержки" на "таймерное сч. время" за DS (за хобби). Но наверное мое употребление: всегда простое).
Последний раз редактировалось veso74 Сб окт 28, 2023 22:13:02, всего редактировалось 1 раз.
Re: Написал свою Onewire для Codevision
И вот именно для скорости у меня мастер не держит тайм слот до конца, он ждет когда ведомый опустит шину. Кварца то на ведомом нет. И по факту скорость работы вырастает. На поиск четырех датчиков уходит 13мс.
В любом случае весь критический код вертится в прерываниях, а хоть усрись их приходится запрещать в при работе с шиной.
Малоблокирующий код это код, который не блокирует прерывания внезапно. Ибо если на датчик уходит 3 мс то ты хоть усрись, проц эти 3 мс будет работать с шиной. А вот будут ли блокироваться прерывания в это время очень важно.
В любом случае весь критический код вертится в прерываниях, а хоть усрись их приходится запрещать в при работе с шиной.
Малоблокирующий код это код, который не блокирует прерывания внезапно. Ибо если на датчик уходит 3 мс то ты хоть усрись, проц эти 3 мс будет работать с шиной. А вот будут ли блокироваться прерывания в это время очень важно.
Последний раз редактировалось AVK Сб окт 28, 2023 22:15:34, всего редактировалось 1 раз.
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Написал свою Onewire для Codevision
[uquote="veso74",url="/forum/viewtopic.php?p=4495092#p4495092"]мне никогда не приходилось заменять на таймерное[/uquote]
Если отвлечься от AVR (мы же обсуждаем ПРИНЦИПЫ АЛГОРИТМА, а не платформу), то если я сейчас захочу вставить термометр с 1W в любое из моих серийных изделий, то ни о каких задержках на нопах и блокировок прерываний там и речи быть не может.
Не то, чтобы МК перегружен, но есть очень критические секции исполнения, в которых прерывания требуют сортировки по приоритетам.
Если отвлечься от AVR (мы же обсуждаем ПРИНЦИПЫ АЛГОРИТМА, а не платформу), то если я сейчас захочу вставить термометр с 1W в любое из моих серийных изделий, то ни о каких задержках на нопах и блокировок прерываний там и речи быть не может.
Не то, чтобы МК перегружен, но есть очень критические секции исполнения, в которых прерывания требуют сортировки по приоритетам.
Последний раз редактировалось КРАМ Сб окт 28, 2023 22:17:37, всего редактировалось 1 раз.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1907
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Написал свою Onewire для Codevision
Дал целых 4% на эти случаи
. Ну так ещё можно поговорить и про ATTiny13A, там с таймерами возникнет проблема: куда его дальше использовать
. Поэтому, как и написали: решение: по необходимости.
Последний раз редактировалось veso74 Сб окт 28, 2023 22:18:03, всего редактировалось 2 раза.


