Pull to refresh
66
0
Анастасия Шишова @ana_lazareva

Программист

Send message

Многоликий const

Reading time2 min
Views136K
Ключевое слово const — одно из самых многозначных в C++. Правильно использование const позволяет организовать множество проверок ещё на этапе компиляции и избежать многих ошибок из числа тех, которые бывает трудно найти при помощи отладчиков и/или анализа кода.

Первая половина заметки рассчитана скорее на начинающих (надеюсь мнемоническое правило поможет вам запомнить, где и для чего используется const), но, возможно, и опытные программисты смогут почерпнуть интересную информацию о перегрузке методов по const.

Читать дальше →
Total votes 50: ↑45 and ↓5+40
Comments34

Спецификатор constexpr в C++11 и в C++14

Reading time16 min
Views209K
Одна из новых возможностей C++11 — спецификатор constexpr. С помощью него можно создавать переменные, функции и даже объекты, которые будут рассчитаны на этапе компиляции. Это удобно, ведь раньше для таких целей приходилось использовать шаблоны. Но тут все не так просто. У тех, кто не так хорошо знаком с constexpr, может сложиться впечатление, что теперь не будет никаких проблем с расчетами на этапе компиляции. Но на constexpr-выражения наложены серьезные ограничения.

В первой части будет рассказано про constexpr, о том, какие будут изменения в стандарте C++14, а во второй части будет пример использования constexpr: библиотека, которая считает результат математического выражения в строке.
С помощью нее можно будет написать следующий код:
constexpr auto x = "(4^2-9)/8+2/3"_solve;
std::cout << "Answer is " << x;

И ответ в виде дроби будет получен на этапе компиляции:
Answer is 37/24
Сразу предупреждаю, код этой библиотеки сложно понять.
Кому эта тема интересна, добро пожаловать под кат!
Читать дальше →
Total votes 53: ↑52 and ↓1+51
Comments45

Начало работы с TI CC13xx-CC26xx и Contiki под Code Composer Studio

Reading time4 min
Views17K
Последнее время тематика интернета вещей становится все более и более горячей — однако в большинстве случаев, если речь заходит о работе с какими-то базовыми аппаратными решениями, то беседа сводится либо к готовым модулям, либо, реже, к чипам выпуска прошлых лет. Тем временем, в 2015 году компания Texas Instruments выпустила очередную линейку систему на кристале CC13xx-CC26xx — крайне интересных с точки зрения соотношения производительности, энергопотребления и возможностей. Эти випы имеют на борту основное ядро ARM Cortex-M3, второе ядро Cortex-M0, эксклюзивно обслуживающее радиочасть, и… да, ещё и третье ядро — собственное 16-битное ядро TI для работы с периферией, так называемый Sensor Controller. При этом и по энергопотреблению комбайн получился крайне скромным — даже радиочасть значительно убавила по сравнению с чипами предыдущего поколения, CC2538.

Мы уже писали обзор существующих стандартов связи, в котором остановились на наиболее современном стандарте 6loWPAN. Данный стандарт описывает сетевой и транспортный уровни модели OSI, а физический и канальный уровни стандартизованы IEEE 802.15.4. Texas Instruments позаботились о нас, и отдали обработку MAC-уровня отдельному ядру Cortex-M0. Остальные уровни нужно обрабатывать на Cortex-M3. И тут нам на помощь приходит операционная система реального времени Contiki, в которой реализована поддержка стека 6loWPAN.

image

Однако традиционная проблема с новыми чипами — нехватка «коллективного опыта», то есть подробных описаний работы с ними, обхода багов и тому подобных вещей.

Что ж, будем его восполнять. Начнём с базового — сборка и отладка операционной системы Contiki для чипов CC2650. Допустим, мы еще любим красивые графические среды и отладку в них. Поэтому мы будем собирать Contiki под TI Code Composer Studio 6. Я пользуюсь Ubuntu 14.04 X86_64 для разработки, шаги под Windows будут очень похожи, за исключением установки тулчейна. В конце есть немного вкусностей...
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments9

Полнофункциональный драйвер SDHC карты памяти для Stm32f4 (часть 1)

