jcxz 359 January 14, 2025 Posted January 14, 2025 · Report post 2 часа назад, mantech сказал: Обычный "ваш любимый" ногодрыг, на атмеге было 100кГц, на СТМ и аллвиннерах 400, большой загрузки ЦП нигде не наблюдалось, при работе использовалось переключение контекста, Что за "переключение контекста"? В какие моменты? В пределах одного бита??? или....? Как измеряли загрузку CPU? 2 часа назад, mantech сказал: т.к. интерфейс синхронный, чтобы другим задачам не ожидать завершения транзакции. При реализации I2C=400кГц ногодрыгом на прерываниях нужно 3 прерывания на 1 бит (2 от таймера + 1 от внешнего пина). Итого общая средняя частота прерываний = ~1.2МГц. Простой тест загрузки CPU Cortex-M4 с тактовой = 120МГц и с кодом выполняемым из ОЗУ (без задержек флеша) при такой частоте прерывания даёт в результате загрузку CPU = ~24% ISR написан на асме: THUMB Isr: LDR R2, ?t0 MOVS R1, #1 << 1 LDR R0, [R2, #0A0h] LSLS R0, R0, #31 STR R1, [R2, #10h] NOP BX LR DATA ?t0 DC32 SRCCU_IO(nCCU_SR_intmon) Это - пустой ISR для простого периодического таймерного прерывания. Который только квитирует прерывание таймеру. Очевидно ISR ногодрыжной эмуляции I2C должны будут сложнее - так как там больше действий требуется (кроме квитиривания прерывания, надо пины опросить, установить, бит данных выдвинуть или сохранить, ...). Соответственно - загрузка CPU будет значительно больше. Как минимум - более 30% должна быть при вышеописанных условиях. Кто не верит - может по мануалу пересчитать сколько требуется тактов. 2 часа назад, mantech сказал: Ничего сложного тут нет, если вы в теме... А вы точно в теме? Вы точно I2C реализовывали? Уверены? Можно увидеть тот гениальный код ногодрыжного I2C, который работая на I2C=400кГц и 2 часа назад, mantech сказал: большой загрузки ЦП нигде не наблюдалось ? Очень хочется проверить такие фантастические заявления. Потому как они очень похожи на художественный свист. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 359 January 14, 2025 Posted January 14, 2025 · Report post Ещё один тест. Тот же самый МК (XMC4500), тактовая=120МГц, код исполняется из ОЗУ, ISR периодического прерывания 1.2МГц упрощён до 2-х команд: THUMB Isr: LDR R2, ?t0 BX LR DATA ?t0 DC32 SRCCU_IO(nCCU_SR_intmon) получаем загрузку CPU=~21% Причём - это ещё очень мало, так как по мануалам только вход+выход в ISR на Cortex-M4 должны занимать оклоло 24 тактов. Если без сохранения/восстановления контекста FPU. Не говоря про выполнение самого кода ISR. Ума не приложу - как у mantech получается ногодрыгать I2C "вообще почти не загружая CPU" (как он уверяет)??? Магия прям.... Quote Share this post Link to post Share on other sites More sharing options...
mantech 132 January 14, 2025 Posted January 14, 2025 (edited) · Report post 3 часа назад, jcxz сказал: Что за "переключение контекста"? В какие моменты? В пределах одного бита??? или....? А какая разница? Да хоть в пределах одного такта шины, шина синхронизируется мастером... УАРТ должен точно соблюдать длительность, а тут, как и в SPI это совсем не обязательно... 3 часа назад, jcxz сказал: При реализации I2C=400кГц ногодрыгом на прерываниях Причем тут прерывания? Переключение контекста - это главная функция РТОС, только я РТОС в ее полном виде не использую, а только переключение контекста задач, т.е. одна из задач - передача данных по i2c, вторая допустим программа, которая формирует данные для передачи и т.п. Многозадачность, никаких прерываний в задаче i2c нет, там просто цикл. 3 часа назад, jcxz сказал: А вы точно в теме? Вы точно I2C реализовывали? Уверены? Я точно, а вот вы блуждаете в прерываниях зачем-то)))))))) 2 часа назад, jcxz сказал: как у mantech получается ногодрыгать I2C "вообще почти не загружая CPU" (как он уверяет)??? Магия прям.... И действительно, может магия - это то, чем я занимаюсь)))))))) И да, магия тут - использование особенностей синхронизируемых интерфейсов, где длительность тактов данных и клока может растягиваться... К сожалению УАРТ и 1Wire такого не позволяют, но и там есть свои варианты реализации, но да, уже с использованием прерываний. ЗЫ. Но конечно да, лучше давайте прикажем не использовать "ногодрыг" и прочую софт-периферию, надо ж все по фэншую, аппаратными корками, потом переделывая все, под каждый новый МК, а я делаю так, как мне проще и больше нравится, если это не ухудшает работоспособность устройства... Edited January 14, 2025 by mantech Quote Share this post Link to post Share on other sites More sharing options...
Точка Опоры 93 January 15, 2025 Posted January 15, 2025 (edited) · Report post 7 часов назад, mantech сказал: А какая разница? Да хоть в пределах одного такта шины, шина синхронизируется мастером... Так и запишем: "Мгновенная частота тактового сигнала достигает 400 кГц". P.S. Отклонились от темы. Или это потому, что Т.С. молчит? Edited January 15, 2025 by Точка Опоры Quote Share this post Link to post Share on other sites More sharing options...
mantech 132 January 15, 2025 Posted January 15, 2025 · Report post 1 час назад, Точка Опоры сказал: Так и запишем: "Мгновенная частота тактового сигнала достигает 400 кГц". Согласен. 1 час назад, Точка Опоры сказал: Или это потому, что Т.С. молчит? Он думает)))))))) Quote Share this post Link to post Share on other sites More sharing options...
tonyk_av 77 January 15, 2025 Posted January 15, 2025 · Report post 10 hours ago, mantech said: потом переделывая все, под каждый новый МК Вариант с DS8420B как раз избавляет от переделок, ибо вся работа с 1W сводится к отправке-приёму данных через UART, и код, реализующий работу с протоколом 1W, не_зависит от МК. Ну а в современных МК работа с UART идёт через DMA, что до минимума снижает нагрузку на ЦП, которая не идёт ни в какое сравнение с загрузкой ЦП при ногодрыге. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 359 January 15, 2025 Posted January 15, 2025 · Report post 14 часов назад, mantech сказал: А какая разница? Да хоть в пределах одного такта шины, шина синхронизируется мастером... УАРТ должен точно соблюдать длительность, а тут, как и в SPI это совсем не обязательно... Причем тут прерывания? Переключение контекста - это главная функция РТОС, только я РТОС в ее полном виде не использую, а только переключение контекста задач, т.е. одна из задач - передача данных по i2c Не надо словоблудия, просто ответьте: в какие моменты передачи бита/байта по I2C вы делаете эти "переключения контекста"? И сколько их у вас приходится на один передаваемый/принимаемый бит/байт? 14 часов назад, mantech сказал: И действительно, может магия - это то, чем я занимаюсь)))))))) Пока что из того что мы тут наблюдаем - вы занимаетесь только словоблудием. Я привёл и конкретные примеры кода и результаты измерений и параметры из документации (влияющие на скорость ISR и всяких "переключений контекста"). От вас только пустые разглагольствования и ничем не подтверждённое хвастовство. Будут какие-то доказательства, подтверждающие ваши фантастические заявления? 14 часов назад, mantech сказал: ЗЫ. Но конечно да, лучше давайте прикажем не использовать "ногодрыг" Никто ничего не "приказывает". Просто, как показывает практика - ногодрыгом занимаются обычно те, кто не смог осилить периферию. Очень редко он реально необходим. Не надо натягивать сову на глобус, просто признайтесь, что не сумели осилить I2C в STM32. 6 часов назад, Точка Опоры сказал: P.S. Отклонились от темы. Или это потому, что Т.С. молчит? Видимо тоже ждёт, когда сказочники из этой темы хоть как-то обоснуют свои заявления. Quote Share this post Link to post Share on other sites More sharing options...
mantech 132 January 15, 2025 Posted January 15, 2025 (edited) · Report post 5 часов назад, tonyk_av сказал: ибо вся работа с 1W сводится к отправке-приёму данных через UART, УАРТОв часто не хватает, поэтому еще и ради этой шляпы отводить уарт - слишком дорого, и да, уарт - одно из тех устройств, которые крайне желательно использовать аппаратные. Плюс лишняя МС, я предпочитаю делать так, в схеме МК, флешка (если нет внутренней), питание, аналоговые\цифровые ключи, входная защита и все. Если уж совсем никак, тогда добавляю необходимые МС... 1 час назад, jcxz сказал: в какие моменты передачи бита/байта по I2C вы делаете эти "переключения контекста"? Я ж написал - в любые, это не регламентируется. 1 час назад, jcxz сказал: просто признайтесь, что не сумели осилить I2C в STM32. Я даже и не пытался, ибо было жалко времени и почитав отзывы о его "замечательной" работе даже в мыслях не было. Мало того, писал на пиках, авр, стм, 8051х, аллвиннерах, и ни в одном даже не думал сидеть изучать доки на эти i2c))))))) Edited January 15, 2025 by mantech Quote Share this post Link to post Share on other sites More sharing options...
tonyk_av 77 January 15, 2025 Posted January 15, 2025 · Report post 3 hours ago, mantech said: Плюс лишняя МС Эта микросхема не лишняя, а нужная. Даташит полистайте. Она содержит внутри схемы формирования сигналов для 1W. Или ваши устройства работают исключительно на столе и им хватает диода и резистора для формирования и чтения сигналов 1W? Quote Share this post Link to post Share on other sites More sharing options...
jcxz 359 January 15, 2025 Posted January 15, 2025 · Report post 4 часа назад, mantech сказал: 6 часов назад, jcxz сказал: в какие моменты передачи бита/байта по I2C вы делаете эти "переключения контекста"? Я ж написал - в любые, это не регламентируется. Чем тогда регламентируется скорость I2C в вашем коде? Как задаются временные параметры (длительность сигналов) шины? Если ничего не регламентируется... И на каком основании сделан вывод о том, что ваш код "совсем не нагружает процессор"? Которым вы тут неоднократно хвастались. Пример гениального кода мы увидим наконец-то? 1 час назад, tonyk_av сказал: Эта микросхема не лишняя, а нужная. Даташит полистайте. mantech же уже написал: 4 часа назад, mantech сказал: писал на пиках, авр, стм, 8051х, аллвиннерах, и ни в одном даже не думал сидеть изучать доки Читают доки только дураки. А кто-то сразу пишет гениальный, ничего не нагружающий код и без всяких док. Только код этот почему-то стесняется показать.... 1 час назад, tonyk_av сказал: Или ваши устройства А есть ли они вообще в реальности эти устройства? Quote Share this post Link to post Share on other sites More sharing options...
mantech 132 January 15, 2025 Posted January 15, 2025 · Report post 1 час назад, tonyk_av сказал: Или ваши устройства работают исключительно на столе Мои устройства работают в торговых автоматах и на автомойках, длина провода от 0.5 до 5м Датчики 18В20 и 1990(рфид в смысле с таким выходом). Работают годами... 6 минут назад, jcxz сказал: Чем тогда регламентируется скорость I2C в вашем коде? Задержкой. Макс скорость 400К, минимальная в зав-ти от загрузки других задач, но не менее 300К. 7 минут назад, jcxz сказал: Только код этот почему-то стесняется показать.... Чего его показывать? Софтовый и2с не видали что-ли, как малые дети - покажи фантик, а то не поверю... Ну не верьте))) Quote Share this post Link to post Share on other sites More sharing options...
jcxz 359 January 15, 2025 Posted January 15, 2025 · Report post 2 минуты назад, mantech сказал: Задержкой. Макс скорость 400К, минимальная в зав-ти от загрузки других задач, но не менее 300К. Задержка как реализована? Quote Share this post Link to post Share on other sites More sharing options...
mantech 132 January 15, 2025 Posted January 15, 2025 · Report post 9 минут назад, jcxz сказал: А есть ли они вообще в реальности эти устройства? Да конечно нет, я просто прикалываюсь)))))) Только что, jcxz сказал: Задержка как реализована? Delay_us(); )))))))))) Quote Share this post Link to post Share on other sites More sharing options...
tonyk_av 77 January 17, 2025 Posted January 17, 2025 · Report post On 1/15/2025 at 10:54 PM, mantech said: длина провода от 0.5 То есть на столе. Диод с резистором наше всё. On 1/15/2025 at 10:54 PM, mantech said: до 5м Не сильно изменяет ситуацию, чтобы задумываться о таких параметрах как время нарастания и спада импульса. Мне бы и в голову не пришло делать работу с 1W на STM32F745 через ногодрыг. Quote Share this post Link to post Share on other sites More sharing options...
mantech 132 January 17, 2025 Posted January 17, 2025 · Report post 44 минуты назад, tonyk_av сказал: Не сильно изменяет ситуацию, Так вообще-то считаю, что если нужно выносить датчик более, чем на 5м, то проще позаботится о выносе его вместе с контроллером и связью через RS-485 или эзернет... 45 минут назад, tonyk_av сказал: Мне бы и в голову не пришло делать работу с 1W на STM32F745 через ногодрыг. А я его делал даже на АВРках еще 15 лет назад. Уличные часы, в которых это использовалось еще работают))) Quote Share this post Link to post Share on other sites More sharing options...