Pull to refresh

Спутниковый спидометр на STM32F1 и FreeRTOS

Programming microcontrollers *
Sandbox
В статье речь пойдёт о самодельном спидометре, получающем сведения о текущей скорости автомобиля, его координатах и времени со спутников GPS. Статья также, надеюсь, поможет тем, что делает первые шаги в освоении 32х-разрядных микроконтроллеров с ядром Cortex M и хочет освоить одну из операционных систем реального времени (RTOS) для применения в своих наработках.
Читать дальше →
Total votes 23: ↑22 and ↓1 +21
Views 41K
Comments 18

Идеальная среда разработки для PIC — личный опыт

Programming *Eclipse *
Sandbox
В связи с нововведениями на сайте, решил наконец-то вылезти из подполья и написать что-нибудь полезное. Ну а поскольку я программирую разные микроконтроллеры (МК) и являюсь фанатом Eclipse, то решил про это и написать. Начну со своей истории знакомства с программированием PIC, а закончу советами тем, кто по долгу службы или в силу увлечения программирует на МК семейства PIC, хотя, впрочем, эти же советы сгодятся и для других архитектур МК.

В среду железячников я попал в 2006 году на 4-м курсе учёбы в университете, когда пошёл на производственную практику в научно-технический центр, где, собственно, и работаю по сей день. В то время в нашей компании мейнстримом было использование Keil uVision2 для МК на базе C51 и ARM. Однако мне подсовывали простые задачи под PIC, вроде контроля и управления одним сигналом (кнопка вкл-выкл), и моей первой средой разработки были блокноты — бумажный и компьютерный, плюс книжки бумажные по PIC. Выглядела моя среда разработки примерно так:



Для компиляции файлов мне выдали экзешник компилятора и bat-файл, который использовался мной совершенно бездумно — даже не знаю, что за компилятор там был. В общем, суровые были времена…
Читать дальше →
Total votes 26: ↑24 and ↓2 +22
Views 63K
Comments 9

PVS-Studio 2018: CWE, Java, RPG, macOS, Keil, IAR, MISRA

PVS-Studio corporate blog Java *C++ *Development for MacOS *Programming microcontrollers *

PVS-Studio 2018: CWE, Java, RPG, macOS, Keil, IAR, MISRA

Приближается 2018 год и пора подумать о новых направлениях развития нашего статического анализатора PVS-Studio. Сейчас наибольший интерес для нас представляет поддержка языка Java. Дополнительно мы рассматриваем возможность поддержки языка IBM RPG. Не менее интересно развить анализ C, C++ C# кода в направлении выявления потенциальных уязвимостей. Ещё нам хочется поддержать анализ C и C++ кода на платформе macOS, и, наконец, доделать поддержку компиляторов от компаний Keil и IAR. Никуда мы не денемся и от поддержки стандарта MISRA. Перечислено много, и на всё одного 2018 года нам не хватит. Поэтому давайте вместе с нами пообсуждаем наши планы и выберем самые приоритетные направления.
Читать дальше →
Total votes 43: ↑39 and ↓4 +35
Views 9.4K
Comments 88

Плата BLE400 и разработка под nRF51822

Wireless technologies *Programming microcontrollers *
Sandbox
Для разработки под микроконтроллер nRF51822 существует несколько комплектов от Nordic Semiconductor, все они достаточно дороги зато обеспечивают возможность удобной работы без возни с программаторами. При этом у китайских производителей можно обнаружить платы облегчающие отладку контроллеров за смешные деньги. Статья посвящена работе с клоном платы от Waveshare которая продаётся под названием BLE400.

Читать дальше →
Total votes 17: ↑17 and ↓0 +17
Views 9.4K
Comments 7

Статический анализатор кода PVS-Studio 6.22 адаптирован для ARM-компиляторов (Keil, IAR)

PVS-Studio corporate blog C++ *C *Robotics development *Programming microcontrollers *
Embedded bugs

PVS-Studio — это статический анализатор кода для поиска ошибок и потенциальных уязвимостей в коде программ на языке C, C++ и C#. Мы давно радуем читателей нашего блога проверкой открытых проектов и разбором найденных ошибок. Наши статьи имеют потенциал стать более интересными, так как анализатор научился проверять код встроенных устройств. Мы поддержали несколько ARM-компиляторов, про которые подробнее вы узнаете из статьи. Ошибки во встроенных устройствах и роботах могут быть более зрелищными, чем в прикладных программах. Ошибка во встроенном устройстве — это не просто падение/зависание программы или неправильная картинка. Это сошедший с ума Wi-Fi-чайник, который будет кипятить воду, пока она не выкипит и не сработает термопредохранитель. В общем, с ошибками в мире embedded-систем всё обстоит куда интереснее и страшнее.
Читать дальше →
Total votes 38: ↑35 and ↓3 +32
Views 6.4K
Comments 25