Reading time14 min
Views100K

Для чего эта статья?


Все эмбеддеры, рано или поздно, сталкиваются с проблемой нехватки ПЗУ микроконтроллера для своих проектов. Ну банально, Вам нужно разработать систему управления простеньким ЧПУ станком, где управляющая программа хранится на самом девайсе или систему сбора данных, скажем, от датчиков какого-нибудь эксперимента – очевидно, что микроконтроллер изначально не предназначался для хранения таких массивов информации.
Читать дальше →
Total votes 43: ↑43 and ↓0+43
Comments18

Как узнать какие цветы дарить девушке, если у нее двигается только голова и она не может говорить?

Reading time3 min
Views73K
Всем привет! Я Иван Бакаидов. И сейчас я расскажу как я помогаю людям с двигательными нарушениями и нарушениями речи. Но сначала немного обо мне:

  • Мне 17 лет
  • ДЦП — у меня самопроизвольно сокращаются мышцы тела… Все
  • Неразборчивая речь. Понимают только мама, брат и одноклассница
  • Node.js, Java, Android dev, Unity3d
  • Выступал на гуманитарном саммите ООН с посланием о правах человека с нарушениями речи и важности AAC

image

Читать дальше →
Total votes 314: ↑310 and ↓4+306
Comments84

USB mass storage device и libopencm3

Reading time7 min
Views23K

image




Моя работа связана с программированием микроконтроллеров, в частности STM32. Долгое время для работы с периферией я использовала STM32 Standard Peripheral Library, так как она предоставляется производителем и, соответственно, является наиболее полной. Однако работать с ней крайне неудобно: инициализирующие структуры зачастую избыточны, в функциях черт ногу сломит, в общем, очень скоро появляется непреодолимое желание слезть с этой библиотеки и перейти на что-нибудь более аккуратное, грамотно спроектированное и написанное «чистым кодом».

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

Одной из последних задач на работе было поднять USB MSD. Для решения задачи использовалась отладочная плата STM32F4-discovery и вот этот пример. Пример не завелся. Проблем было две:
1. Было невозможно зайти на диск и прочитать находящийся там файл.
2. Распознавание устройства как дискового занимало более 2-х минут.

Все это было связано с наличием нескольких багов в файле usb_msc.c. Таким образом, в данной статье я расскажу о том, как исправить эти ошибки и продолжать с удовольствием пользоваться библиотекой libopencm3.
Читать дальше →
Total votes 26: ↑26 and ↓0+26
Comments21

Два в одном: USB хост и составное USB устройство

Reading time12 min
Views33K

image



Не так давно, была опубликована статья «Пастильда — открытый аппаратный менеджер паролей». Так как данный проект является открытым, то мы решили, что будет интересно, если мы будем писать небольшие заметки о процессе проектирования, о задачах, которые перед нами стоят и о трудностях, с которыми мы сталкиваемся.

Основная суть Пастильды заключается в том, что она является своеобразным переходником между клавиатурой и ПК. Таким образом, она должна уметь:
  • быть USB хостом для клавиатуры, которая к ней подключается,
  • быть клавиатурой для ПК, чтобы либо перенаправлять сообщения от реальной клавиатуры, либо самой быть клавиатурой,
  • быть дисковым накопителем, чтобы можно было редактировать базу данных паролей в удобном для человека виде.

Данный функционал является скелетом нашего проекта, поэтому первая заметка будет посвящена именно ему.
Читать дальше →
Total votes 35: ↑35 and ↓0+35
Comments63

Расшифровка базы данных KeePass: пошаговое руководство

Reading time9 min
Views89K

image


На днях мне нужно было реализовать расшифровку базы данных KeePass. Меня поразило то, что нет ни одного документа и ни одной статьи с исчерпывающей информацией об алгоритме расшифровки файлов .kdb и .kdbx с учетом всех нюансов. Это и побудило меня написать данную статью.


На данный момент существует 2 версии KeePass:


  • KeePass 1.x (генерирует файлы .kdb);
  • KeePass 2.x (генерирует файлы .kdbx).

