Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
ARV писал(а):
для структур правило "для всех" не действует?
Нет, конечно. С чего бы ? Проинициализируется только первое поле структуры. Такое правило (инициализация всех ячеек одним значением) только для массивов. В структурах могут быть разные типы полей, по этому подобное правило было бы нелогичным.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
проинициализирует все элементы и поля семерками... или нет?
ЕМНИП, и для массива - нет. Только первый элемент, остальные - нулями. Для GCC можно ещё '...' использовать для указания диапазона. В любом случае, любые попытки инициализировать элементы чем-то, отличным от нуля, будут увеличивать размер прошивки, тем больше, чем больше элементов в массиве, структуре и т.д.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Но чтобы получить это предупреждение мне пришлось добавить gcc опцию -Wmissing-braces
у меня по умолчанию -Wall
Вы, наверное, решили, что опция -Wall включает все возможные предупреждения компилятора? This enables all the warnings about constructions that some users consider questionable. Впрочем, ходить по ссылкам, читать - скукота... гораздо лучше положиться на мнение неизвестного человека из интернетов, с вероятностью 95% - бестолкового, т.к. "толковым" в интернетах отвисать некогда Мкей, тогда давайте так: -Wall не включает всех возможных предупреждений. С настройками по-умолчанию (-Wall) приведённая Вами конструкция не вызывает появления каких-либо предупреждений при компиляции при помощи gcc version 5.4.0 (AVR_8_bit_GNU_Toolchain_3.6.0_1734)
всегда перед тем, как задать вопрос на форуме, пытаюсь найти ответ в доступных мне источниках, в частности, при помощи поиска в google
AAX писал(а):
приведённая Вами конструкция не вызывает появления каких-либо предупреждений при компиляции при помощи gcc version 5.4.0
в том-то и дело, что от версии к версии avr-gcc меняет своё поведение "по умолчанию". в документации тоже не всегда легко найти особенности именно этой версии. но главное - невозможно понять, почему именно так, а не иначе "было-стало". и в этом случае обращаюсь на форум.
AAX писал(а):
гораздо лучше положиться на мнение неизвестного человека из интернетов, с вероятностью 95% - бестолкового
вы сейчас себя имели ввиду?
указанные мной версии компилятора выдают указанные мною предупреждения, и ведут себя так, как я описал. хоть я и имею набор версий от 3.х.х. до 8.х.х, проверять каждую как-то лень. причина "странной" на мой взгляд инициализации структур мне уже стала понятна - спасибо "бестолковым", кто уже успел мне объяснить. причина появления варнингов - не понятна до сих пор, как не понятен до сих пор и способ избавления от них (не считая отключения опции) без необходимости инициализировать каждое поле принудительно.
пока это всё.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
int main(){ return 0; } arkhnchul@arkhost-scow:/tmp$ avr-gcc -Wall -Wmissing-braces -c -S tst1.c arkhnchul@arkhost-scow:/tmp$ avr-gcc --version avr-gcc (GCC) 5.4.0 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
в том числе и себя, конечно. Если человек высказывает мнение по обсуждаемому вопросу, обычно следует поинтересоваться источником его знания. И ознакомиться с ним, т.к. 1) люди не всегда формулируют точно, мануалы и учебники пишут лучше. Ну, и просто - при каждом пересказе информации свойственно искажаться. 2) человек, обычно, высказывается только о предмете, вызвавшем обсуждение. В мануале или в учебнике есть шанс получить дополнительное полезное знание, о вещах, не упомянутых в контексте данного обсуждения. Даже если Вам повезло, и Вы встретились (чудом) в интернетах с "толковым" человеком, у него наверняка не будет времени вникать в нюансы Вашего вопроса и разжёвывать ответ. Это как у линуксоидов когда-то было принято: вместо ответа на вопрос отправлять читать нужный man.
В данном случае только первый элемент. Заполнять остальное нулями компилятор не обязан. Чистка буфера до обмена в Си всегда отдавалась на откуп программисту. И это правильно.
А вот интересно, если написать static int Buffer[100], компилятор заполнит буфер нулями? Вообще, должен - инициализация статических переменных нулями гарантируется.
Статические точно обнуляются, а глобальные, как отметил shindax, в принципе, не обязательно, но практически наверняка, компилятор их оптимизирует подобно статическим. По крайней мере, в случае avr-gcc и типичных флагах компиляции (-Os) разницы между прошивками, где глобальные массивы объявлены как static, и прошивками, где - не static, никакой нет.
здравствуйте! проблема с кодом, выложить пока не могу, т. к. не рядом с компом. но и не могу успокоиться найдя проблему.суть вот в чем:в целом код работал, после незначительных, на мой взгляд, манипуляции с переменными он перестал выполнять свои функции. пытался отладчиком отловить баг, но не смог. компилируется чисто, при отладке в дис. коде вижу что происходит сброс PC(rjump PC 0*0000) . Подскажите пожалуйста, почему эта гадость могла возникнуть, где копать?
Варианты, когда код перестаёт работать после незначительного изменения: 1) Вы не использовали volatile там где надо. 2) У вас утечка памяти. 3) Вы выходите за пределы массивов. 4) В коде связанные переменные, находящиеся в разных модулях - изменился порядок инициализации.
хороший инструмент,необходимая вещь для новичка!отсканировал свой косячный код выдало несколько явных ошибок и одну сомнительную,все исправил и заработало. Спасибо большое,сегодня спать хоть буду спокойно
Столкнулся с проблемой. Хочу в устройстве сохранять настройки между включениями-выключениями. Микроконтроллер MSP432P401R. У него встроенного еепрома нет. Но я подумал, что мог бы использовать последние блоки флэш памяти с адреса 3f000 до 3ffff. Благо этого флэша там аж 256килобайт. Попробовал, сделал функцию записи во флэш после выхода из конфигурационного меню. Запустил. Запускаю отладчик, смотрю память: FFFFFFFFFFFFF. Выполняю под отладчиком - всё работает. Выхожу из отладчика, захожу по-новой - снова FFFFFFFFFFF. Короче при каждой перепрошивке вся память стирается. Можно ли как-то этот участок памяти "обезопасить" от стирания. Или хотя бы, чтобы при прошивке там записывались бы какие-то начальные установки.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения