# Понедельник 56 твитов
Привет! На этой неделе с вами C++ embedded dev в Imaging (digital cameras) Сергей Даниельян @gahcep. Недавно еще и PTL одного из проектов.
3:54Попробую в паре твитов о компании и чем занимаемся: но хотелось бы шире описать область (для буд. вопросов и обсужд.)
3:55Основное направление деятельности компании - разработка решений в сфере Imaging - по сути это digital cameras для разл. игроков на рынке ...
3:56... (Action Cameras, Car DVR и VR). Фишка - нетривиальные решения ( одновременные видео стримы, взаимод. между камерой и моб. устройствами)
3:56Мы являемся оф. партнером Ambarella и на базе SoC от нее и собственного SDK в разумные сроки стараемся дать законченное решение под ключ.
3:57Для примера, есть даже своя IQ (Image Quality) лаборатория, Computer Vision отдел, а также Electrical и Mechanical инженеры.
3:57Я же в системной разработке кроссплатф. компонент на С++ (входят в наш SDK). Участвую в различного рода задачах связанных с Linux/RTOS
3:59Рассказ будет о разном, в том числе о С++ (как же без него), ARM архитектуре (если будет интересно), Linux (конечно же), кросс-компиляции...
4:00... коснемся нашего dev env, различных policy (код и процесс разработки), нашей билд системе (в рамках NDA) и что будет вам интересно.
4:01Наибольший интерес, я надеюсь, вызовут описания проблем (технических, организ.) связанных с миром embedded разработки именно в нашей сфере.
4:02К сожалению, я жестко связан NDA и самые вкусности не смогу рассказать, но, думаю все равно будет интересно.
4:03Фух, с intro закончил ;) В общем, давайте знакомится, пишите вопросы. Как раз определимся с тем кому что интересно и интересно ли вообще.
4:05Что будет наиболее интересно?
4:07@backendsecret не лучшее время выбрал для интерактива)
Да, часовые пояса никто не отменял... Ну ничего, я терпеливый) twitter.com/adukv/status/8…
4:11Note: прошу не заменять равнозначно #embedded в Imaging на понятие IoT. Это все же разные области, хотя IoT в некоторых проектах есть.
5:24Кстати, следили за CES недавней? Что больше всего порадовало? Как вам Snapdragon 835?
5:27@backendsecret Linux/RTOS это soft RT? А кроме Linux какие-нибудь RTOS используете?
Нет, RTOS и Linux - отдельные OS работающие на разных ядрах. RTOS - проприетарная, Linux строится через buildroot с… twitter.com/i/web/status/8…
7:43@backendsecret Что там в мире embed актуально в роли IDE? CLion используют в качестве C++ ide?
Если код пишешь, то в основном vim/emacs/atom/sublime, если баги чинишь, инвестигейт кода, то тут либо vim/emacs+uc… twitter.com/i/web/status/8…
10:11Кстати, относительно новая штучка для Code Investigate появилась - несколько человек у нас вроде пощупали даже coati.io
10:14@backendsecret Что там в мире embed актуально в роли IDE? CLion используют в качестве C++ ide?
Ну и как бы embed разный бывает. Много задач на поиск багов, инвестигейт. Бывает 80% времени ищещь багу в video фло… twitter.com/i/web/status/8…
10:20@backendsecret приходится ли писать ARM-специфичный код? Скорость работы железок устраивает? В общем интересно про железку и cross compile
Лично мне нет, разбираться много в существующем - да. С каждым новым релизом от вендора, правим lds, размеры partit… twitter.com/i/web/status/8…
10:29@backendsecret приходится ли писать ARM-специфичный код? Скорость работы железок устраивает? В общем интересно про железку и cross compile
Некоторые алгоритмы пишутся с использованием #ARM #Neon если скорость нужна. Некоторые пакеты строятся с опциями дл… twitter.com/i/web/status/8…
10:31Расшифрую немного: TL - team lead; PTL - project team lead; PM - program manager; SSP - System Support Package; BSP - Board Support Package
10:33@backendsecret ну и да, ещё интересно пробовали ли llvm, плюсы, минусы, подводные камни :)
К сожалению, нет. Самому интересно поиграться с llvm, но пока руки не дошли. twitter.com/alexanius/stat…
10:353/3. Есть PM. Он рулит проектами и PTL'ми. Отдельно QA - но там похожий принцип. Ну и я не касаюсь топ менеджмента. Тут думаю у всех одно.
10:452/3. Есть другие инженеры, они в camera application домене - пилят конечное приложение. У них свой руководитель (PTL).
10:451/3. Немного по инж. организации: есть инженеры заточенные на SDK и они делятся на домены (still, video, etc). У них есть руководитель (TL).
10:45@backendsecret мне интересны вопросы автоматизации, построения релизных циклов, тестирования в embedded.
Все что смогу в рамках этого формата и NDA, расскажу (если успею ;) twitter.com/dixie_fl47l1n3…
11:19@backendsecret ещё интересно послушать как устроены обновления, что делаете с базами в продакшен прошивках и тд
Хороший вопрос. Firmware update - тема интересная. Взял на заметку, расскажу немного. Тут кстати и ARM приплести мо… twitter.com/i/web/status/8…
11:26@backendsecret а чем отличаются SSP от BSP? И можно пару слов про системы сборки, что за buildroot, слышал про всякие yocto и т.д.
Начну с SSP/BSP, а потом пару слов про остальное ;) twitter.com/dixie_fl47l1n3…
13:297/7. Есть также термин #MSP (Middleware SP) - набор специфичных либ/API/примеров, например, все что связано с медиа либо периферией
13:306/7. #SSP также часто может включать примеры работы с API от вендора, какие-нибудь законченные приложения, тесты.
13:305/7. #SSP (System SP) - сложнее. Обычно включает в себя гораздо больше. В нашем случае, это системные либы (IPC, USB stack, DSP microcode).
13:304/7. Или например, работаешь с DMA_CHANNEL_CNT и на одной борде это макс. 4 канала, на другой - 2, хотя сам чип может 16 максимум.
13:303/7. Грубо, подключив #BSP, ты юзаешь, BASE_PERIPH_ADDR как есть, не придавая значения, что на борде А - это 0xABC, а на борде B - это 0xFED
13:302/7. То есть ты не паришься конкретным адресом вот той шины либо смещением UART0 (который на разном железе может быть разным).
13:301/7. #BSP (Board SP) - поддержка конкретного железа/борды. Абстракция от самого низкого уровня либо уровня перед ним.
13:31Вообще в плане BSP и библиотек для работы с чипами, меня реально вставил ASF (#Atmel Software Framework) asf.atmel.com/docs/latest/cm…
13:39#ASF имеет гармоничное и разумное разделение по уровням функционала (boards,drivers,components и т.п.). Легко юзать в том же Atmel Studio.
13:41Только внимательно, тот же слой DMA в ATF немножко бажный ;) pic.twitter.com/ek9b7YwsEN
13:43@backendsecret то есть все эти *SP - это условные названия для различных абстракций? Реализацией может быть как документация так и либы?
Все же BSP более устаканенное понятия и зачастую это все же набор либ/файлов/классов. Нет, документация может являт… twitter.com/i/web/status/8…
13:45@backendsecret Ооокей, становится яснее :)
Например, на рисунке ниже, слой boards входит в BSP. А вот относить те же drivers - уже вопрос. Остальные *SP - ven… twitter.com/i/web/status/8…
13:50@backendsecret с чем связано, что некоторые бренды не выдают документацию на чипы, даже 2-3 поколения от текущих? Например silabs
2/2. Главных факторов неск-ко: 1) Конкуренция (ибо в доках много тех инфы) 2) Защита репутации (дают тем кто точно… twitter.com/i/web/status/8…
13:56@backendsecret с чем связано, что некоторые бренды не выдают документацию на чипы, даже 2-3 поколения от текущих? Например silabs
1/2. Хор. вопрос. Это "стандартное поведение" IP (Intel. Prop.)-имущих. Во-первых, дают, но своим партнерам: разные… twitter.com/i/web/status/8…
13:56@backendsecret ну не все самсунги, да :) Мне надо было в пределах 1к штук :( Может есть какие-то посредники через которых можно получать?
Ох, сомневаюсь что получится. Посредник дорожит своими отношениями с вендорами (кто вас знает, может раскроете инфу… twitter.com/i/web/status/8…
14:12@backendsecret с чем связано, что некоторые бренды не выдают документацию на чипы, даже 2-3 поколения от текущих? Например silabs
С японцами вообще круто - могут просто не дать и все тут. Аргументируй, плюйся, итог один - нет доки, нет контракта… twitter.com/i/web/status/8…
14:144/4. Отличия между системами сборки в том, что одна акцентирует внимание на доступносте и простоте, другая - на мощи кастомизации.
14:393/4. Что можно кастомизировать? Да что угодно: 1) cross toolchain 2) libstd: newlib вместо glibc 3) тип rootfs или свой пакет/rule добавить
14:392/4. То есть X собирает для вас: cross-toolchain, rootfs, kernel, bootloader. cross-toolchain чтобы на x86 собрать OS для ARM.
14:401/4. Совсем крако про buildroot/openembedded/yocto. Позже - подробнее. Все перечисленное позволяет вам собрать ваш собственный образ OS.
14:40@backendsecret @alexanius а как вы играетесь(хотите поигиаться) с llvm/clang?
Поиграться - в смысле поизучать и разобрать пресловутые "compile-time, link-time, run-time, and idle-time" оптимиза… twitter.com/i/web/status/8…
15:26@backendsecret @alexanius а как вы играетесь(хотите поигиаться) с llvm/clang?
Касаемо #clang - поизучать его инфру по типу GCC Internals gcc.gnu.org/onlinedocs/gcc… twitter.com/_alekum_/statu…
15:27@backendsecret можно будет потом отдельно пару слов, как во все это попасть? Что где вводное почитать, какую борду… twitter.com/i/web/status/8…
Конечно можно, добавил в свой TODO на эту неделю ;) twitter.com/dixie_fl47l1n3…
15:39Итак, первый день закончен (сорри, мне бай-бай скоро :). Не переключайтесь.
15:40Ну и напоследок, ссылочке на youtube канал одного интересного перца - там про дизайн PCB, немного про DDR, и разное youtube.com/user/matarofe
15:42# Вторник 48 твитов
Всем доброго! Поскольку вчера закончили тяжелыми темами, начну этот день с тем полегче. Прежде всего, итог голосования
4:24Так, потер случайно poll :). На первом месте C++, затем процесс, затем ARM/GCC и совсем неинтересно про buildroot. В целом пропорция ясна
4:27Про инж. орг.: часть инженеров заточены под что-то спец. Кто-то саппортит и поднимает сенсора, кто-то работает NAND, кто-то эксперт в USB
4:29С одной стороны это круто, всегда есть реальные специалисты которые точно знают свою область и всегда смогут ответить на твои вопросы ...
4:29... c другой стороны, слишком узкая специализация порой влияет на скорость разрешения проблем лежащих на стыке разных доменов
4:29Ну что, все проснулись? :) Давайте немного о процессе и тулах. А чуть позже расскажу про всякие EVT/PVT и этапы разработки embedded
7:04Как у вас с коммуникациями в команде? У нас Skype - чаты разной направленности. Ну и ножками иногда, если вопрос серьезный.
7:04Пробовал продвинуть Slack, но он не вписался в требования менеджеров (флоу общения с клиентами). С заказчиками - GoTo Meeting или кастомное
7:05Кратко по нашему CM,CI. Да есть, нет, не устраивает во многом, но "так исторически сложилось".
7:05CI: QuickBuild/Proofbuild с кастомной надстройкой (верификация HW/SW билдов - regression, unit-testing, sanity, boot).
7:05Repo: SVN (когда то был Perforce), люди разбавляют #git локально. Пробовали уйти, пока не решились.
7:06Wiki на базе redmine, review board для ревью, тикеты в JIRA. Кстати, ничего удобнее Atlassian не видел. Дорого, но стоит своих денег.
7:06@backendsecret уйти от использования #git ??
Наоборот, от svn. Наследие большое и все сложнее решиться. twitter.com/BesseIFunction…
7:26@backendsecret у нас успешно используют slack. А ещё иногда телеграмм, для маленькой команды
А какие сценарии работы? private rooms? Дорого выходит на команду? Что с видео-звонками? twitter.com/BesseIFunction…
7:27Кстати, меня тут на модный wire.com переманивают. Но что-то сыроват, хотя ребята активно работают судя по github.
7:28@backendsecret скайп - это ужас. У нас слак.
О да, учитывая что у кого-то Linux, у кого то Win на которой он сломался. Ужас - еще мягко. twitter.com/aeon_666/statu…
7:423/3. Управление доступом очень примитивно, неудобство отслеживания интеграций , скучаем по P4 shelve perforce.com/perforce/r15.1…
7:422/3. Неконсистентность: одни и те же вещи ведут себя по-разному в разных контекстах. Проблем. области: externals, eol-style, symlinks, patch
7:421/3. Для тех кому интересны причина того что нас не устраивает svn (разных - разное, но в целом солянка такая):
7:43@backendsecret про ценник не знаю, его просто купили на всех, как я поняла. Видео кажется нет, не пользуюсь. А чаты командные есть, все ок
Ну вот на самом деле, он не очень дешевый если в команде более 30-50 человек. Я предлагал для всех - free, и только… twitter.com/i/web/status/8…
8:12@backendsecret тариф бесплатный интеграций полторы (kapacitor двум людям в личку гадит), на историю пофиг, видеозвонки не котируются особо.8:31
@backendsecret эх, десктопный клиент пилят на electron, тяжеловат конечно, особенно в сравнении с недавно зарелизенным клиентом Telegram
Меня доставила их заскок на private. Почему нет статуса в app: github.com/wireapp/wire-d… twitter.com/grim_juz/statu…
8:33@backendsecret и iOS позволяла бы "вот ему, ему и ему, а еще боту, если он пишет про то, то и то" будить меня ночью, я был бы счастлив)
Вот мне любопытно стало, а где у вас такой флоу? Рабочий? Или для удобства? twitter.com/strizhechenko/…
8:39Неб. оффтопик: несколько каналов для slack польз. : dist-sys.slack.com hangops.slack.com devopschat.slack.com #devops #DistSys
8:40Кстати, печаль и ужас, так и не нашел вменяемых каналов по embedded/fpga/pcb/c++. Подсобите, если знаете...
8:41@backendsecret ну, как по мне on-call engineer должен иметь доступ до кого-то, кто может помочь, если ночью не может справиться с проблемой.
Да, в таком случае, я соглашусь. Если поделитесь хаками либо ботами рульными, буду признателен ;) twitter.com/strizhechenko/…
8:43@backendsecret slack, hipchat + helpdesk для несрочных вопросов8:45
@backendsecret @strizhechenko telegram.me/proembedded из этого списка github.com/A-gambit/aweso… - не?
К сожалению, уже шерстил, нет ничего по тематике... twitter.com/hatarist/statu…
8:47@__pewpew__ @strizhechenko @backendsecret встряну в тред. Есть такой зверь как about.mattermost.com типа self-hosted слацк9:17
@backendsecret отвечай себе на твит плз иначе по ленте расползается
Ох, извиняюсь, сделаем. twitter.com/ruxeg/status/8…
10:56Всем спасибо за ответы, давайте двинемся дальше ;)
14:50Стадии которые проходит устройство от закл. договора и до выпуска (generic пример с оглядкой на #Imaging область)
14:51@backendsecret ST1. Заинтересованность: понравились заказчику (конферен.), референс (или редирект) от вендора, продолж. сотрудничества
14:53@backendsecret ST2. SOW: оценки, подписание конктракта, согласование требований, milestone schedule, evaluation. In charge: RM, разработчики
14:57@backendsecret ST3. Подписание контракта и начало работ. Начальная фаза на железе вендора, постепенно получаем кастомерское. Всегда мало HW
14:57@backendsecret ST4. Кастомерское HW. Итерируемый цикл: DevBoard/EVT/DVT/PVT с разработкой и постоян. тестированием (ручное, автоматизация)
14:58@backendsecret ST5. Наладка сборки, Mass Production. Доставка первых образцов VIP кастомерам.
14:58В теории EVT (engin. valid.) - обкатка HW, DVT (design VT) - проверка на соответствие требов., PVT (prod. VT) - стабилизация и фикс багов.
14:59@backendsecret На практике, все формал. Часто на фазе PVT могут вносить изм. в PCB, а на MP менять линзу. Или на PVT вдруг материал на зам.
14:59Беря во внимание набор HW что присутствует на типичной #action #camera (GNSS, Wi-Fi, Bluetooth, IMU) ...
15:00@backendsecret можете представить в какой ад может превратиться отладка и стабилизация всего разнооборазия (перегрев, повыш. частота DRAM)
15:00Посоветую довольно подробную и интересную статью как раз с обзором всего #embedded #LifeCycle blog.bolt.io/the-illustrate…
15:02Отдельным вопросом стоит QA. Здесь и классика (sanity, regression, ручное) и board-specific (boot, stress-тестирование подсистем) и HW-spec.
15:33Как тестируют Wifi, GNSS, IQ камеры и прочее железо? Тут NDA, но для любозн. ищите по keywords: Chamber (audio/gps), Light Box/ Black Box.
15:33@backendsecret @_komaz купить, чтобы проверить работоспособность на своем гавнокоде? нет
Мне на тот момент связки vim/tmux/uctags/ctrlp/ranger/YCM было за глаза чтобы не покупать что-то для какого теста.… twitter.com/i/web/status/8…
16:04В общем, про процесс очень кратко расписал. Если (и что) интересно, задавайте вопросы. Завтра по C++, GCC, а то приуныли что-то ;)
16:12Напоследок, пара ссылочек. blog.acolyer.org - автор выделяет интересные с его точки зрения paper и описывает их на plain english
16:18Канал на youtube - PapersWeLove. Авторы наиболее рульных paper приглашаются для презентации своей работы youtube.com/user/PapersWeL…
16:25# Среда 42 твита
Всем доброго утра. Буду делиться разным, пишите любые вопросы, комментарии. Касаемо и не очень C++!
6:27Про нас. Юзаем и С и С++. Также есть небольшие части на perl, python. Ну и bash/BAT куда без них. #cpp #cpp11 #embedded
6:27Ядро и все базовое пишется либо на C, либо на C++03 либо C++11. Преобладает уже C++11.
6:28Если что-то кастомное и специфическое для проекта, то пишут на С++14. Сам сижу на С++11.
6:31Свой Code Style, ревью проходит в том числе и на соответствие ему. Не всем по духу, но лучше чем не иметь вовсе.
6:38Для embedded C/C++ советую посмотреть на #MISRA C и MISRA C++ стандарты programmingresearch.com/coding-standar… #cpp
6:39@backendsecret бесплатная версия не хранит историю, это не удобно
Согласен, но у нас для важных вещей есть Wiki, а в чатике - рабочие сиюминутные вопросы. Либо запрос по оборудовани… twitter.com/i/web/status/8…
7:11@backendsecret std::atomic у нас тоже используют
Спасибо за дополнение, не знал :) twitter.com/nikitamalyavin…
7:12Коллега рассказывает об интересностях нашего воркфлоу.
Подписывайтесь, задавайте вопросы!
#rhonda #embedded twitter.com/backendsecret/…
Поддерживаю, в рамках NDA, но вкусняшки у нас есть ;) twitter.com/nikitamalyavin…
7:16Для потоков/локов юзаем свою кросс-платформ. имплементацию - там три части: #POSIX (#Linux), #RTOS примитивы и Win
7:17Кстати, по поводу #GDB и удаленной отладки, советую вот эту статью коллеги: habrahabr.ru/post/274179/ #debugging
7:27@backendsecret Поскольку это платный стандарт, коллеги посоветовали глянуть на codingstandard.com/section/index/ #cpp #cpp11
7:59Касаемо шаблонов - пользуем довольно активно, но без фанатизма. Да, variadic template юзаем #cpp #dev
8:43Касаемо шаблонов - если надо скрыть код, приходится явно специализации прописывать в ущерб размеру. Но это редко, сам сталкивался.
8:44Хорошие C++ FAQ лежат тут: isocpp.org/faq github.com/isocpp/CppCore… #cpp
8:45Частые баги/косяки на ревью - инвалидация итераторов, велосипеды когда можно заюзать <algorithm>. Неверная испол. erase/remove идиомы
9:54Сам недав. сглупил - const map в хедере прописал. Хедер включается далеко не один раз ;) Как следствие, копирование и аллокации в разные TU
10:09@backendsecret ну это было с появления шаблонов. Неужели ничего не поменялось за это время?Лет 10 не интересовался C++, а там все по-старому
Так это вполне обоснованное поведение. Ну то есть, все оки, просто при отгрузке иногда "лишний" код надо убрать в о… twitter.com/i/web/status/8…
11:36@den4ikbyte @backendsecret это позволяет сгенерировать наиболее эффективный код для данного типа
Все так, напр. для пользователя А код раздут всего двумя типами (int, bool), для пользователя B всеми (напр. + stri… twitter.com/i/web/status/8…
14:18На некоторых проектах юзаем #PlantUML - для генерации схем и диаграмм. Кстати, весьма удобно для #Doxygen документации.
14:20Плюс #PlantUML в том что он текст. - можно дифы генерить и наблюдать развитие проекта. В vim плагин github.com/aklt/plantuml-… например
14:24Хорошая тема: #const #correctness Ставим везде где reasonable. Дает защиту от изменений + документирование. Bitwise vs. Logical constness
14:29На тему логической vs битовой константности #cpp можно почитать тут isocpp.org/wiki/faq/const…
14:31У комп. есть свои extensions. gcc.gnu.org/onlinedocs/gcc… Чтобы строить ANSI C, напр., можно заюзать '-pedantic' флаг. То есть C99 vs GNU99 #GCC
14:35Да, важный момент! C и C++ - два разных языка. Факт. На эту тему отличнейшая! презен. от Dan Saks youtube.com/watch?v=D7Sd8A…
14:44То что допиливать Open Source приходится, наверное и так понятно. Например: habrahabr.ru/post/249991/ #OpenOCD #baremetal
15:38online compilers: мне нравится godbolt.org, коллега пощупал разные: htrd.su/wiki/zhurnal/2…
15:40Подвожу под более хардкорные вещи. Для начала моя статья (базовое) о memory layout codingfail.com/cpp-internals-… как строить, что на выходе.
15:42Оффтоп: сейчас с вот этим чудом разбираюсь: ATSAMB11 - Cortex-M0. Если есть коллега по "счастью", отзовись ;) Погов… twitter.com/i/web/status/8…
16:01Важно! Есть фичи языка, есть compiler-specific поведение, есть особенности платформы, а есть #ABI (Application Binary Interface)
18:14Если кратко, ABI - low-level интерфейс взаимодействия app и OS: objects aligment/size, functions calling conventions, object files layout
18:15#ABI делится на две "части": общая (generic/common) и Processor Supplement (ps, учитывающая конкретную арх.) - Intel 386 / AMD64
18:30Продолжу по #ABI. System V ABI - является как бы базой которую юзают Linux/BSD и от которой отрастают ps. Не относится к Win.
18:41#ABI. Было довольно гиморно в свое время разобрать что актуальное, что нет и с чего начать и читать так чтобы было последовательно. Ловите:
18:42@backendsecret 1. Generic Old System V ABI :: Generic Part (gABI) --- sco.com/developers/dev…
18:43@backendsecret 2. Latest updates --- sco.com/developers/gab…
18:43@backendsecret 3.1. Intel 386 psABI --- sco.com/developers/dev…
18:44@backendsecret 3.2. Intel 386 psABI supplement --- github.com/hjl-tools/x86-…
18:44@backendsecret 4. AMD64 (x86-64) psABI --- github.com/hjl-tools/x86-…
18:45Читайте, комментируйте, задавайте вопросы! А я все. Завтра будет интересно. Не переключайтесь, я спать.
18:48Напоследок, акки людей на которые стоит подписаться точно: worth reading: @arne_mertz @meetingcpp @supahvee1234 awesome accounts #dev #cpp
18:51# Четверг 28 твитов
@backendsecret у тебя случайно нет канала в Телеграме?
Вот чего нет, того нет twitter.com/tair_rhyme/sta…
13:41@backendsecret Расскажи, как разработчики на С справляются без ООП=)
Хорошая тема, Никита. Но я еще даже не начал про C++) twitter.com/nikitamalyavin…
13:43@ru_Parallels @habrahabr а вы считали сколько пришло с @backendsecret ?13:43
@nikitamalyavin @backendsecret Нормально справляются)
Подробности в студию! Хоть пару слов twitter.com/webholt/status…
13:44Да, кстати, всем привет. Сегодня я запозднился из-за работы. И первая ласточка будет вопросом.
14:10Кто нибудь юзал атрибут/секцию ramfunc при работе с #embedded? Интересны реальные кейсы. Нужна чтобы положить функ. из ROM в RAM.
14:19@backendsecret Сам если честно вообще ни разу не юзал. Вроде как TI, IAR и GCC саппортят. Для #ARM можно #Interrupt vector table перекинуть
14:19Старый добрый main, который entry point (на самом деле нет) содержит не только argc и argv, но еще что-то... #cpp #dev
15:22@backendsecret но и не portable, но присутствующий envp (environment) ине очень явный auxv - #ELF #Auxiliary Vectors
15:28@backendsecret ещё env. Или кроме этого ещё что-то есть? В дюбом случае это задаётся abi
Все верно. В данном случае ELF описание которого входит в ABI twitter.com/alexanius/stat…
15:29С помощью #ELF Auxiliary Vectors процессы получают инфу от ядра: смотрим #VDSO (дальше станет яснее зачем я это упомянул)
15:32Как смотрим зависимости бинарей или либ? ldd -v или readelf -d #linux #cpp #dev pic.twitter.com/oDiZiuigpd
17:18Строим простой C++, смотрим через ldd зависимости. Видим разное. Всякие libstdc++ libm libc пропускаем (C/C++ runtime), а вот дальше круче
17:22@backendsecret libgcc_s - это #GCC имплементит ариф. операции типа умн. или деление + работа с floating points + разное.
17:35@backendsecret /lib64/ld-linux-x86-64.so - собственно, сам ELF линкер (ld.so для a.out). На моей оси ссылка на /lib64/ld-2.21.so
17:37@backendsecret Ну и linux-vdso.so (на некоторых системах linux-gate.so) - инфа бинарю передается через уже упомянутый auxv, а суть в ...
17:38@backendsecret ... уменьшении оверхеда когда app очень часто вызывает какой-гибудь syscall (чаще всего речь о получении тек. времени).
17:39@backendsecret Делается это самим ядром - каждый процесс получает этот виртуальный *.so к себе в память + адреса рандомятся (security)
17:41Пару ссылочек на эту тему: man7.org/linux/man-page… 0xax.gitbooks.io/linux-insides/… #vdso #linux #ld #gcc
17:43Кстати, советую вот эту книгу github почитать - пишет awesome @0xAX 0xax.gitbooks.io/linux-insides/ #linux
17:44@backendsecret Что значит "на самом деле нет"? Понятно, что-то вызывает main, это что-то тоже откуда-то вызвано и так далее. Так где начало?
libc вестимо. Этому будет посвящена часть времени тут, но можете пока глянуть на __libc_start_main и crt*.o объектн… twitter.com/i/web/status/8…
18:09@backendsecret Что значит "на самом деле нет"? Понятно, что-то вызывает main, это что-то тоже откуда-то вызвано и так далее. Так где начало?
Вообще то соврал немного. Не совсем libc :) и скажем, в целом можно без нее и обойтись. Чуть позже обо всем этом. Е… twitter.com/i/web/status/8…
18:13Давайте попробуем собрать наш app "каноническими" командами cpp (preprocessor), cc1 (compiler), as (assembler) и ld (loader) #gcc
18:37@backendsecret
#preprocessor: cpp -time -v example.c > example.i
#compiler: cc1 -ansi example.i
#assembler: as --64 -o example.o example.s
@backendsecret #linker ld -dynamic-linker ld-linux-x86-64.so.2 -o example crt1.o crti.o crtbegin.o -lc example.o crtend.o crtn.o
18:42@backendsecret Ну вот и все, на выходе работ. app. Note: пути должны быть верные. Подробнее о последней стадии позже.
18:43Напоследок мысля. undefined behavior типа i = ++i; (ну спрашивали вас такое ведь?) выявлять легко если знать про Sequence Points #cpp
18:56Чуть не забыл. C++ Weekly with Jason Turner youtube.com/user/lefticus1 Выпуски не однотипные и все интересные #cpp
19:14# Пятница 16 твитов
@backendsecret ...которые deprecated с C++11.
Ну как бы не deprecated, просто по другому называют. Типа слишком сложно для понимая twitter.com/feelthefrog/st…
3:47Всем привет. Давайте немного в сторону сегодня. По существующим платам для того чтобы начать играться и изучать мир #embedded
13:19Хочется чего-то универсального? Конкуренцию #Raspberry сложно составить. Третий еще не заказал. Cortex-A53. Ням raspberrypi.org/products/raspb…
13:24@backendsecret Очень давно работал с такой бордой - тоже популярная: beagleboard.org Строил на OpenEmbedded для нее.
13:25Начать просто. Куча tutorial от производителя (точно для Raspberry есть). Читаем, строим, заливаем образ (+ядро) на flash, прошиваемся
13:28Себе недавно купил вот эту железку (Cortex-A9), свободы не супер много. Тот же uboot сложно последней версии взять. starterkit.ru/html/index.php…
13:29@backendsecret @Raspberry_Pi orange pi же, если графика сильно не нужна.13:31
@backendsecret @Raspberry_Pi java для неё в каком состоянии сейчас?13:32
Важно понять чего хочется. Если поиграться, то самый простой и популяр. Если с AV - мощнее + in/out специф. Если экзотики - FPGA борду
13:35@backendsecret @Raspberry_Pi А odroid c2?
Вот краем только слышал. Чем лучше Raspberry? В чем фишка, так сказать? twitter.com/aurvedr/status…
13:38А, ну и мой perfecto: parallella.org #FPGA + Cortex. Второй удобен для "позапускать ОСи"
13:40@backendsecret у меня такая, но глубоко не копаюсь. Надо бы ядро пересобрать чтобы LXC заработал, но я пока не знаю… twitter.com/i/web/status/8…13:46
@backendsecret мощный CPU, гиг eth и не на шине usb, 2 Гб ОЗУ и разъем под eMMC (быстро читает и пишет), вот только ядро 3.1413:48
@backendsecret да и жрет вроде меньше по питанию
А вот это очень нуно, особенно в тенденциях современного мира - везде 4K, стриминг. Юзаем LPDDR + режимы сна CPU (н… twitter.com/i/web/status/8…
13:51Кстати, очень важный (если не самый) момент - выбор батареи. Понять что это, зачем и как можно тут batteryuniversity.com/learn/
14:11Тви, а кто подскажет плату на которой периферия классная? GNSS, IMU разные (acceler., gyro)? Или строго модулями к сущест. добивать?
14:13# Воскресенье 31 твит
@backendsecret начать то ясно. А чем закончить можно?10:22
Для Raspberry можно спокойно тестить на qemu, так как почти все раскопано и зареверс. Один минус - GPU binary blob.
11:25Raspberry интересен наличием GPU, но вроде нет борды с GPU но без закрытых blob'ов.
11:32@backendsecret с каких точек зрения для вас это минус?
Только с одной - я не могу увидеть исходные коды и понять как оно работает на низком уровне. twitter.com/astarasikov/st…
11:33@backendsecret @astarasikov конечно есть бинарник и всегда можно почитать асм ... как вариант. Касаемо GPU, сталкивались с чем-то похожим?
11:38Попытка сделать open source firware для VideoCore чипа rasp pi news.ycombinator.com/item?id=127429…
11:39@backendsecret не смотрел конкретно rPI. но такая проблема есть много где-что делают стартовые бутлодеры.на многих SoC их и сдампить нельзя.11:44
Кто что думает про Эльбрус? То тут то там ведомственные службы совершают переезд с IBM на Эльбрус.
12:04Для тех кто не в теме: elbrus.ru/arhitektura_el… youtube.com/channel/UC6pnR… (акк разраба)
12:09@backendsecret Обеспечение защищенного исполнения программ на языках С и С++ #cpp mcst.ru/files/511cea/8… страницф 200
12:33@backendsecret а сам то что думаешь? ;)
На самом деле я рад за ребят. Да, дорого, да, юрикам только, да, специфика (VLIW). Но радует что арх. своя; интерес… twitter.com/i/web/status/8…
14:14@backendsecret была б возможность его руками потрогать-поковырять самому, было бы что сказать, но цены же..
Цены имхо норм для малосерийного производства. И вроде у них где-то доступ был... или послышалось ;) twitter.com/last_khajiit/s…
14:15@backendsecret вы имеете в виду хостинги на эльбрусах с виртуалками, в которых можно вообще потыкаться?)
Было бы круто такое иметь), но автор заикался про shared доступ. Был ли он доступен для всех или для огран. круга л… twitter.com/i/web/status/8…
14:20Позволю себе немного основ. Дополняйте если что. Обобщенно boot sequence выглядит так (каждая "ступень" может быть опц. либо многосоставной)
14:23@backendsecret microcode (тот самый binary blob) -> bootstrap (bst) -> bootloader (bld) -> user binary (u-boot для дальн. инита, kernel)
14:24@backendsecret И bst и bld могут иметь stages. На одной из стадий инит DDR/SDRAM, на другой может инит network для загрузки очер. бинаря
14:25@backendsecret Специфика у каждой борды/вендора, читаем доки на чип + мануал к борде. Прим. boot sequence для R-Pi: elinux.org/RPi_Software#O…
14:27Ссылочка на неплохой гайд по #GCC от Brian Gough: tfetimes.com/wp-content/upl… также не забываем про gcc.gnu.org/onlinedocs/gcc…
14:32Микро-гайд как отстроить свой kernel, rootfs, cross-toolchain используя (или нет) #buildroot (легко заменяем на аналоги, но принцип тот же).
15:21@backendsecret Кратко, кросс-компиляция: строим компил. (BUILD system) который на HOST сис-ме будет строить для TARGET платформы.
15:21@backendsecret Звучит сложно, но чаще всего BUILD равно HOST. Подробнее на отлич. ресурсе - en.wikipedia.org/wiki/Cross_com…
15:22@backendsecret При исп. buildroot можно отстроить дефолтный кросс-комп., можно добавить внешний (как из репо, так и вручную отстроенный)
15:22@backendsecret Для #ARM я советую оптимизированный и performance-improved от Linaro. linaro.org/downloads/
15:22@backendsecret Разницу между arm-linux-gnueabihf и, напр., aarch64-linux-gnu читаем в оф. FAQ wiki.linaro.org/WorkingGroups/…
15:23@backendsecret Строим кросс-компилятор Linaro с помощью wiki.linaro.org/ABE pic.twitter.com/QhryAf9vpx
15:24@backendsecret Качаем buildroot c buildroot.org/download.html, распаковываем. Строим для, скажем, versatile ARM (arm926).
15:25@backendsecret Надо дать знать ядру и buildroot конфигурацию борды и misc настроек pic.twitter.com/lXhLomQVYi
15:25@backendsecret На выходе, zImage (ядро), и rootfs. Может быть слиш. кратко и непонятно, но пути обозначены. Читаем команды, меняем опции
15:26Подходит к концу моя неделя тут. К сожалению, не успел про многое. Несколько ответов должен. Помню. Отвечу обяз-но. Надеюсь что-то зацепило.
16:20Спасибо @dcromster за предоставленную возможность. Спасибо всем кто был заинтересован. Не забываем подписываться на @gahcep
16:20Напоследок, неоднозначная, но жизненная статья про нас, embedded разрабов. (Автор НЕ я, маты +18) medium.com/russian/%D0%BF…
16:20# Ссылки
www.youtube.com
- https://www.youtube.com/user/matarofe
- https://www.youtube.com/user/PapersWeLove
- https://www.youtube.com/watch?v=D7Sd8A6_fYU
- https://www.youtube.com/user/lefticus1
- https://www.youtube.com/channel/UC6pnRoVljXKpo5bgkVyQMJg/featured
github.com
- https://github.com/wireapp/wire-desktop/issues/128
- https://github.com/isocpp/CppCoreGuidelines
- https://github.com/aklt/plantuml-syntax
- https://github.com/hjl-tools/x86-psABI/wiki/intel386-psABI-1.1.pdf
- https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-r252.pdf
other
- http://www.coati.io/
- http://asf.atmel.com/docs/latest/cmsis.html
- https://gcc.gnu.org/onlinedocs/gccint/
- https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
- https://wire.com/
- https://www.perforce.com/perforce/r15.1/manuals/cmdref/p4_shelve.html
- http://dist-sys.slack.com/
- http://hangops.slack.com/
- http://devopschat.slack.com/
- https://about.mattermost.com/
- https://blog.bolt.io/the-illustrated-guide-to-product-development-part-4-validation-1b5ab3aeaf35#.7a73prjby
- https://blog.acolyer.org/
- http://www.programmingresearch.com/coding-standards/misra/
- https://habrahabr.ru/post/274179/
- https://habrahabr.ru/post/249991/
- http://www.codingstandard.com/section/index/
- https://isocpp.org/faq
- https://isocpp.org/wiki/faq/const-correctness
- https://godbolt.org/
- https://htrd.su/wiki/zhurnal/2013/09/19/onlajn_kompiljatory_c/c_i_ne_tolko
- http://www.codingfail.com/cpp-internals-memory-layout/
- http://www.sco.com/developers/devspecs/gabi41.pdf
- http://www.sco.com/developers/devspecs/abi386-4.pdf
- http://sco.com/developers/gabi/latest/contents.html
- http://man7.org/linux/man-pages/man7/vdso.7.html
- https://0xax.gitbooks.io/linux-insides/content/SysCall/syscall-3.html
- https://0xax.gitbooks.io/linux-insides/
- https://www.raspberrypi.org/products/raspberry-pi-3-model-b/
- https://beagleboard.org/
- http://www.starterkit.ru/html/index.php?name=shop&op=view&id=107
- https://www.parallella.org/
- http://batteryuniversity.com/learn/
- https://en.wikipedia.org/wiki/Binary_blob
- https://en.wikipedia.org/wiki/Cross_compiler
- https://news.ycombinator.com/item?id=12742978
- http://www.elbrus.ru/arhitektura_elbrus
- http://mcst.ru/files/511cea/886487/1a8f40/000000/book_elbrus.pdf
- http://elinux.org/RPi_Software#Overview
- https://tfetimes.com/wp-content/uploads/2015/09/An_Introduction_to_GCC-Brian_Gough.pdf
- https://www.linaro.org/downloads/
- https://wiki.linaro.org/WorkingGroups/ToolChain/FAQ
- https://wiki.linaro.org/ABE
- https://buildroot.org/download.html
- https://medium.com/russian/%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D0%BC%D0%BE%D0%B9-%D1%82%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD-%D0%BD%D0%B5-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%81%D1%8F-%D0%B4%D0%BE-%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%B0%D0%BD%D0%B4%D1%80%D0%BE%D0%B5%D0%B4%D0%B0-e4cd5fa3fa85#.3ueaaupbx