-
- Основная статья расходов это зарплата. STMicroelectronics -
огромная корпорация, отличительной чертой которой является найм
дешевой рабочей силы из Туниса, Морокко, Сингапура, Индии. (Также
как Microchip или Microsoft забиты ныне под завязку индусами).
Сейчас понятие "дешевый программист" включает девочек бывших
студенток (в основном не белых). Во всем этом легко убедиться, если
почитать ответы на ST форуме, посмотреть авторов комитов и
загуглить юмора ради имя. Так что RxTx(429 знак., 10.10.2020 16:00)
- Соглашусь. Впервые в жизни познакомился с "индусским кодом", и, что
характерно, сразу его узнал. Комменты - прямо феерия. Большую часть
можно просто удалить. Но у библиотек ST есть три очень серьёзных
достоинства. 1. Они работают. 2. Они хорошо документированы
(HAL/LL). 3. Они работают с железом, документация на которое
написана не слишком понятно (индусский текст), и являются отличным
дополнением к такому описанию. Да и вообще, периферия очень сложная
(и порождающая teap0t(211 знак., 10.10.2020 17:50)
- Достоинство у них одно.Они есть. - PlainUser(11.10.2020 11:42)
- Всё верно, написал к тому, чтобы не было отношения как к чему-то идеальному и вообще, иконе стиля... - RxTx(10.10.2020 21:03)
- В ST же должны одни месье и д’Артаньяны работать :-) - OlegPowerC(10.10.2020 17:18)
- А потом мне говорят , чего ты пишешь велосипед. - OlegPowerC(10.10.2020 16:41)
- Если некое средство пользуется спросом, то со временем оно
допиливается. Скажем, IAR тоже когда-то был "поделкой финских
студентов" :). - Kceния(10.10.2020 16:08)
- Справедливости ради, "финские студенты" - таки бренд. Cкpипaч(18 знак., 10.10.2020 16:22)
- Китайцев еще забыли упомянуть :) - Kceния(10.10.2020 16:23)
- В программировании, не сталкивался. - Cкpипaч(10.10.2020 16:48)
- Полно - OlegPowerC(10.10.2020 16:52)
- И как они? Могут? - Cкpипaч(10.10.2020 17:17)
- Vue.js, к примеру, вполне себе всемирно используемый китайский
продукт. - lloyd(11.10.2020 08:06)
- Мне оно всегда не нравилось. Пустая абстракция. - fk0(11.10.2020 11:26)
- По реакту угораешь? - lloyd(11.10.2020 19:15)
- Согласен с Арамисом , хотя использую, потому что времени на другое нет, а так полимер чистый можно использовать - OlegPowerC(11.10.2020 12:32)
- Мне оно всегда не нравилось. Пустая абстракция. - fk0(11.10.2020 11:26)
- Ну на мой взгляд лучше чем индусы , хотя как в анекдоте - Армяне лучше чем Грузины - OlegPowerC(10.10.2020 17:19)
- Vue.js, к примеру, вполне себе всемирно используемый китайский
продукт. - lloyd(11.10.2020 08:06)
- И как они? Могут? - Cкpипaч(10.10.2020 17:17)
- Полно - OlegPowerC(10.10.2020 16:52)
- В программировании, не сталкивался. - Cкpипaч(10.10.2020 16:48)
- Китайцев еще забыли упомянуть :) - Kceния(10.10.2020 16:23)
- Справедливости ради, "финские студенты" - таки бренд. Cкpипaч(18 знак., 10.10.2020 16:22)
- Соглашусь. Впервые в жизни познакомился с "индусским кодом", и, что
характерно, сразу его узнал. Комменты - прямо феерия. Большую часть
можно просто удалить. Но у библиотек ST есть три очень серьёзных
достоинства. 1. Они работают. 2. Они хорошо документированы
(HAL/LL). 3. Они работают с железом, документация на которое
написана не слишком понятно (индусский текст), и являются отличным
дополнением к такому описанию. Да и вообще, периферия очень сложная
(и порождающая teap0t(211 знак., 10.10.2020 17:50)
- Тупо не было в хедере на проц значений из enum. Извратились по месту как умели - Vit(05.10.2020 18:24)
- В CubeMX всюду одна и та же система: пользователь выражает свои
требования путем заполнения полей соответствующий заданию структуры
предназначенными для этой цели мнемониками. Типа анкету заполняет.
А затем отсылает ее на исполнение соответствующей функции
XXXXX_Init(эта структура). После чего функция инициализации либо
выполнит требования пользователя, либо откажется, вернув ошибку. Те
случаи, когда внутри кода этой функции используется "косвенная
адресация" относятся Kceния(397 знак., 04.10.2020 19:39)
- Не, это уже другой уровень абстракции при написании софта. Я пока
поближе к железу. - teap0t(04.10.2020 20:43)
- йцyкeн прав - это не ради повышения уровня абстракции сделано. Но в отличие от него я знаю зачем :). Во-первых, для контроля устанавливаемых параметров: здесь все поля структуры имеют свои/разные типы, а допустимые для них параметры определены через enum, благодаря чему чужой параметр или произвольное число из головы туда не подставишь. Но главное - второе, это особенность архитектуры ARM, когда большинство периферийных регистров не имеют жесткой специализации (как, Kceния(788 знак., 05.10.2020 14:56)
- Да в том-то и глупость, что это не другой уровень абстракции. Это
тот же уровень, только регистры периферии заменены на поля
структуры. Зачем - непонятно. - йцyкeн(04.10.2020 21:30)
- Затем, что один и тот же код должен одинаково работать на всех STM
микроконтроллерах. Используя прямую запись в регистры построить
такой код не удастся. - RxTx(10.10.2020 15:30)
- Такого даже ПИКи себе не позволяют, чего уж ожидать от СТМов. - Kpoк(11.10.2020 22:48)
- - Ну хорошо, вы не помните, как попали в самолёт. Но как вы вышли оттуда, вы должны помнить? - Помнить должен. Но не помню. - йцyкeн(10.10.2020 16:56)
- Они решают это типичным паттерном "вызов API-функции". Программист заполняет ряд параметров. Так как их много это поля структуры. Этим высказывается абстрактное намерение. Затем вызывается API функция инициализации. Функция находится в файле отвечающем за обслуживание конкретного семейства, поэтому извне она черный ящик, абстрагирующий параметры(поля структуры) от регистров и особенностей инициализации семейства. - RxTx(10.10.2020 16:07)
- Не думаю, что о совместимости кода для всех STM-контроллеров кто-то
заботится. Уж который раз CubeMX перелицовывают - старые проекты
давно уже не компилируются его новыми версиями (хотя всегда можно
достать старую - она по согласию заливается, если на новую версию
переходить отказываешься). Хуже другое - меняются не только сами
структуры (например, у STM32F4 в структуре больше полей, чем у
STM32F1), но и многочисленные списки enum, которые в эти поля
подставляются. Например, Kceния(123 знак., 10.10.2020 16:05)
- Заботятся. Но как всегда, получается не очень. Суть содержится в
самом названии HAL - Hardware Abstraction Layer, Слой абстракции от
железа. - RxTx(10.10.2020 16:08)
- Микроконтроллеры - такая область, где абстрагироваться от железа
никак нельзя, а абстракционисты переходят на Linux. :) - Kceния(10.10.2020 16:11)
- Ну можно долго и со вкусом все это обсуждать, все эти тезисы :) На мой взгляд STMicroelectronics решают задачу по удешевлению процесса сопровождения линейки своих микроконтроллеров. - RxTx(10.10.2020 21:20)
- Хреновый из вас программист - evgeniy1294(10.10.2020 16:46)
- Вы сами на регистрах пишите :), каков уж тут уровень абстракции. - Kceния(10.10.2020 17:20)
- Микроконтроллеры - такая область, где абстрагироваться от железа
никак нельзя, а абстракционисты переходят на Linux. :) - Kceния(10.10.2020 16:11)
- Заботятся. Но как всегда, получается не очень. Суть содержится в
самом названии HAL - Hardware Abstraction Layer, Слой абстракции от
железа. - RxTx(10.10.2020 16:08)
- Очень понятно. Потом исчезнуть библиотеки и "Reference manuals", и
АГА! Сначала примеры по применению, потом библиотеки в исходниках,
потом в бинарниках, потом без описания аппаратуры. "Здравствуй,
бабушка!". - teap0t(04.10.2020 22:05)
- Дык это уже давным-давно так в железе, которое "только под линух".
По телефону в техподдержку. - SciFi(04.10.2020 22:08)
- И не всем это нравится. - teap0t(04.10.2020 22:39, ссылка)
- Дык это уже давным-давно так в железе, которое "только под линух".
По телефону в техподдержку. - SciFi(04.10.2020 22:08)
- Разве не это позволяет драйверу периферии работать с несколькими
группами регистров, например UART ? - VLLV(04.10.2020 21:47)
- Не понял вопроса. Моя идея в том, что драйвер нужен там, где есть
нетривиальная логика, например USB. "Драйвер", представляющий
обёртку нулевой толщины вокруг обращения к регистру, мне лично не
нужен. Меня не задирает написать I2C1->DR = byte1; - йцyкeн(04.10.2020 22:33)
- А мне нужен. Если в контроллере 3 УАРТа, зачем писать
UART1->DR = byte1, UART2->DR = byte1, UART3->DR =
byte1 вместо uart->DR = byte1? - VLLV(04.10.2020 22:59)
- КО сообщает, что в паре PERIPHERAL->REGISTER мы возмущаемся
бессмысленной заменой REGISTER на поле InitForDummies в какой-то
странной структуре. Использование переменной-указателя вместо
PERIPHERAL не только не осуждается, но и приветствуется. - SciFi(04.10.2020 23:05)
- Похоже, я теряю обоняние и ничего не соображаю, но высказаться
хочется :( - VLLV(05.10.2020 11:21)
- Вот только не надо самокопанием заниматься, до добра не доведёт :-) - SciFi(05.10.2020 11:23)
- Похоже, я теряю обоняние и ничего не соображаю, но высказаться
хочется :( - VLLV(05.10.2020 11:21)
- КО сообщает, что в паре PERIPHERAL->REGISTER мы возмущаемся
бессмысленной заменой REGISTER на поле InitForDummies в какой-то
странной структуре. Использование переменной-указателя вместо
PERIPHERAL не только не осуждается, но и приветствуется. - SciFi(04.10.2020 23:05)
- "Не в совокупности ищи единства, но более — в единообразии разделения". - teap0t(04.10.2020 22:41)
- А мне нужен. Если в контроллере 3 УАРТа, зачем писать
UART1->DR = byte1, UART2->DR = byte1, UART3->DR =
byte1 вместо uart->DR = byte1? - VLLV(04.10.2020 22:59)
- Не понял вопроса. Моя идея в том, что драйвер нужен там, где есть
нетривиальная логика, например USB. "Драйвер", представляющий
обёртку нулевой толщины вокруг обращения к регистру, мне лично не
нужен. Меня не задирает написать I2C1->DR = byte1; - йцyкeн(04.10.2020 22:33)
- +1. Я это называю "пустая абстракция". Лишняя сущность. - Cкpипaч(04.10.2020 21:35)
- Затем, что один и тот же код должен одинаково работать на всех STM
микроконтроллерах. Используя прямую запись в регистры построить
такой код не удастся. - RxTx(10.10.2020 15:30)
- Это не абстракция. Это "двое из ларца" для бедных, т.е. тех, у кого нет денег на оплату услуг настоящих двоих из ларца. - SciFi(04.10.2020 20:54)
- Не, это уже другой уровень абстракции при написании софта. Я пока
поближе к железу. - teap0t(04.10.2020 20:43)
- Конструкция типа EXTI_InitStruct->EXTI_Mode это обращение к
полю структуры с именем EXTI_Mode, на которую указывает
EXTI_InitStruct, всё это эквивалентно (*EXTI_InitStruct).EXTI_Mode ЫЫyкпy(187 знак., 04.10.2020 16:47)
- Вот это вот - адресная арифметика. teap0t(590 знак., 04.10.2020 17:39)
- Подобные манипуляции с указателями без всякой на то необходимости -
однозначно говнокод и потенциальный глюкодром при использовании. ЫЫyкпy(445 знак., 04.10.2020 19:05 - 19:27)
- Ключевые слова - "без всякой на то необходимости". В данном случае
я действительно не вижу необходимости. С другой стороны, я вообще
не вижу нужды в SPL/HAL/LL. Мне кажется, писать напрямую в регистры
короче и понятнее. Вот код из реального проекта: йцyкeн(630 знак., 04.10.2020 19:58)
- Пасиба за пример, но я просто хотел узнать мнение народа о таком
способе работы. Всё сложно. Мне такое неявное хранение и
использование смещений не ндравится совсем. Т.е. к косвенному
обращению у меня, понятно, претензий нет, но делаться такое
обращение должно максимально чётко и однозначно, а мешать в одном
if-е прямое и косвенное обращение по-моему недопустимо. Но я же
должен спросить. Вон как все возбудились, даже Евгений новый диск
прокрутил. - teap0t(04.10.2020 20:41)
- Язык Си знаменит тем, что если программист непременно хочет выстрелить себе в ногу, компилятор ему мешать не будет. Это не баг, это фичер, который позволяет писать на Си то, что иначе пришлось бы писать на ассемблере. Но это не повод палить из этого ружья направо и налево. - йцyкeн(04.10.2020 21:27)
- Пасиба за пример, но я просто хотел узнать мнение народа о таком
способе работы. Всё сложно. Мне такое неявное хранение и
использование смещений не ндравится совсем. Т.е. к косвенному
обращению у меня, понятно, претензий нет, но делаться такое
обращение должно максимально чётко и однозначно, а мешать в одном
if-е прямое и косвенное обращение по-моему недопустимо. Но я же
должен спросить. Вон как все возбудились, даже Евгений новый диск
прокрутил. - teap0t(04.10.2020 20:41)
- Это пример для их STM32L-Discovery. Код 2015 года. Библиотека STM32L1xx_StdPeriph_Driver . teap0t(16 знак., 04.10.2020 19:14, ссылка, ссылка)
- Ключевые слова - "без всякой на то необходимости". В данном случае
я действительно не вижу необходимости. С другой стороны, я вообще
не вижу нужды в SPL/HAL/LL. Мне кажется, писать напрямую в регистры
короче и понятнее. Вот код из реального проекта: йцyкeн(630 знак., 04.10.2020 19:58)
- Я бы обернул эту арифметику в пару функций. Чтобы, если реальность
покажет какие-либо минусы, переиграть было не сложно. - Cкpипaч(04.10.2020 18:10)
- Обернуть в пару функций именно действия по модификации адреса?
Сделать аналог итератора ? - teap0t(04.10.2020 19:22, ссылка)
- Да. Итератора или просто set/get. - Cкpипaч(04.10.2020 21:28)
- Ок. Согласен полностью. - teap0t(04.10.2020 21:57)
- Да. Итератора или просто set/get. - Cкpипaч(04.10.2020 21:28)
- MISRA C явно запрещает указательную арифметику, вопрошающему это
принципиально. - evgeniy1294(04.10.2020 18:24)
- Не припомню таких запретов. IAR в дефолтном режиме MISRA2004 ошибок
не находит. - teap0t(04.10.2020 19:17)
- Array indexing is the only acceptable form of pointer arithmetic, because it is clearer and hence less error prone than pointer manipulation. This rule bans the explicit calculation of pointer values. Array indexing shall only be applied to objects defined as an array type. Any explicitly calculated pointer value has the potential to access unintended or invalid memory addresses. Pointers may go out of bounds of arrays or structures, or may even point to effectively arbitrary evgeniy1294(30 знак., 04.10.2020 19:34)
- Вопрос звучал так: "А если очень хочется, то?". Ответ: Если "очень
хочется, оборачивай в функции (или объекты)". Аккуратно
задокументированное нарушение правил, нарушением не является :) - Cкpипaч(04.10.2020 18:28)
- Боинги падают, теслы разбиваются - evgeniy1294(04.10.2020 18:31)
- Поскольку они это делают по правилам (падают и разбиваются), все причастные имеют на хлеб с маслом. - Evgeny_CD(04.10.2020 19:07)
- Боинги падают, теслы разбиваются - evgeniy1294(04.10.2020 18:31)
- Не припомню таких запретов. IAR в дефолтном режиме MISRA2004 ошибок
не находит. - teap0t(04.10.2020 19:17)
- Обернуть в пару функций именно действия по модификации адреса?
Сделать аналог итератора ? - teap0t(04.10.2020 19:22, ссылка)
- Тут всё вроде бы на поверхности, подводных камней не видно. Пусть
будет. Наверняка нарушает приблизительно 37 правил мисры, но это
другой вопрос. - SciFi(04.10.2020 17:50)
- С дефолтным набором флажков на закладке MISRA2004 в IAR ошибок нет. - teap0t(04.10.2020 19:08)
- Я с мисрой почти не знаком, но какие-то правила на глаза
попадались. Некоторые из них машина проверить не может, КМК. Ну,
шибко умная может, наверное, но вы меня поняли, надеюсь. - SciFi(04.10.2020 20:15)
- У IAR руководство прилагается, которое я тут цитирую. Там прямо
указано что проверяется и как обходить, если что. Но исходно вопрос
(который #15) не о "стандартах", а о "практиках". Скрипач сразу врубился, но оценку, что характерно, не дал. - teap0t(04.10.2020 20:47)
- Нужно оценку? "Семь с плюсом", устроит? :) Cкpипaч(466 знак., 04.10.2020 21:26)
- Давно живу. Вы не любите давать оценки. Предпочитаете за притчи
прятаться. Я без осуждения, просто это ваш почерк. Цифровой след,
если хотите. Он вас отличает от других. - teap0t(04.10.2020 22:01)
- Считаю "оценки" банальным хамством. Обсуждение это обмен аргументами и гипотезами, а не оценками.
Обсуждение должно быть завершено как только специальный человек
(руководитель) примет решение. И начнется демократический централизм плюс самодисциплина. Cкpипaч(174 знак., 04.10.2020 22:13)
- Я в корневом посте (#15) просил пояснить, является ли некий приём
программирования "говнокодом" или нет. Это был основной мой
интерес. Я понял, что является, но "на косвенных". - teap0t(04.10.2020 22:16)
- "Говнокод" это последовательность синтаксических конструкций, очень неэффективно использующая ресурсы (по сравнению с
референсной) или корректная лишь для части возможных входных
данных. Cкpипaч(302 знак., 04.10.2020 22:40)
- Вот с последним предложением целиком и полностью. Ибо если енум
называется "режим", а содержит смещение, то это идеологически
неправильно. - teap0t(04.10.2020 22:44)
- К слову, в C++ использование enum дает квази-строгую типизацию. В
enum нельзя просто так записать int, скрытое приведение типа не
сработает. Cкpипaч(183 знак., 04.10.2020 22:53)
- Строгя типизация в C++ работает не для enum, а для enum class. Это разные сущности. - evgeniy1294(04.10.2020 23:56)
- К слову, в C++ использование enum дает квази-строгую типизацию. В
enum нельзя просто так записать int, скрытое приведение типа не
сработает. Cкpипaч(183 знак., 04.10.2020 22:53)
- Вот с последним предложением целиком и полностью. Ибо если енум
называется "режим", а содержит смещение, то это идеологически
неправильно. - teap0t(04.10.2020 22:44)
- "Говнокод" это последовательность синтаксических конструкций, очень неэффективно использующая ресурсы (по сравнению с
референсной) или корректная лишь для части возможных входных
данных. Cкpипaч(302 знак., 04.10.2020 22:40)
- Я в корневом посте (#15) просил пояснить, является ли некий приём
программирования "говнокодом" или нет. Это был основной мой
интерес. Я понял, что является, но "на косвенных". - teap0t(04.10.2020 22:16)
- Считаю "оценки" банальным хамством. Обсуждение это обмен аргументами и гипотезами, а не оценками.
Обсуждение должно быть завершено как только специальный человек
(руководитель) примет решение. И начнется демократический централизм плюс самодисциплина. Cкpипaч(174 знак., 04.10.2020 22:13)
- Давно живу. Вы не любите давать оценки. Предпочитаете за притчи
прятаться. Я без осуждения, просто это ваш почерк. Цифровой след,
если хотите. Он вас отличает от других. - teap0t(04.10.2020 22:01)
- Нужно оценку? "Семь с плюсом", устроит? :) Cкpипaч(466 знак., 04.10.2020 21:26)
- У IAR руководство прилагается, которое я тут цитирую. Там прямо
указано что проверяется и как обходить, если что. Но исходно вопрос
(который #15) не о "стандартах", а о "практиках". Скрипач сразу врубился, но оценку, что характерно, не дал. - teap0t(04.10.2020 20:47)
- Я с мисрой почти не знаком, но какие-то правила на глаза
попадались. Некоторые из них машина проверить не может, КМК. Ну,
шибко умная может, наверное, но вы меня поняли, надеюсь. - SciFi(04.10.2020 20:15)
- С дефолтным набором флажков на закладке MISRA2004 в IAR ошибок нет. - teap0t(04.10.2020 19:08)
- Подобные манипуляции с указателями без всякой на то необходимости -
однозначно говнокод и потенциальный глюкодром при использовании. ЫЫyкпy(445 знак., 04.10.2020 19:05 - 19:27)
- Вот это вот - адресная арифметика. teap0t(590 знак., 04.10.2020 17:39)
Это "библиотечная" реализация, видимо индус сделал так, чтобы не зависить от именования регистров Interrupt и Event в CMSIS для разных микроконтроллеров.Хотя не совсем, я ошибся. Там смысл такой: evgeniy1294(903 знак., 04.10.2020 15:32 - 15:55)- Это ответ "для чего", а мне интересна оценка подхода к построению кода. - teap0t(04.10.2020 16:04)
- Это код для работы с регистрами периферии (линиями внешних
прерываний) в STM32 и к CMSIS не относится. Лень и "оптимизация"
часто следуют вместе, но вопрос о правильности (допустимости)
подхода, или, наоборот, необходимости всяческого уклонения и
недопущения. - teap0t(04.10.2020 15:40)
- Поправил ответ. Вообще подход не очень, я бы записал через условие: evgeniy1294(914 знак., 04.10.2020 16:04 - 16:20)
- Такой код завернёт MISRA: у кейса должно быть не менее трёх веток.
Ассерт на входе есть. С этим там строго. - teap0t(04.10.2020 16:07)
- Тут сразу вопрос в вам. А MISRA разве не запрещает приводить число
к сырому указателю или работать с памятью через смещение от этого
указателя? Смысл моего вопроса в том, что CMSIS генерируется
машиной и позволяет работать с размеченной памятью: evgeniy1294(461 знак., 04.10.2020 16:39)
- Использование указателей должно быть ограничено. Допустимо не более одного уровня разыменования. Операторы разыменования не должны быть скрыты в макро или внутри typedef. Указатели на функции запрещены. - Бoмж(10.10.2020 21:41)
- IAR с дефолтными переключателями MISRA2004 ошибок не видит. Об
адресной арифметике я и спрашиваю. Она очень неочевидная. - teap0t(04.10.2020 17:42)
- Стандарт MISRA создан для высокоответственных применений,
указательная арифметика в нем явно запрещена, отсюда ни одно code
review (аудит) такой код не пройдет. Возможно стоит подергать
настройки, если IAR все равно не видит проблем, значит анализатор
кода в нем - говно. А ведь он сертифицирован. - evgeniy1294(04.10.2020 18:24)
- Rule 17.1 Pointer arithmetic shall only be applied to pointers
that address an array or array element . Цитируется по руководству IAR. Здесь это правило соблюдается. teap0t(04.10.2020 19:27, картинка)
- Здесь нет массива или элемента массива, просто что-то в памяти. - evgeniy1294(04.10.2020 19:35)
- Rule 17.1 Pointer arithmetic shall only be applied to pointers
that address an array or array element . Цитируется по руководству IAR. Здесь это правило соблюдается. teap0t(04.10.2020 19:27, картинка)
- Стандарт MISRA создан для высокоответственных применений,
указательная арифметика в нем явно запрещена, отсюда ни одно code
review (аудит) такой код не пройдет. Возможно стоит подергать
настройки, если IAR все равно не видит проблем, значит анализатор
кода в нем - говно. А ведь он сертифицирован. - evgeniy1294(04.10.2020 18:24)
- Я привел пример для наглядности, в библиотеках часто всречаются списки из 5, 6 и более возможных параметров, так что switch-case будет нужен, в котором обязательно должна быть ветка default. Требование не менее трех веток в чем то логично - можно заменить на условие, такой пример также приведен. - evgeniy1294(04.10.2020 16:22)
- Тут сразу вопрос в вам. А MISRA разве не запрещает приводить число
к сырому указателю или работать с памятью через смещение от этого
указателя? Смысл моего вопроса в том, что CMSIS генерируется
машиной и позволяет работать с размеченной памятью: evgeniy1294(461 знак., 04.10.2020 16:39)
- Такой код завернёт MISRA: у кейса должно быть не менее трёх веток.
Ассерт на входе есть. С этим там строго. - teap0t(04.10.2020 16:07)
- Поправил ответ. Вообще подход не очень, я бы записал через условие: evgeniy1294(914 знак., 04.10.2020 16:04 - 16:20)
- Основная статья расходов это зарплата. STMicroelectronics -
огромная корпорация, отличительной чертой которой является найм
дешевой рабочей силы из Туниса, Морокко, Сингапура, Индии. (Также
как Microchip или Microsoft забиты ныне под завязку индусами).
Сейчас понятие "дешевый программист" включает девочек бывших
студенток (в основном не белых). Во всем этом легко убедиться, если
почитать ответы на ST форуме, посмотреть авторов комитов и
загуглить юмора ради имя. Так что RxTx(429 знак., 10.10.2020 16:00)