Сравнение компиляторов для разработки на микроконтроллерах с ядром ARM Cortex-M

Programming microcontrollers *IOT Electronics for beginners

В этой статье протестируем 3-и компилятора для микроконтроллеров Kinetis с ядром ARM Cortex-M4.
Запустим тесты CoreMark, Whetstone, Dhrystone.
Исследуем алгоритмы сжатия с минимальным потреблением ОЗУ и выясним как влияют на их быстродействие разные компиляторы.
И даже попытаемся узнать насколько отстает Kinetis по быстродействию от Intel Core I7.




Предыдущие статьи о разработке на микроконтроллерах Kinetis:

Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Views 22K
Comments 8

Начинаем изучать STM32 или Управляем светом по-умному

Smart House Electronics for beginners

Небольшое вступление


Однажды, заехав в очередную съемную квартиру, я столкнулся с определенным неудобством, которое достаточно сильно напрягало: выключатель света в основной комнате оказался за шкафом-стенкой, который был прикручен к стене, и его перестановка была невозможна т.к. на это требовалось значительно много времени и сил. Решить данную проблему хотелось очень сильно и в голову пришла одна мысль: сделать дистанционный пульт для управления освещением!

Именно с идеи создания собственного пультика для управления светом в комнате и началось моё увлечение электроникой, микроконтроллерами и различными радиоустройствами.
Читать дальше →
Total votes 45: ↑36 and ↓9 +27
Views 201K
Comments 203

Начинаем изучать STM32: Что такое регистры? Как с ними работать?

Electronics for beginners

Продолжаем рассмотрение базовых вопросов


В предыдущем уроке мы рассмотрели работу с битовыми операциями и двоичными числами, тем самым заложив основу для рассмотрения новой темы. В этом уроке мы с Вами рассмотрим очередной вопрос: что такое регистры и как с ними работать?


Читать дальше →
Total votes 33: ↑30 and ↓3 +27
Views 83K
Comments 42

Как защититься от переполнения стека (на Cortex M)?

C++ *C *Programming microcontrollers *
Если вы программируете на «большом» компьютере, то у вас такой вопрос, скорее всего, вообще не возникает. Стека много, чтобы его переполнить, нужно постараться. В худшем случае вы нажмёте ОК на окошке вроде этого и пойдете разбираться, в чем дело.

image

Но вот если вы программируете микроконтроллеры, то проблема выглядит немного иначе. Для начала нужно заметить, что стек переполняется.

В этой статье я расскажу о собственных изысканиях на эту тему. Поскольку я программирую в основном под STM32 и под Миландр 1986 — на них я и фокусировался.
Читать дальше →
Total votes 61: ↑60 and ↓1 +59
Views 23K
Comments 66

Post-mortem отладка на Cortex-M

C++ *C *Programming microcontrollers *

Post-mortem отладка на Cortex-M



Предыстория:


Участвовал я недавно в разработке нетипичного для меня девайса из класса потребительской электроники. Вроде ничего сложного, коробка, которая должна иногда выходить из спящего режима, отчитываться серверу и засыпать обратно.


Практика быстро показала, что отладчик не слишком помогает при работе с микроконтроллером, который постоянно уходит в режим глубокого сна или вырубает себе питание. В основном, потому что коробка в тестовом режиме стояла без отладчика и без меня рядом и иногда глючила. Примерно раз в несколько суток.


На соплях был прикручен отладочный UART, в который я стал выводить логи. Стало легче, часть проблем решилась. Но потом случился assert и все завертелось.

Читать дальше →
Total votes 24: ↑24 and ↓0 +24
Views 4.6K
Comments 8

Юнит-тесты в uVision Keil (и не только)

C++ *TDD *C *Programming microcontrollers *

КПДВ


Не утихают споры о том, нужны ли юнит-тесты вообще, а если нужны — то как именно их писать. Сначала писать код или сначала писать тесты? Допустимо ли нарушать инкапсуляцию при тестировании или же можно трогать только публичное API? Сколько процентов кода должно быть покрыто тестами?


Тестирование во встраиваемых системах тоже порождает немало споров. Точки зрения разнятся от "покрытие должно быть 100% + нужны испытательные стенды" до "какие еще тесты, я программу написал — значит все работает".


