Amomum: как понимаю -flto появилась после 2012ого, а нормально заработало в https://launchpad.net/gcc-arm-embedded где то в 14-15 году судя по отзывам и то надо с осторожностю?
Amomum: хех а вот про это не знал "-flto" всего один раз сталкивался с тем что старый gcc не работал с этой опцией, у нас 2/3 изделий это всякое старьё которое надо скорее сопровождать и их объём настолько мал что апгрейдить компилятор до 201х версий и не выгодно и не интересно (часть из них - мои первые учебные по АРМам которые внезапно продаваться стали сами). И как то само собой получилось что настройки передались из старых проектов в новые и в принципе всем был доволен.
Спасибо за апдейт знаний
Amomum: эээ, я вообще то про Си говорил, а не си++, они процессингом при компиляции отличаются как небо и земля, про с++ спору нет.
Да в GCC для си, есть ещё очень скрытый пакостная особенность на -О3: функции то он инлайнит особенно в цикле, т.е. цикл из 4 вызовов функции приведёт к дублированию её тела четырежды ... но все параметры и локальные переменные так же будут ПЕРЕД этими 4 телами распределены в стеке, т.е. если функция жрала 64 слова в стеке на -О0 ... -О2, то на -О3 она скушает 256 слов после такого разворачивания, а часто для СТМ32 стек делают в 256 слов (старые кейлы, кокосы, эклипсы и тд), т.е. порча данных рядом с стеком гарантированна и трудно выловима
Amomum: -O3 вреднее чем -О2. Потому что компилятор на О3 разворачивает циклы и в угоду скорости многие вещи делает более громоздко (заполнения структур, математика и тд - не делает скрытых мини функций а всё пишет тупо в линию много раз).
Во вторых "любую функцию заинлайнить может", только ту что статичная в пределах одного Си файла, а не статичные он может как раз раздублировать - одна версия для всех видная извне, а вторая версия инлайном идёт где попало внутри одного объектника/си файла. Компилятор GCC для разных си файлов вызывается отдельно, и о коде в других Си файлах не знает вообще.
Просьба давать те советы которые были проверены на практике, ок?
Amomum: "инлайнить SPL" ТОЛЬКО когда другого не остаётся, например когда пишешь загрузчик в 4к, а превращать код в шифровку (на асме или прямой доступ к регистрам) ещё глупее, код нужен для людей и чем меньше стилей тем лучше. пусть уж будут те же самые структуры и функции что и в остальном проекте и пофик что с суфиксом XXX_inline или ещё как, зато переносимо и изменения удобно применять к всем. А изменения будут.
Славка: ты морально готов работать 24/7/365? быть козлом отпущения и иметь з/п порой ниже чем у продавцов диванов и авто? ты выдержишь это лет 10-40? особенно когда надо будет детей кормить? Это сейчас легко говорить что всё нормально и это интересная работа и ещё и хобби, а когда деньги прижмут и длится это будет не год, а десять лет?
Да и для справки: отрасль сокращается семимильными темпами, на многие чипы цены подскачили в разы, а продажи ниже плинтуса. Многие трактора уже разогрели, я японский выучил на N2 (визовый минимум).
От всей души желаю: не иди в отрасль. Будешь работать на бюджет за гроши и быть козлом отпущения и часто сидеть на голом окладе - щас бюджет популярен и с руками отрывают, импортозамещение и все дела.
Славка: не иди в железо вообще, это постоянный дрочь, разделение труда тут не развито, осилить отлично и схемотехнику и технологию и программирование и верификацию и плис ты не сможешь, потому что ты один - значит твои изделия будут дермовыми и ты будешь виноват во всём, фирма хронически не будет получать окупаемость с изделий. Ты реально будешь работать за гроши 24/7. А найти нормальную фирму с полным разделением труда со всеми специалистами - это раз в 5 лет в москве, и то сразу же закрывают эту должность.
Славка: если нужны деньги то стань профессиональным строителем, на полном серъёзе говорю. Знакомый схемотехник построил дом за 800тр включая стоимость участка по выходным за один сезон, а его рыночная цена 3-4 ляма. Хороший большой каркасник с полноценным фундаментом, на 60кв метров жилой площади (не включая сараи, санузлы и тд). Знаний набрать в процессе стройки можно изучая форумы и ловя лулзы с того как большинство проёбывают по 5 лямов в фундамент или забор.
В провинции плис это как французкий кассиру - никак на поиск работы не влияет, на з/п тоже. И это приятный довесок для работодателя если есть сложные разработки. Но чтоб были такие - это вряд ли.
В Москве то адекватные конторы которые предлагали бы плисоводам выше 40-50тр днём с огнём не найти.
Тут выбор простой - либо занимаемся любимым делом, либо жуём кактус но за дорого.
Константин: спасибо. Ещё вопрос: если есть опыт разработки, внедрения в производство, и тех поддержки и развития своих разработок на FPGA (5 лет), ну и с и с++ на системном уровне 15-20 лет (непомню точно, плавно с асма Z80 и двк и турбо паскаля переползал), то насколько быстро по времени можно войти в верификацию? Какой запас времени закладывать? И как лучше это сделать если понадобится в случае трудоустройства? Можно ли разобраться на лету делая рабочие задания или лучше идти в ученики если надумаю сменить специализацию на это? (неразу не искал работу - она меня сама находила всегда, особенно в конце 90ых-2000ых)
Emil: вот понадобится устройство модернизировать. обратятся к тебе и смело прибавляй к старой зп нулик и предлагай им - никуда не денутся, возьмут запросто. (работает только если предприятие получает основную прибыль с разработанных устройств которые надо сопровождать)
Что хорошее посоветуете на тему SystemVerilog, UVM/OVM/Assertions? Тому кто разрабатывал в схемном редакторе а потом на ADHL простые штуки типа сигнальной обработки, примитивного сжатия видео и контроллеров интерфейсов? а с++ и баш с асмами и прочим знаю
в микроконтроллерах АРМ тоже самое: есть хорошие компиляторы и оптимизаторы типа gcc, keil, iar. Есть библиотеки с готовыми асм вставками от производителя проца - арм консорциума. Итог писать на асме не нужно никогда и ничего. Очень и очень иногда использовать спец либы ДСП может да, с стилем "псевдо-ассемблер на си" когда инлайн-функциями записаны асм команды обрабатывающие вектор. Но обычно уже все свёртки, фурье и тд очень быстрый уже есть. И оптимизировать там - всё равно что биться голой об стену и воевать с компилятором насколько близко ты его догонишь.
Но если так хочется:
Есть соглашения как писать ассемблерный код, какие регистры волатильные какие нет, как организовывать стековый фрейм и тд и тп. И если всего этого придерживаться, то выйдет очень долго и нудно, а результат очень сильно разочарует.
Да раньше для арм МК писали на асме код запуска, куски RTOS, обработка исключений, но с освоением кортекса, формата LD и секций gcc даже это стало не нужно вообще.
За свою практику (7 лет на арм) я ни разу на асме не писал. Нужно быстродействие - ставь FPGA.
Daemon23RUS: в моей практике было всё наоборот: хороший программист с опытом на с++ и си (игры, астериск и тд) отлично и без проблем уходит в микроконтроллеры. А ассемблистов надо долго и упорно бить по рукам, переобучивать основам программирования и информатики, а некоторым упорным запрещать на уровне компилятора ассемблерные вставки например через дерективы. Поэтому я считаю что знание асма не обязательное, но очень желательное. А вот знание Си и умение с практикой программирования на нём обязательное и без него ниже того же астериска и его драйверов не спускаться. И у тебя ещё раз говорю знание железа в одну кучу с ассемблером спихнуто но на деле запрет прерываний, манипуляции с стеком и прочее это вообще не ассемблер. Можно писать хорошие программы на мк без знаия асм - можно и нужно. Проект должен быть жизнеспособным и портируемым . И асм может иметь место только когда совсем по другому никак (за 10 лет такого НИРАЗУ не видел).
Daemon23RUS: для начала надо научиться ездить и лучше не на АВР с его нестандартной архитектурой. SEI, CLI, RETI, RET и это особенность конкретной платформы и конкретного компилятора. В других МК и/или компиляторах уже всё сделано нормально на Си, например смотри CMSIS или ардуину. То что Вы начали изучение раньше и понадобилось это использовать - очень хорошо, но это далеко не обязательное знание.
Армянское Радио: а как связан АСМ и RTOS с осознанием простого факта что требуется время на выполнение параллельных задач? Да не спорю что у многих высокоуровневых программистов вообще нет осознания реалтайма в коде и что код выполняется какое то время и оно постоянно меняется. Но к этому приучаются явно не так. Хотя-бы для начало нужно избегать многопоточности на прерываниях и RTOS и ставить для этого явно простые задачи. KISS Вам в помощь!
Армянское Радио: есть такое заблуждение: что нужно не учиться просто велосипеду. Всенеприменно и обязательно надо изучать механику, сапромат, физику твёрдого тела и материаловедение прежде чем просто поехать на несчастном просто-велике. Хочешь отвадить от микроконтроллеров - так и скажи, не запудривай мозг людям чепухой. Асм - телеге пятое колесо. Станет профессионалом - понадобится быстродействие или малый размер прошивки и вот только тогда и понадобится асм. Зачем сразу ту же RTOS давать? Откуда такой лютый оверинжениринг и рокет-сайнс? Почему нельзя взять ардуино и не начать писать скетчи чисто для практических сиюминутных задач?
Daemon23RUS: сарказм: лучше сразу начать изучать с уровня метализации соеденений D триггеров. АСМ слишком высокоуровневый. Господа, палку перегибаете в очередной раз: из слишком высокоуровневого в слишком низкоуровневое. Если использовать МК арм кортексы Мх, то достаточно изучить и набрать опыт разработки на ANSI-C. В России почему-то любят упарываться асмом абсолютно безрезультатно (хотя самые шустрые полу-асм библиотеки для сигнальных нужд нахожу только в США и Европе).