Структура файла с базой данных KeePass (.kdb, .kdbx) состоит из 3 частей:


  • Подпись (не зашифрована);
  • Заголовок (не зашифрован);
  • Данные (зашифрованы).

Далее я подробно расскажу о том, как дешифровать базу данных KeePass 1.x и KeePass 2.x.

Читать дальше →
Total votes 67: ↑67 and ↓0+67
Comments39

Автоматизация лабораторных измерений

Reading time5 min
Views7.3K
Я аспирант института металлофизики, занимаюсь исследованием свойств различных металлов и сплавов. Процесс измерения и анализа, как правило трудоемкий, и требует много рутинной работы. В связи с этим была выполнена автоматизация установки для исследования оптических свойств металлов. О том, как это было, расскажу дальше в публикации.


Читать дальше →
Total votes 18: ↑16 and ↓2+14
Comments13

Пастильда — открытый аппаратный менеджер паролей

Reading time5 min
Views59K
Pastilda — open source аппаратный USB менеджер паролей

Немало заметок и обсуждений посвящены непростому вопросу безопасного хранения паролей, тема интересная и, похоже, актуальной будет ещё долго. Существуют различные программные решения для хранения паролей, о них довольно часто пишут на Хабре (например тут и вот тут), однако многим из них, как нам кажется, в той или иной степени свойственны следующие недостатки:
  • закрытый код снижает доверие и вероятность оперативного устранения уязвимостей
  • для автозаполнения нужно ставить дополнительный софт
  • после ввода мастер-пароля вся база открыта и доступна, в том числе для вредоносного ПО, что особенно актуально на недоверенных устройствах
  • использование мобильных приложений для хранения паролей все равно подразумевает ручной ввод с клавиатуры, например когда требуется залогиниться на стационарном ПК
  • автозаполнение невозможно в некоторых случаях (в bios, консоли)

Мы пришли к выводу, что наиболее удобным решением будет простой и недорогой девайс, позволяющий аппаратно хранить и вводить логины/пароли на любые устройства, без установки какого-либо ПО.
Читать дальше →
Total votes 69: ↑67 and ↓2+65
Comments168

Метеостанция Ласточка

Reading time8 min
Views24K
Разработка электроники для меня это и работа и хобби одновременно. В очередном порыве желания что-нибудь сделать наткнулся на любительский недорогой набор датчиков: дождя, скорости и направления ветра. Он и задал для меня новую область интересов. В этой статье я расскажу об увлекательном процессе проектирования своей погодной станции.


Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments54

Тест 10 автомобильных зарядок по стандартам ISO

Reading time10 min
Views40K
Стенд для тестирования автомобильных зарядок по схеме №1

Недавно я разработал автомобильный USB источник питания. Но статья будет совсем не о нем. В процессе разработки я ознакомился с двумя стандартами: ISO 16750-2, ISO 7637-2, которые подробно отвечают на часто задаваемый вопрос «Какое напряжение в автомобиле», а потом познакомил с ними десяток покупных USB зарядок разных производителей. Здесь (12) и там я видел статьи о разработке/доработке/запиле готовых источников для автомобилей, где авторы не задумываются о таких вещах, как защитные цепи. В моём источнике схема защиты получилась сложнее самого источника, т.к. пожар в машине — это, безусловно, неприятно. Как показали себя испытуемые и почему выжил только один — в этой статье.
Читать дальше →
Total votes 29: ↑28 and ↓1+27
Comments34

Надежное хранение и обновление данных во флэш памяти микроконтроллеров STM32 и MSP430

Reading time8 min
Views27K
Часто возникает задача сохранить изменяемые данные, например конфигурацию, во флэш памяти микроконтроллера. Решение кажется простым, однако обеспечить надежность обновления данных при условии, что питание может отключиться в любой момент, оказывается весьма нетривиально, и даже использование контрольных сумм не решает проблему полностью. Из этой статьи вы узнаете
  • как устроена флэш память
  • к каким проблемам приводит выключение питания в момент записи или стирания
  • как эти проблемы решаются

Для желающих применить на практике — работающий код под STM32F4
Читать дальше →
Total votes 14: ↑13 and ↓1+12
Comments4

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity