-
Постов
10 908 -
Зарегистрирован
-
Посещение
-
Победитель дней
31
Сообщения, опубликованные Сергей Борщ
-
-
2 минуты назад, Arlleex сказал:
Т.е. где-то должна быть переменная состояния, по которой будет оцениваться "факт инициализированности", и динамически все время проверяться?
Да. Поэтому я их и не люблю - переменная реально делает работу один раз, а проверяется при каждом доступе.
-
16 минут назад, Arlleex сказал:
Угу. По сути - весь объект, вместо желаемого одного массива.
Да, только так. Один объект не может быть разделенным в разные места памяти. Или массив создавать отдельно в нужной секции и передавать ссылку на него объекту очереди. Я так делаю с классом хранимых во флеше настроек - отдельно сами настройки во флеше и отдельно класс доступа к ним (и еще отдельный класс их изменения). И уже крнструктор этого класса принимает решение - работать с этими значениями или переписать их значениями по-умолчанию.
-
18 минут назад, Arlleex сказал:
Т.е. любые инициализации (и их наличие и отсутствие) осуществляется несколько позже зануления.
Хм. не задумывался над этим. Пожалуй, вы правы. То есть все глобальные объекты, если явно не указано иное, помещаются либо в .data, либо в .bss. В .data сразу копируется "образ" начальных значений. .bss обнуляется и потом вызываются конструкторы расположенных в ней объектов (если таковые есть). То есть изначально вы хотите сократить время зануления .bss уменьшив ее размер (или не вы, но кто-то тут такое писал). Следовательно, единственный способ - создать свою секцию вне .bss и явно поместив ваш глобальный объект в нее.
-
3 минуты назад, Arlleex сказал:
Ну так объект класса ведь я создаю глобальным. Соответственно
Нет. Не соответственно.Если ваш класс не является POD-типом - будет вызван его конструктор, а из него - конструкторы членов. Если же класс является POD-типом - то глобальный объект такого типа будет помещен в секцию .bss и обнулен вместе со всеми остальными переменными глобальным циклом обнуления секции .bss
-
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), в нём неинициализированность обеспечивается тем, что место для буфера выделяется на куче.
Покажите пальцем, где там место на куче выделяется?
-
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.
правда в возможной реализации структура с обычным массивом. Выходит - массивы по-умолчанию не инициализируются.
-
-
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. Я по-прежнему не понимаю, какие адреса вы пытаетесь менять, поэтому хотел это увидеть.
А ответ на "что нужно сделать" - прочитать документацию. Всю. Возможно, даже несколько раз.
-
57 минут назад, do_not_know_Linux сказал:
меняю просто адреса и хочу получить чтобы TIM1 был в режиме Slave а ТIM2 в режиме master и не работает
Покажите, что именно и на что вы меняете.
-
6 минут назад, do_not_know_Linux сказал:
В чем может быть дело? ошибок в коде нет
Чудес тоже не бывает, значит - ошибки в коде есть.
-
Разумеется делать свои. Элемент простейший. На его создание, даже если вы этого делать не умеете и придется изучать возможности вашей САПР, уйдет меньше времени, чем на поиск библиотеки неизвестного качества в интернете. Плюс опыт для создания более сложных элементов в будущем. Не будете же вы все время клянчить чужие посадочные места - вам обязательно когда-нибудь понадобится элемент, которого нет ни у кого - и что, отказаться от проекта только потому, что вы не будете уметь создать посадочное место для одного-единственного элемента?
-
У F103 есть таймера 1 и 8. Оба они имеют счетчик повторений RCR. В сочетании с однократным режимом (One pulse mode), судя по описанию, он должен обеспечивать именно то, что требуется. Подробности в документации. Не проверял.
И каким боком этот вопрос к стиранию флеша?
-
32 минуты назад, destroit сказал:
Модератор. Ссылки удалил, они с вирусом.
Ох уж этот ваш виндовс - своей тени, небось, боится.
Вот те фотки:
-
На тытрубе на одном из каналов увидел ЛБП от BVP Electronics. На первый взгляд очень достойные. В том видео еще была показана очень полезная для лабораторного источника, на мой взгляд, функция: при нажатии на кнопку отображать пиковый ток. По ссылке даже есть схемы на некоторые модели ЛБП.
-
Тяжело телепатически определить тип вашего контроллера, но в тех, с которыми я работал, уменьшался регистр размера пересылаемого блока.
-
31 минуту назад, Zx80 сказал:
Но все равно возвращается один байт
Как он может возвращаться один, если такты для всех байтов генерите вы? Хотите читать 10 байтов - пошлите 10 байтов мусора, таков SPI.
-
4 часа назад, Plain сказал:
24AA02E48(64)
Виноват, поленился заглянуть в документацию.
-
2 часа назад, Vlad_G сказал:
Имеем EEPROM, в данном случае 24AA01 (или 24LC01), микрочиповскую. С завода в ней записаны все единицы, других, правда, не встречал
Ну, например 24AA01E48, 24AA01E64 содержат с завода в первых 6 (8) байтах значение уникального EUI48 (EUI64) и первая половина памяти навсегда вообще заблокирована от записи.
-
Непонятно такое требование. На стадии компиляции компилятор другие единицы трансляции не видит, а на этапе линковки они уже встроены и наружу не торчат.
-
Я бы смотрел напряжение на Rdown или на ноге VCC. Если оно при этом остается неизменным - искать проблемы во вторичной обмотке или выходном диоде. Если же тоже падает в ноль - смотреть конденсатор на ноге VCC и резистор-диод перед ним.
-
8 минут назад, Arlleex сказал:
Я думаю, что определение inline func() {} в .c/.cpp-файле может привести к undefined reference, и зависит это от погоды на Марсе.
Недопонял. Чем такое определение с точки зрения компилятора отличается от определения в заголовочном файле, включенном в этот же .cpp (в сях inline вообще нет)?
-
1 час назад, Dec_NN сказал:
Почему включение кеша данных вызывает мою проблему пока не понимаю. Буду разбираться
Гляньте сюда. Там собраны основные проблемы с драйверами эзернета из куба.
-
4 часа назад, dxp сказал:
Это то же самое, что определять эту функцию в каждой единице компиляции вручную (требуется строгая идентичность определений).
Как раз в этом случае - идентичность не требуется. Поскольку функция видна только в одной единице компиляции - кофликта не будет. Но мозг в таком случае программист на отладке сломает - это да.
-
52 минуты назад, AlexKeisy сказал:
Для выдачи команды на дисплей, нужно притянуть ножку D/C (Data/command) к нулю, отправить байт, отпустить ногу, потом отправить четыре байта данных, потом снова притянуть D/C отправить байт отпустить и снова четыре байта...
Вы уверены, что правильно поняли описание? Обычно контроллер дисплея проверяет ногу D/C в конце приема первого байта и дальше не обращает на нее внимания до первого байта следующей посылки, ибо все байты этой посылки являются командой или данными. Таким образом ее можно держать притянутой к нулю во время всей посылки команды, то есть выставлять в нужное состояние перед выставлением CS в ноль и дальше не трогать до выставления CS в ноль на следующей посылке.
Плавный переход C -> C++ под МК
в Программирование
Опубликовано · Пожаловаться
Помнится, лет 20 назад The Bat! отсылал примерно такое уведомление о получени письма: "это уведомление не означает, что письмо было прочитано и/или понято адресатом". Последнее, вероятно, относится к вам.
Какое отношение placement new имеет к куче? Это во-первых. Во-вторых - эта фраза об объектах, создаваемых в этой выровненной памяти, но не к самому объекту памяти. Что и подтверждает пример по той же ссылке: объект data[N] типа std::aligned_storage_t<sizeof(T), alignof(T)> является самым обычным членом класса, а не создается на куче, как написали вы. Понимать прочитанное умеют не только лишь все, да.