romanetz
74HC02?
romanetz
Leonid
Нет, я свой пол определяю как ТТЛ спаренные 4-ИЛИ-НЕ элементы, поверхностного монтажа.
Ну или так, я вообще думаю что я z80)) видишь ничего страшного, главное это принять и признать))
SetPf
74HC02?
Это было оскорбление и неуважнеие к небинарным личностям! 74HCT4002!
Slava
Коллеги, у меня два теоретических вопроса. Какой из вариантов: 1. жрет меньше памяти 2. выполняется быстрее
SetPf
Коллеги, у меня два теоретических вопроса. Какой из вариантов: 1. жрет меньше памяти 2. выполняется быстрее
Ну оно во первых почти не влияет, по сравнению с основным действом. Во вторых скорее всего в один и тот же код скомпилируется в таком простом случае.
SetPf
Тип ни один компилятор в здравом уме не будет ее по значению в функцию пихать.
SetPf
PS я не беру во внимание, что строка ++ая сама по себе указатель и веселую обертку представляет над памятью в куче.
SetPf
Если бы вы в теории таки передали бы ее по значению каким то образом. То конечно этот вариант был безумно медленнее
SetPf
PPS такое лучше в С++ конфе, там люди более правильно задвинут.
Ivan
Коллеги, у меня два теоретических вопроса. Какой из вариантов: 1. жрет меньше памяти 2. выполняется быстрее
Компилятор сам эти оптимизации сделает. Глянь просто ассемблерный код
Slava
& * сам не понимаю, ссылки / указатели, попытался посмотреть уроки на ютубе, ни один гад не говорит нах они нужны
Void
Строка что это ? Массив. имя массива это что? Указатель на первый элемент массива. Так получается вы написали одно и тоже по разному.
Void
Обработка строк: стандартная библиотека string.h https://prog-cpp.ru/c-string/
Void
И я не совсем уверен, но для 2к текста надо аллокацию с обработкой результата.
SetPf
А причем тут С строка, если у него С++ код?
Void
А причем тут С строка, если у него С++ код?
- А... - точно!!!! Это в корне меняет дело :))))
Arhiopteryx
Коллеги, у меня два теоретических вопроса. Какой из вариантов: 1. жрет меньше памяти 2. выполняется быстрее
Ну в данном случае во втором примере происходит передача в функцию значения(строки), то есть создаеться новая локальная переменная, которая будет кушать больше памяти и поэтому из-за этих телодвижений выполнение проги будет дольше. В данном случае этого конечно не заметить, но все же
Arhiopteryx
По указателям и адресам могу подробнее рассказать в лс
Arhiopteryx
хотя и тут могу
Arhiopteryx
& * сам не понимаю, ссылки / указатели, попытался посмотреть уроки на ютубе, ни один гад не говорит нах они нужны
В первом примере мы в функцию передаем не саму переменную (строку текста), а лишь её адрес в памяти. Адрес начала массива. Для этого при передаче адреса и используеться знак &. Но нам нужно как-то работать с этим адресом, потому что если просто вывести значение переменной, то мы по сути выведем её адрес в памяти, и увидим что-то типа "0x7ffd8d5fe92c". Для того, чтобы прочитать значение этого адреса как раз и используеться указатель (символ *). Это позволяет хранить 1 ячейку памяти массива и работать с ним
Arhiopteryx
Так же при передаче через адрес при изменении локальной переменной в функции, изменяеться ещё и значение той переменной, которую передавали(в вашем случае переменная в теле setup()). Поэтому если не собираемся изменять это значение в функции, а только прочитать его (или вывести), нужно дописать const, что будет запрещать изменение этой переменной. Таким образом происходит экономия памяти и времени, что незаменимо, когда её мало (например при работе с attiny13/85).
Arhiopteryx
void Serialprint(const String *txt )
SetPf
Если уж на то пошло, правильно - по ссылке.
Arhiopteryx
SetPf
Насколько мне известно - уже давно не надо для микрооптимизаций писать консты. Все это анализируется компилятором и генерируется код в зависимости от контекста (изменяется строка внутри или же нет) Для чего действительно нужно писать консты у всего подряд - так, для безопасности. Вообще все это анахронизм, оптимизация необходима тогда когда она явно необходима. Но я еще раз советую автору для наиболее верного и обоснованного ответа таки с таким в С++ кофну. Этот простой вопрос в силу языка имеет гору подводных камней, на которые мне - стремно отвечать.
Slava
Я вас услышал, спасибо, для чистоты эксперимента я попробую сделать вариант свого говнокода ссылками/указателями, к счастью есть фукнция поиска-замены в любом редакторе. О результатах тестировения сообщу.
Anton
1 правильнее вариант
спорно. в современном с++ есть такая штука — мув конструктор: https://habr.com/ru/post/174019/
Anton
если коротко, то мув конструктор позволяет передавать обекты в функцию или возвращать из функции "по значению", но при этом перемещаются указатели на данные между "объектам", что владелец данных всегда остаётся только один и не происходит копирования данных
Anton
синглтон — другой паттерн
Ivan
Я вас услышал, спасибо, для чистоты эксперимента я попробую сделать вариант свого говнокода ссылками/указателями, к счастью есть фукнция поиска-замены в любом редакторе. О результатах тестировения сообщу.
Нет смысла, компилятор многие вещи оптимизирует. Указатели/ссылки нужны, когда вы работаете с функциями и чтобы не передавать КОПИЮ массива, вы отдаете ему ссылку на память и работаете с ней. Но надеюсь что компиляторы научили распознавать это и не писать копию в память, когда a = f(a)
Ivan
Конструктора копирования?) Это как?
Anton
в приведённой картинке был объект строки
Anton
про нативные массивы я ничего не говорил
Ivan
У вас либо есть integer a[10000]; Тогда вы можете либо: f(a) либо: f(&a) Я не знаю научили ли компиляторы решать (вдруг -О3 уже умеет) проблему передачу ссылки в кейсе a = f(a), но обычно в функции создается копия массива. Никаких конструкторов копирования в природе не существует) Либо вы знаете чего-то, чего не знаю и буду признателен за ссылку на что же такое конструкторы копирования
Ivan
в приведённой картинке был объект строки
Строка это массив символов, тот же нативный массив, просто обернут и избавляет людей от боли в пятой точке
Anton
Строка это массив символов, тот же нативный массив, просто обернут и избавляет людей от боли в пятой точке
"обёрнутый массив" представляет собой объект определённого класса, в даннмо случае, строки. с++ для каждого класса по умолчанию делает конструкторы копирования и перемещания, операторы присваивания и перемещения, деструктор.
Ivan
Да, все так говорите
Anton
вообще, странно говорить о строке, как о массиве символов на языке Си (без ++). мы же давно уже не пользуемся однобайтовой koi8-r или cp1251
Ivan
Прошу прощения тогда, потому что я уже не изучал с и кресты с 2016 года, пересел на пайтон и другие более высокоуровневые яп. Забыл большинство терминов
Anton
я, кстати, давно не сталкивался с современными строками на Си, больше по другим ЯП был... wchar_t мне как-то не понятен, он какие кодепоинты то содержит?
Anton
Прошу прощения тогда, потому что я уже не изучал с и кресты с 2016 года, пересел на пайтон и другие более высокоуровневые яп. Забыл большинство терминов
да я тоже только время от времени к С/++ возвращаюсь, но ещё не забыл что о них знал. сейчас вот снова "молодость вспоминаю" ради хобби
Anton
wchar_t - type for wide character representation (see wide strings). Required to be large enough to represent any supported character code point (32 bits on systems that support Unicode. A notable exception is Windows, where wchar_t is 16 bits and holds UTF-16 code units)
Anton
какое-то определение за гранью добра
Sid
Что не так
Anton
мой вопрос касается, к примеру, работы со шрифтами. если я хочу выводить русский текст, мне нужны соответственные кодепоинты. ну, допустим, я беру utf-32, получается, мне надо описать глифы для этих кодепоинтов, а при выводе текста переводить из uf8 в utf32 каждый символ и искать каждый глиф по массиву.... ну такое себе...
Sid
Тулкиту
Anton
но если у меня wchar_t, то я даже не знаю что за кодепоинты у меня есть
Anton
то ли они utf-32, то ли utf-16
Sid
Что поделать, боль кодовых страниц жива просто спрятана от простых смертных
Anton
ну вот о том моя печаль
Sid
то ли они utf-32, то ли utf-16
Там даже в utf не все так хорошо если капнуть
Anton
Там даже в utf не все так хорошо если капнуть
если "капнуть", то может быть и хорошо... :) но если копнуть, то там нормально
Anton
когда битность определена
Anton
с другой стороны, 32 бита на каждый символ тоже так себе, utf8 начинает иметь смысл даже для хранения текста, но кодепоинты из него доставать тоже надо, которые могли бы быть напрямую отражены в ютф-16 или 32
Null
https://hackaday.com/2021/02/18/laser-galvos-and-an-esp32-recreate-old-school-asteroids/
Вадим
Esp32 модуль. Подскажите схему как распаять на прошивку, перезагрузку. Схему не могу подыскать. Типа как по есп8266 есть.
Вадим
Вадим
Типа такого 👆, только для есп32
Вадим
HTB1CsqidRGE3KVjSZFhq6AkaFXaL.jpg_640x640Q90.jpg_.webp (640×640)
Владимир
Типа такого 👆, только для есп32
На сколько я нашел информацию, нужно только GPIO0 подтянуть к + 3,3, и EN также
Владимир
вроде больше ничего не надо
Вадим
А ресет как организовать?
Dmitriy
Две кнопки: ресет и гпо0, зажимаете гпо0 и перегружаете решетом, потом отпускаете обе, мк в режим загрузки перегружается, после залития прошивки сново перегружаете Неметом
Dmitriy
Ресетом
Boris68
Доброго утра, есть активные пользователи приложения VIRTUINO, как инвертировать кнопки/переключатели для управления(включения) реле низким уровнем?
Void
1 правильнее вариант
:) первый вариант передает указатель. Второй ссылку. Тип string позволяет работать с строкой как с массивом.