Ruslan1
-
Постов
3 026 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Сообщения, опубликованные Ruslan1
-
-
Здравствуйте!
Дано : есть конфигурационный файл, задающий формат генерируемой строки с использованием разных 'ключей'. Во время вывода эти ключи подменяются конкретными величинами. Количество ключей в строке может быть разное.
Например:конфигурация
String1 = "\dat \time, \SNum, V1=\Val1, V2=\Val2"
превращается в выводимую строку
"2021-04-01 00:22:15, 103567, V1=17.2, V2=0.4"
Сейчас это делается парсингом строки конфигурации онлайн во время каждой печати строки, символ-за символом, с заменой встреченных ключей на из значения. Но это реально долго (у меня десятки ключей). Хочу ускорить и не делать парсинг каждый раз. Идеально было бы однажды пропарсить конфигурационную строку и создать что-то, что можно просто вызывать каждый раз, когда эту строку нужно напечатать. Для данного случая, например это будет:
sprintf (txtOut, "%s_%s, %06d, V1=%.1f, V2=%.1f", date, time, SERNUM, Val1, Val2);
но как это сделать? Нужно решить задачи:
1) создать строку формата (в примере это ["%s_%s, %06d, V1=%.1f, V2=%.1f"]) - это самое простое, это я понимаю.
2) создать строку аргументов (в примере это [date, time, SERNUM, Val1, Val2]) - не представляю как это сделать. Ну, могу создать массив указателей на нужные величины, но как это использовать?
3) запустить это как sprintf() - подозреваю, что если будет ответ на предыдущий вопрос, то этот уже просто решается.
Вроде бы подходит vsprintf() и va_list ?
Если я правильно понял, то для vsprintf() можно однажды создать список параметров va_list c указателями на расположение нужных мне величин в памяти, и дальше просто вызывать vsprintf() столько раз сколько нужно? Так?
-
Никаких проблем. Смотрите на параметры шлейфа/контакта, и полученное теоретическое количество необходимых контактов умножаете на [зависит от доверия к производителю, но не менее чем на 2].
Я для токов примерно 1 А/12V использую в параллель 4 провода для питания (ну и как минимум столько же для GND). Длина 10 см.
Для долговременного использования еще очень важно покрытие, агрессивность среды и вибрация. По моему опыту: со временем может увеличиться сопротивление между ножом разъема и проткнутым шлейфом. Но видел только в слаботочке, как раз токовые нагруженные соединения работают стабильно.
-
26 minutes ago, Eddy_Em said:
А научные статьи, отчеты и т.п. вы не пишете что ли?
Вы еще скажите, что не нужно тратить время на изучение десятипальцевой слепой печати!
Жесть, до чего люди нынче пошли глупые…
А что, от скорости набора текста хоть как-то может зависеть скорость написания программы или скорость написания научной статьи?
-
9 minutes ago, Entomo said:
У объектов микромира есть свойство -.....
Как же хорошо на душе что есть еще люди, этим занимающиеся.
Я без сарказма, только с завистью.
Удачи вам, не утонувшие в нашем сером меркантильном потребительском бытии!!
-
11 hours ago, Eddy_Em said:
Почему-то последнее время я не встречал программистов на фортране, хотя фортран намного более полезный язык, нежели паскаль (и очень много математических библиотек на нем было написано, пока их не переписали на С — те же slalib, SOFA, ATLAS/BLAS и т.п.).
А у меня первым языком Фортран-4 был, на ЕС ЭВМ (PL/1 еще можно было применять, но посоветовали Фортран). Но последнего программера, реально пишущего на Фортране, я лет 10 назад видел. Но это не значит что их нет.
Вспомнился старый анекдот, даже в сети его нашел:
QuoteНекий программист-коболист в поте лица трудился над пресловутой проблемой 2000 года. Он чинил программы во многих фирмах и зашибал приличные бабки. Но по мере приближения роковой даты его все больше охватывал ужас: что будет со всеми этими программами и с ним самим? Наконец он решил заморозиться и проспать в анабиозе до февраля 2000 года, а там, глядишь, вся свистопляска и уляжется...
... Он проснулся в странном незнакомом помещении, вокруг ликовали люди: "Очнулся, очнулся!".
- Сейчас с вами будет говорить президент Земного Шара.
На огромном стереоскопическом экране возник человек, весьма похожий на Билла Гейтса.
- Видите ли, программа вашей камеры при переходе к 2000 году сработала неправильно, и вы проспали почти 8000 лет. Но вы не волнуйтесь. Наша жизнь прекрасна. Мы достигли огромных успехов в науке и технологии. Мы покорили время и пространство. Мы...
- Но почему вы меня разморозили?
- Понимаете, приближается 10000 год, а в вашем досье указано, что вы знаете КОБОЛ... -
Ну так классика жанра:
0. Отладчиком увидеть что именно приехало в микроконтроллер, на этом этапе можно спланировать что копать дальше.
1. Убедиться что сигнал физически ушел с разъема компьютера: Подключить подслушку (терминал на прием, или логический анализатор), ну и осциллограф для тяжелых случаев.
Если не выводится физически- может потому что хардверное управление портом включено (hardware flow control). Ну или таки порт занят и не отпущен другим софтом.
-
On 12/23/2020 at 4:12 PM, Самурай said:
Т.е. -150дБ проходят как некий "Spurious free floor", термин крайне загадочный, гуглом идентифицируемый исключительно только в контексте именно анализаторов сигналов вибраций:) Можно предположить, что это самый обычный "Noise Floor", только чуть более вычурно переиначенный:)))
Тоже подозреваю что это и есть какой-то "Noise Floor", цифры похожи на NLNM (New Low Noise Model) по Петерсону, используемые USGS. На эту модель равняются, когда смотрят диджитайзеры для сейсмики.
(ниже картинка с реальными шумами из одного старого доклада USGS).
-
вот прислали приглашение на это:
https://www.embedded-world.de/
Я так понял, в этом году там пиво пить не будут. Ну, разве что виртуальное завезут по дешевке....
-
А что, есть разница сколько центов МК стоит, 40 или 70 ???
На фоне стоимости работы это вообще разговор ни о чем. Подозреваю, что за время обсуждения ТС уже потратил времени на сумму, превышающую любую теоретически достижимую экономию от оптимального выбора. А если всех читателей и их время посчитать- то можно и планку стоимости до пары долларов поднять :)
Просто нужно выбрать известный МК из дешевых, сделать и забыть (так как задача простая). И идти дальше. На простых задачах и доходы мизерные, обсуждение дороже стоит. Под "известный" я имею в виду не только среду сам камень, но и всю логистику. Часто сильно выгоднее делать на уже используемом неоптимальном, чем на новом супероптимальном, но неизвестном.
-
Левый какой-то даташит. Разве что есть дополнительные документы (appNote, EVboard etc.) где это дополнительно описано, но я ничего не нашел для этого семейства.
Никто кроме производителя не ответит на Ваши вопросы. И испытания могут только подтвердить, если так делать нельзя. А вот если испытания покажут что все окей- так это верно только для тестируемых образцов. Так что не нужны испытания, они не помогут вам перейти на малую емкость.
Так что вариантов всего два:
1. Оставить как есть (работает по даташиту- не трогай).
2. Спросить у производителя. Но мало ли кто и чего ответит: я бы не особо доверял, разве что в связи с Вашим вопросом они новую ревизию даташита выпустят, и вот ему уже можно доверять.
Я думаю, путь (1) является самым простым, если нет особых причин что-то менять.
Ну и 10 мкф на входе- не так уж и много, тем более если большое выходное сопротивление источника и еще провода.
-
вдогонку, из личного опыта с 5-вольтовыми дисплеями:
1. это напряжение очень индивидуально, и иногда меняется в следующей партии дисплеев.
2. Может быть необходимо изменить это напряжение при изменении температуры окружающей среды.
3. диапазон нужных напряжений очень узок и обычно близок к 0.
4. это напряжение может быть как отрицательным, так и положительным относительно VSS,
Так что делаю инвертор на пине микроконтроллера (выход таймера), а напряжение регулирую изменением частоты сигнала и ШИМ. что-то вроде схемы, приведенной ниже.
-
25 minutes ago, gerber said:
Можно пойти ещё дальше, в этой же структуре хранить указатель на функции, которые с ней работают.
Ещё немного, и C++ заново изобретем.
Кстати да, и указатели на функции обработки тоже часто храню в структурах. Получается быстро работающий код, в котором все "экраны запихивания в структуры" делаются однажды на этапе инициализации.
К своему стыду, так и не перешел к использованию С++ как языка с его идеологией. Сначала это были объективные причины, а теперь просто нет желания что-то менять в этой жизни, не вижу профита от таких потрясений. Наверное пенсия скоро- не хотят нейроны на новые орбиты выходить.
-
16 hours ago, Сергей Борщ said:
Ага. Два экрана запихивания в структуру, за которыми теряется собственно вызов функции.
А что, еще кто-то хранит много взаимосвзязанных (используемых вместе) данных не в структурах?
Если данные связаны между собой (например, массив и указатели записи-чтения в нем) - то они и до вызова функции храняться всегда в структуре, а не как отдельные переменные. Компилятору все равно, работать с wrpnt и buf[] или с transmit.wrpnt и transmit.buf[].
А если данные несвязаны и поэтому не собраны в структуру- то нужно подумать, почему они в одну функцию передаются, может нужно разбить функцию на несколько? Да и не проблема передать в функцию два или пять указателей на разные используемые структуры, если уж нужно. Но если эти пять структур используются вместе более одного раза- я бы собрал указатели на них в одну новую структуру :)
-
Если у кого-то много параметров передавать нужно- то можно и про стуктуры подумать.
Очень удобно и универсально. И в функцию легко передавать(указатель), и в очередь многозадачки легко засовывать (хоть целиком, хоть только указатель на). Еще и отлаживать просто, и модифицировать такую программу одно удовольствие. Ну и очень понятно выглядит в исходниках.
-
On 11/29/2020 at 3:26 AM, jcxz said:
Хмммм.... чем-то фидошным пахнуло... если склероз не изменяет...
Ага. оно, родимое. :)
On 11/29/2020 at 4:01 AM, MrBearManul said:Хайп тут не при чём) Есть программы, которые без ассемблера написать невозможно: переключатели задач в вытесняющих операционных системах, использование команд для параллельных вычислений и т.п.
Это не "программы", а маленькие кусочки кода. Это не значит, что такая программа "написана на ассемблере".
On 11/29/2020 at 9:36 AM, Мур said:Ха!.. Так этож он меня и подсадил на STM8! С ним на связи.
Я против Си ничего не имею против, в отличие от Шепелева. А вот С++ ,именно о нем был разговор, тут не к месту!
Ух ты, ну прямо живая история :)
Извините, а может быть пора уходить от STM8, особенно если хочется большого? Все-таки время стоит гораздо больше, чем копеечная экономия в железе. Выбирайте камень, в котором желаемый Вами язык комфортно реализован- и вперед с песнями! Нужно как-то развиваться, а не тратить время жизни на попытку героически сэкономить два доллара, памятник за это на рабочем месте не поставят.
Если про STM8, то С++ тут все-таки чересчур, а вот стандартный Си- уж точно летать нормально будет.
-
4 hours ago, Мур said:
Речь о STM8, которые имеют серьёзные ограничения по ресурсу (адресное пространство , объем ОЗУ) и там не разгуляться...
...
Тут речь о производительности программиста...
Вы, вероятно, шутите? Я посмотрел STM8- это начиная от 1 килобайт RAM, какие там могут быть проблемы с Си? У меня на PIC18F432 с полкило RAM очень накрученные программы крутились на Си.
И про производительность программиста на ассемблере- это вообще мимо. При применении ассемблера производительность программиста самая низкая из всех возможных вариантов, со скоростью написания равнозначной программы на Си невозможно сравнивать. Я уже не говорю о стоимости сопровождения и модификации кода в будущем.
P.S. Я более десятка лет писал на асме, а теперь уже даже дольше пишу на Си - и все еще не вижу у ассемблера никаких плюсов (если мы говорим о ремесле, а не о выкрутасах "ради хайпа").
PPS. Харьков... Вы Шепелева случайно не знаете? вроде оттуда же, и был тож ярым адептом ассемблера, в противовес Торресу с Орловым. но было это давно.
-
36 minutes ago, Smoky said:
По совету бывшего коллеги приобрёл генератор FY6800-60M для домашней "лаборатории". После опробования без колебаний избавился от генераторов советского производства Г3-111 и Г4-116. Правда среди местных желающих приобрести их не нашлось, пришлось разобрать и сдать деталями в скупку, что окупило большую часть стоимости нового генератора. Сделал перевод руководства на русский язык, выкладываю для желающих ознакомиться.
Интересная штука. на Алиэкспрессе вижу от FY6800-20M до даже FY6800-100M. Интересно, у них у всех одинаковый DDS, или у 100-мегагерцового что-то другое, чем у 20-мегагерцового?
Сам давно пользуюсь чем-то подобным (дешевый DDS) , но с текстовым дисплейчиком: тынц! Очень нравится но, думаю, упомянутый тут уж точно получше будет.
Но вот если вопрошающему с поверкой и Госреестром- то тогда другая песня.
P.S. Г4-116 вроде до 300 MHz? Я бы не выкидывал, но отложил подальше, на черный день.
-
15 hours ago, r2axz said:...- поддержка нестандартных скоростей (тестировал до 921600);...Выходные уровни совместимы с TTL 3.3 и 5 вольт. Все входы кроме UART2 RX и CTS толерантны к 5 вольтам.
по процитированному выше:
- И что, все три порта в полном дуплексе успевают на 921600 транслировать потоки, без использования flow control?
- TTL уровни в многопортовке не очень интересны. Обычно много портов используется со стандартными уровнями интерфейса.
А в-общем, интересно, но непонятно как использовать :) Как учебный материал- отличная тема.
Для себя лично вижу применение- добавить RS-232/485/422 драйвера, может даже с гальванической развязкой, и тогда будет хорошая штучка. Коробочка такая с USB хвостом и тремя DB9 разъемами.
-
Мда. не хотел бы я такой припаивать вручную.
-
1 minute ago, CADiLO said:
Это не просто пады GND. Это еще и теплоотвод чипсета.
Не запаяв их на достаточный полигон можно нарваться на перегрев чипа со всеми вытекающими последствиями...
Ага, уже дошло. Вот что значит невнимательно относится к версии документации и вообще.
Конечно они должны быть в футпринте.
Все-таки приятно иметь дело с адекватными производителями печатных плат- это он меня спросил почему футпринт странный. Иначе бы сидел я над этими собранными прототипами с неполным футпринтом и ловил непонятности в работе. Конечно, списал бы все на кривизну модема :)
-
----------------------------------
Update#2
Упс.
Кажется я напортачил.
Дилер мне совсем другой документ присылал: SIM7600G(-H)_SIM7600NA(-H)_Hardware Design_V1.03 , 2020-05-09
И в нем все пады есть.
-
В даташите на модуль SIM7600 я вижу это:
Если я смотрю картинку в Интернете, то я вижу много площадок на "пузе" модуля:
Если я начинаю гуглить "SIM7600 footprint", то вижу много такого как ниже:
Отсюда вопросы:
На это обращать внимание или просто закрыть глаза, так как все равно маска, и все равно что там у меня под маской?
Если обращать внимание, то сразу куча вопросов про пады и про разводку под модемом.
Сейчас у меня в прототипе как на картинке ниже. Производитель плат спросил, валидный ли футпринт, потому что он тоже увидел много падов на картинке в интернете. Вот я и озадачился опять проверить. Если пины существуют, а переходные иногда открывают из-под маски, то может неприятно получится. Тогда нужно обязательно закрыть переходные отверстия маской, чтоб не было контакта с этими падами на пузе модуля.
---------------------------------------------------------------
Update:
в старом даташите приведен вот такой футпринт. Получается, Симком изменил это и сейчас (в новой редакции) уже не имеет открытых падов?
Старый документ (с падами): SIM7600G_SIM7600G-H_Hardware Design _V1.00 , 2019-3-29
Новый документ (без падов): SIM7600 Series _Hardware Design _V1.05, 2019-12-03
Исправленному верить?
Может кто-то, у кого оно есть живьем, посмотреть, что там на самом деле: есть эти пады или нет? У меня есть один, но он в EVB впаян, не распаивать же ради этого...
-
1 hour ago, CADiLO said:
Пятивольтовые становятся нормально туда
https://www.onsemi.com/pub/Collateral/ESD8472-D.PDF
Или поиск по RF ESD protection.
Ecть также у ST, Qorvo, Skyworksinc, TaiwanSemi.....
Правда у большинства с 0.1pF это 0201 корпуса.
Отлично, утащил себе в папку с доками по симкому.
Опять спасибо! :)
-
Большое спасибо за подтверждение!
Ну, значит, оставлю 0402.
Но опять же: рекомендованные в документации Симкома LXES15AAA1-153 (TVS 0402) уже имеют статус Obsolete, доступны для заказа до осени 2021. Сейчас, конечно, их и поставлю, но в будущем придется думать. Кстати, в 0402 тоже не нашел других на замену (TVS 4V), но может плохо искал.
sprintf() с динамически созданным списком печатаемых значений
в Программирование
Опубликовано · Пожаловаться
18.6 миллисекунды на строку. Но когда нужно сформировать тысячу-другую строк, набегает много.
Время зависит от многих параметров, в основном- какой длины строка парсится и сколько ключей возможны: получается, что встретив новый ключ в строке, я его сравниваю с базой, применяя strstr(). То есть если у меня база из сейчас 120 ключей, то для каждого встреченного ключа это от одного до 120 вызовов strstr() . Можно оптимизировать сам метод, но лучше уйти от бесконечного парсинга.
И меня не столько парсинг строки формата волнует во время sprintf(), сколько этот вот парсинг ключей для списка параметров, который и съедает все время.
А формат и строка параметров у меня постоянные до следующего выключения, то есть создав один раз списки, надеюсь что vsprintf с ними быстрее будет работать чем я с исходными текстовыми ключами.