Перейти к содержанию
    

Сергей Борщ

Модератор
  • Постов

    10 908
  • Зарегистрирован

  • Посещение

  • Победитель дней

    31

Сообщения, опубликованные Сергей Борщ


  1. 34 минуты назад, one_eight_seven сказал:

    Даже ссылку ведь дал. Но читать нынче умеют, видимо, не только лишь все.

    Помнится, лет 20 назад The Bat! отсылал примерно такое уведомление о получени письма: "это уведомление не означает, что письмо было прочитано и/или понято адресатом". Последнее, вероятно, относится к вам.

     

    34 минуты назад, one_eight_seven сказал:

    Вот здесь:

    Какое отношение placement new имеет к куче? Это во-первых. Во-вторых - эта фраза об объектах, создаваемых в этой выровненной памяти, но не к самому объекту памяти. Что и подтверждает пример по той же ссылке: объект data[N] типа std::aligned_storage_t<sizeof(T), alignof(T)> является самым обычным членом класса, а не создается на куче, как написали вы. Понимать прочитанное умеют не только лишь все, да.

  2. 2 минуты назад, Arlleex сказал:

    Т.е. где-то должна быть переменная состояния, по которой будет оцениваться "факт инициализированности", и динамически все время проверяться?

    Да. Поэтому я их и не люблю - переменная реально делает работу один раз, а проверяется при каждом доступе.

  3. 16 минут назад, Arlleex сказал:

    Угу. По сути - весь объект, вместо желаемого одного массива.

    Да, только так. Один объект не может быть разделенным в разные места памяти. Или массив создавать отдельно в нужной секции и передавать ссылку на него объекту очереди. Я так делаю с классом хранимых во флеше настроек - отдельно сами настройки во флеше и отдельно класс доступа к ним (и еще отдельный класс их изменения). И уже крнструктор этого класса принимает решение - работать с этими значениями или переписать их значениями по-умолчанию.

  4. 18 минут назад, Arlleex сказал:

    Т.е. любые инициализации (и их наличие и отсутствие) осуществляется несколько позже зануления.

    Хм. не задумывался над этим. Пожалуй, вы правы. То есть все глобальные объекты, если явно не указано иное, помещаются либо в .data, либо в .bss. В .data сразу копируется "образ" начальных значений. .bss обнуляется и потом вызываются конструкторы расположенных в ней объектов (если таковые есть). То есть изначально вы хотите сократить время зануления .bss уменьшив ее размер (или не вы, но кто-то тут такое писал). Следовательно, единственный способ - создать свою секцию вне .bss и явно поместив ваш глобальный объект в нее.

  5. 3 минуты назад, Arlleex сказал:

    Ну так объект класса ведь я создаю глобальным. Соответственно

    Нет. Не соответственно.Если ваш класс не является POD-типом - будет вызван его конструктор, а из него - конструкторы членов. Если же класс является POD-типом - то глобальный объект такого типа будет помещен в секцию .bss и обнулен вместе со всеми остальными переменными глобальным циклом обнуления секции .bss

  6. 2 часа назад, Arlleex сказал:

    Глобальный массив, например, int buf[100]; будет обнулен перед входом в main().

    Глобальный - будет. Член класса не является глобальным и поэтому не будет. Я-то думал - вы в листинг смотрели и там увидели зануление массива...

    По стандарту для члена-массива вызываются конструкторы по-умолчанию каждого члена. Конструктор по-усолчанию для POD-типов не делает ничего, поэтому и член-массив uintXX_t инициализироваться не должен.

    1 час назад, one_eight_seven сказал:

    aligned_storage - это класс, динамический объект, создаётся с помощью new

    Чё???

    1 час назад, one_eight_seven сказал:

    В стандарте дан тривильный пример реализации (https://en.cppreference.com/w/cpp/types/aligned_storage), в нём неинициализированность обеспечивается тем, что место для буфера выделяется на куче.

    Покажите пальцем, где там место на куче выделяется?

  7. 3 часа назад, Arlleex сказал:

    Думал, может чисто языковые средства есть.

    std::aligned_storage не оно?

    Цитата

    Provides the nested type type, which is a trivial standard-layout type suitable for use as uninitialized storage for any object whose size is at most Len and whose alignment requirement is a divisor of Align.

    правда в возможной реализации структура с обычным массивом. Выходит - массивы по-умолчанию не инициализируются.

  8. 3 часа назад, do_not_know_Linux сказал:

    Поэтому я просто написал что не могу сделать так чтобы ТIM1 работал в slave.   И вот спрашиваю что нужно сделать чтобы это получилось.  Я лишь прошу на словах чтобы скзаали что надо включить  и TIM1 и TIM2?

    В документации об этом написано совершенно однозначно: для того, чтобы TIM1 работал как slave для TIM2, надо в TIM1->SMCR.TS записать b'001' и желаемый режим записать в TIM1->SMCR.SMS. При этом TIM2 должен выдавать необходимый сигнал на TRGO. Какой именно сигнал будет выдаваться на TRGO - определяется полем CR2.MMS. Я по-прежнему не понимаю, какие адреса вы пытаетесь менять, поэтому хотел это увидеть.

    А ответ на "что нужно сделать" - прочитать документацию. Всю. Возможно, даже несколько раз.

  9. Разумеется делать свои. Элемент простейший. На его создание, даже если вы этого делать не умеете и придется изучать возможности вашей САПР, уйдет меньше времени, чем на поиск библиотеки неизвестного качества в интернете. Плюс опыт для создания более сложных элементов в будущем. Не будете же вы все время клянчить чужие посадочные места - вам обязательно когда-нибудь понадобится элемент, которого нет ни у кого - и что, отказаться от проекта только потому, что вы не будете уметь создать посадочное место для одного-единственного элемента?

  10. У F103 есть таймера 1 и 8. Оба они имеют счетчик повторений RCR. В сочетании с однократным режимом (One pulse mode),  судя по описанию,  он должен обеспечивать именно то, что требуется. Подробности в документации. Не проверял. 

    И каким боком этот вопрос к стиранию флеша?

  11. На тытрубе на одном из каналов увидел ЛБП от BVP Electronics. На первый взгляд очень достойные. В том видео еще была показана очень полезная для лабораторного источника, на мой взгляд, функция: при нажатии на кнопку отображать пиковый ток. По ссылке даже есть схемы на некоторые модели ЛБП.

  12. 31 минуту назад, Zx80 сказал:

    Но все равно возвращается один байт

    Как он может возвращаться один, если такты для всех байтов генерите вы? Хотите читать 10 байтов - пошлите 10 байтов мусора, таков SPI.

  13. 2 часа назад, Vlad_G сказал:

    Имеем EEPROM, в данном случае 24AA01 (или 24LC01), микрочиповскую. С завода в ней записаны все единицы, других, правда, не встречал

    Ну, например 24AA01E48, 24AA01E64 содержат с завода в первых 6 (8) байтах значение уникального EUI48 (EUI64) и первая половина памяти навсегда вообще заблокирована от записи.

  14. Непонятно такое требование. На стадии компиляции компилятор другие единицы трансляции не видит, а на этапе линковки они уже встроены и наружу не торчат.

  15. Я бы смотрел напряжение на Rdown или на ноге VCC. Если оно при этом остается неизменным - искать проблемы во вторичной обмотке или выходном диоде. Если же тоже падает в ноль - смотреть конденсатор на ноге VCC и резистор-диод перед ним.

  16. 8 минут назад, Arlleex сказал:

    Я думаю, что определение inline func() {} в .c/.cpp-файле может привести к undefined reference, и зависит это от погоды на Марсе.

    Недопонял. Чем такое определение с точки зрения компилятора отличается от определения в заголовочном файле, включенном в этот же .cpp (в сях inline вообще нет)?

  17. 1 час назад, Dec_NN сказал:

    Почему включение кеша данных вызывает мою проблему пока не понимаю. Буду разбираться

    Гляньте сюда. Там собраны основные проблемы с драйверами эзернета из куба.

  18. 4 часа назад, dxp сказал:

    Это то же самое, что определять эту функцию в каждой единице компиляции вручную (требуется строгая идентичность определений).

    Как раз в этом случае - идентичность не требуется. Поскольку функция видна только в одной единице компиляции - кофликта не будет. Но мозг в таком случае программист на отладке сломает - это да.

  19. 52 минуты назад, AlexKeisy сказал:

    Для выдачи команды на дисплей, нужно притянуть ножку D/C (Data/command) к нулю, отправить байт, отпустить ногу, потом отправить четыре байта данных, потом снова притянуть D/C отправить байт отпустить и снова четыре байта...

    Вы уверены, что правильно поняли описание? Обычно контроллер дисплея проверяет ногу D/C в конце приема первого байта и дальше не обращает на нее внимания до первого байта следующей посылки, ибо все байты этой посылки являются командой или данными. Таким образом ее можно держать притянутой к нулю во время всей посылки команды, то есть выставлять в нужное состояние перед выставлением CS в ноль и дальше не трогать до выставления CS в ноль на следующей посылке.

×
×
  • Создать...