Я не хочу начинать холивар и вооще стараюсь придерживаться некоего разумного баланса. Поэтому для начала предлагаю рассмотреть самые "низко висящие" плоды, которые позволяет сорвать юнит-тестирование применительно к embedded-разработке.

Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Views 6.8K
Comments 34

Сравнение компиляторов ARMCC, IAR и GCC

Programming microcontrollers *
image
Я работаю над одним проектом, который с большим трудом вмещается в 64к памяти микроконтроллера. И подумалось мне, что возможно, пора взглянуть на разные компиляторы, чтобы выбрать какой более агрессивно может уменьшить размер программы.

Представляю вашему вниманию небольшое сравнение.
Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Views 11K
Comments 46

Интеграция PVS-Studio в uVision Keil

C++ *C *Programming microcontrollers *

Я занимаюсь разработкой для встраиваемых систем (в основном, под STM32 и Миландр), в качестве основной среды я использую uVision Keil. И, поскольку пишу я на С и С++, уже долгое время меня мучает вопрос – правильно ли я пишу код? Можно ли так?


Не, он конечно компилируется, но это же С++, язык, где «program is ill-formed, no diagnostic required» — это норма.


Соответственно, на протяжении нескольких лет я донимал руководство просьбами купить нам лицензию PVS-Studio и, наконец, когда моя просьба неожиданно совпала с моментом, когда нужно было срочно потратить выделенные на закупку ПО деньги, нам ее все-таки купили!


Радости моей с одной стороны не было предела, но с другой оказалось, что не все так хорошо; сходу PVS-Studio встраивается только в Visual Studio (что порадовало отдел разработки под десктопы) и продукты от Jetbrains (CLion, Rider, Idea, Android Studio), для некоторых других систем сборки тоже предусмотрены готовые сценарии, а вот для Keil’a заявлена только поддержка компилятора – и все. А значит, нужно заниматься интеграцией. Кто будет этим заниматься? Ну, мне же больше всех надо…


Читать дальше →
Total votes 24: ↑22 and ↓2 +20
Views 2.7K
Comments 5

STM32, CMSIS, CAN, Часть 1 — передача

C *Network standards *Programming microcontrollers *Studying in IT Electronics for beginners
Sandbox

Привет, сегодня мы будем настраивать отправку данных с помощью CAN (Controller Area Network). В интернете много информации о том, как настроить CAN использую HAL библиотеку, а в случае использования CMSIS информация обрывочна, по этой причине решил рассказать о своем опыте работы.

Принцип работы CAN-сети в этой статье разбирать не будем т.к. на просторах интернета существует большой объем материла (особенно мне нравится как написано тут) на эту тему, но по ходу повествования будем останавливаться на некоторых нюансах.

Ставим себе задачу: заставить контроллер периодически отправлять кадры в CAN-сеть с скоростью передачи 250 кБит/с, со стандартной длиной идентификатора (11 бит) с полем данных размеров 8 байт.

Читать далее
Total votes 21: ↑18 and ↓3 +15
Views 14K
Comments 23

Попытки в блог №0. Начало: embedded разработка и как я очутился на Хабре

C++ *C *Programming microcontrollers *
Sandbox

Спустя полтора года опыта работы в embedded разработке в большом соло-проекте, в который меня совсем зелёного, ещё не окончившего университет, бросили сразу после собеседования в первой понравившейся мне компании, вдруг пришло в голову осознание: "нужен код-ревью!". Предпосылкой к этому стало то, что я почти закончил проект и подумал начать его рефакторить. Именно это подтолкнуло меня решиться попробовать оформить мысли в блог, в котором кто-то найдёт для себя идеи, как не надо делать (а где-то, наоборот, как надо), а я смогу разложить по полочкам всё то, что крутится у меня самого в голове.

Читать далее
Total votes 14: ↑12 and ↓2 +10
Views 4.4K
Comments 23

Как разместить переменную по определенному адресу в Keil

System Programming *Programming microcontrollers *
Tutorial

Иногда возникает задача сохранить во flash памяти контрольную сумму, картинку, строчку текста, настройку. А ещё иногда возникает задача сохранить переменную не просто в ОЗУ, а в определенных адресах. Или например иметь функцию, исполняемую из ОЗУ чтобы можно было присылать по UART и сразу исполнять новый код функции. Рассмотрим эти задачи на примерах.

Читать далее
Total votes 17: ↑15 and ↓2 +13
Views 3.2K
Comments 23