Начало работы с STM32 в Keil MDK-ARM

Все картинки в этой статье кликабельны.

STM32 — это семейство 32-разрядных микроконтроллеров фирмы STMicroelectronics.

Микроконтроллеры содержат микропроцессорное ядро ARM, точнее ARM Cortex-M. Это ядро присуще не только микроконтроллерам STM32, оно существует само по себе, и на его основе выпускается множество микроконтроллеров от разных производителей.

Keil MDK-ARM (произносится «Кеил эм-ди-кей арм») — это среда разработки для микроконтроллеров с ядром ARM Cortex-M.

Читать далее Начало работы с STM32 в Keil MDK-ARM

Реклама

Установка Time Doctor на Ubuntu 18.04

На данный момент нет версии Time Doctor для недавно вышедшей Ubuntu 18.04.

В инструкции приведен способ установки Time Doctor для Ubuntu 16.04 на Ubuntu 18.04. Все действия выполняются в командной строке.

    1. Добавим репозитории от Ubuntu 16.04. Для этого создадим и откроем файл /etc/apt/sources.list.d/ubuntu16_04.list следующей командой:
      sudo nano /etc/apt/sources.list.d/ubuntu16_04.list
    2. Вставим в файл следующий список репозиториев:
      deb http://ru.archive.ubuntu.com/ubuntu/ xenial main restricted
      deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
      deb http://ru.archive.ubuntu.com/ubuntu/ xenial universe
      deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates universe
      deb http://ru.archive.ubuntu.com/ubuntu/ xenial multiverse
      deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
      deb http://ru.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
      deb http://security.ubuntu.com/ubuntu xenial-security main restricted
      deb http://security.ubuntu.com/ubuntu xenial-security universe
      deb http://security.ubuntu.com/ubuntu xenial-security multiverse
      
    3. Сохраним файл комбинацией клавиш Ctrl+O и закроем комбинацией Ctrl+X.
    4. Обновим базу пакетов следующей командой:
      sudo apt update
    5. Установим зависимости следующей командой:
      sudo apt install libssl1.0-dev libx11-xcb1 libxcb1 libssl1.0.0 libqtcore4 libqtgui4 libqt4-dbus libqt4-network libqt4-sql libqt4-sql-sqlite libqt4-svg libqt4-xml libqt4-xmlpatterns gksu gdebi libjpeg8 libpng12-0 libcv2.4 libxcb-record0
      
    6. Качаем Time Doctor для Ubuntu 16.04 c официального сайта.
    7. Устанавливаем скаченный пакет следующей командой (название файла можем отличаться):
      sudo dpkg -i timedoctorlite_2.3.49-14ubuntu16.04_amd64.deb
    8. Пакет должен успешно установиться.
    9. Запускаем Time Doctor и проверяем, что все работает. Запустить можно следующей командой (если у вас Lite-версия):
      timedoctorlite
    10. Восстанавливаем исходное состояние пакетов в системе
      sudo rm /etc/apt/sources.list.d/ubuntu16_04.list
      sudo apt update
    11. Ставим лайк статье, если она оказалась полезной. Или пишем в комментариях, что у вас не получилось.

Получение пользовательского токена от eBay

В статье описывается:

  • Взаимодействие продавца с сайтом приложения и с сайтом eBay для предоставления приложению токена.
  • Получение токена приложением.
    1. Продавец заходит на сайт приложения и нажимает кнопку “Войти” или иным способом сообщает приложению, что намеревается им воспользоваться.
    2. Приложение отправляет к eBay запрос GetSessionID, в котором указывает URL для перенаправления. Приложение получает в ответ SessionID, который будет идентифицировать продавца, когда он войдет на eBay. Примеры запроса GetSessionID.
    3. Приложение перенаправляет пользователя на страницу входа eBay. URL этой страницы формируется с использованием SessionID и URL для перенаправления. Формат формируемого URL следующий:
    4. Продавец входит на eBay.
      Форма входа eBay
    5. eBay перенаправляет продавца на форму подтверждения, чтобы он дал согласие на предоставление доступа приложению. Вид формы определяется настройками.
    6. Когда продавец кликает кнопку “I agree”, eBay перенаправляет его по адресу, который указан в настройках в поле “Your auth accepted URL”.
    7. Когда продавец попадает по этому адресу, приложение посылает к eBay запрос FetchToken, содержащий SessionID, и в ответ получает токен. Примеры запроса FetchToken. Это один из немногих запросов, который требует учетные данные приложения. То есть, чтобы сделать запрос, приложение должно добавить в HTTP-заголовок следующие данные: App ID, Dev ID и Cert ID.
      Для большинства других запросов учетные данные не требуются. Вместо них приложение добавляет токен в RequesterCredentials. Если используется SOAP, то RequesterCredentials должен быть в заголовке SOAP. Если используется XML, то RequesterCredentials включается в тело запроса. Дополнительные сведения см. в разделе Security на странице Making a Trading API Call.
    8. Запрос FetchToken возвращает приложению пользовательский токен продавца и срок годности токена. Приложение сохраняет эти данные для дальнейшего использования.
    9. Приложение делает запрос GeteBayOfficialTime, чтобы проверить новый токен.

Ссылки

  1. Оригинальная статья Getting a Token for a User.

 

Минимальный проект «Hello, World!» с помощью Java и Gradle

Gradle — это набирающая популярность система автоматической сборки проектов на языке Java.

Проект должен содержать минимум два файла:

  • build.gradle — файл конфигурации сборки Gradle.
  • Файл с исходным кодом на языке Java, например Main.java.

Важна структура папок. build.gradle должен находиться в корневой папке проекта. Файл Main.java должен находиться в папке «src/main/java».

Структура проекта должна быть, как на следующей картинке.
Java Gradle Project Structure

Содержимое файла Main.java следующее.

public class Main {
    public static void main (String[] args) {
        System.out.println("Hello, world!");
    }
}

Содержимое файла build.gradle следующее.

apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'Main'

jar {
    manifest {
        attributes 'Main-Class': mainClassName
    }
}

В этом файле подключаются плагины, которые предоставляет все необходимо для сборки. Кроме того, в файле указывается точка входа программы — это класс Main.

Проект собирается командой gradle build, которую нужно выполнить в папке проекта. После чего создается папка build/libs, в которой можно найти исполняемый jar-файл.

Запустить программу можно следующей командой.

java -jar build/libs/project_name.jar

Или с помощью Gradle следующей командой.

gradle run

Такой проект можно открыть в IDE NetBeans. Для этого в NetBeans должен быть установлен плагин Gradle Support. Чтобы установить плагин, нужно запустить меню Tools -> Plugins и в диалоговом окне найти Gradle Support.

Успехов.

Аргументы командной строки в разных языках программирования

C и C++

int  main(int argc, char* argv[])
{
    argc;    // количество аргументов + 1
    argv[0]; // имя программы
    argv[1]; // первый аргумент
    argv[2]; // второй аргумент
    // ...
}

Bash

#!/bin/bash

# $# — количество аргументов
#
# $* — аргументы одной строкой
# $@ — список аргументов

echo $0    # имя скрипта
echo $1    # первый аргумент
echo $2    # второй аргумент
# ...
echo $9    # девятый аргумент
echo $(10) # десятый аргумент
echo $(11) # одиннадцатый аргумент
# ...

Cmd.exe

echo %0 REM имя срипта
echo %1 REM первый аргумент
echo %2 REM первый аргумент
REM ...
echo %9 REM девятый аргумент

Python

import sys

sys.argv      # список аргументов
len(sys.argv) # количество аргументов + 1
sys.argv[0]   # имя скрипта
sys.argv[1]   # первый аргумент
sys.argv[2]   # второй аргумент
# ...

Java

public class CommandLine {
    static public void main(String args[]) {
        args.length; // количество аргументов
        args[0];     // первый аргумент
        args[1];     // второй аргумент
        // ...
    }
}

C Sharp

class MainClass
{
    static int Main(string[] args)
    {
        args.Length; // количество аргументов
        args[0];     // первый аргумент
        args[1];     // второй аргумент
        // ...
    }
}

Вывод функций ЛАЧХ и ЛФЧХ в программе Maxima

Maxima — это консольная математическая программа для аналитических расчетов. Программа имеет версию с графическим интерфейсом, которая называется wxMaxima, ее можно бесплатно скачать с официального сайта.

Допустим имеется передаточная функция W(s) . Нужно получить две функций:

  • L(\omega) — ЛАЧХ (логарифмическая амплитудная частотная характеристика),
  • \Phi(\omega) — ЛФЧХ (логарифмическая фазовая частотная характеритиска),

где: \omega — угловая частота, рад/с.

Пример расчет ЛАЧХ и ЛФЧХ для передаточной функции апериодического звена второго порядка.


/* Передаточная функция */
W(s) := k/((1 + T[3]*s)*(1+T[4]*s)) $

/* Функция десятичного логарифма */
log10(x) := log(x) / log(10) $

print("ЛАЧХ") $
L(%omega) = 20 * log(cabs(W(%i*%omega)));

print("ЛФЧХ") $
%Phi(%omega) = carg(W(%i*%omega));

Вывод программ следующий.

ЛАЧХ

\mathrm{L}\left( \omega\right) =20\cdot \mathrm{log}\left( \frac{\left| k\right| }{\sqrt{{{T}_{3}^{2}}\cdot {{\omega}^{2}}+1}\cdot \sqrt{{{T}_{4}^{2}}\cdot {{\omega}^{2}}+1}}\right)

ЛФЧХ

\Phi\left(\omega\right) =-\mathrm{atan}\left( {{T}_{4}}\cdot \omega\right) -\mathrm{atan}\left( {{T}_{3}}\cdot \omega\right) +\mathrm{atan2}\left( 0,k\right)

В окне программы расчет выглядит следующим образом.

Вывод функций ЛАЧХ и ЛФЧХ в программе Maxima

Для тех, кто никогда не пользовался программой, объясню, что тут происходит. С помощью /* */ можно оставлять комментарии.

Сначала задается передаточная функция W(s) . Затем задается функция десятичного логарифма, потому что, к сожалению, она отсутствует в программе.

  • %i — мнимая единица.
  • %Phi — греческая буква \Phi
  • %omega — греческая буква \omega
  • функция cabs() возвращает модуль комплексного числа.
  • функция carg() возвращает аргумент комплексного числа.

Раскрой коробки картонной четырехклапанной

Любая прямоугольная коробка имеет 3 размера, 2 из которых образуют сторону с клапанами. Возможно 3 варианта раскроя для одних и тех же размеров, в зависимости от стороны с клапанами. Разные варианты имеют разные габариты и разные площади раскроя. С помощью расчета нужно подобрать вариант для оптимального расходования листов картона.

Коробка

Картонная коробка с размерами

Размеры a и b образуют сторону с клапанами.

Размер d должен быть достаточным для надежного склеивания коробки, например 5 см. Картон надежно склеивается клеем ПВА.

Должно соблюдаться условие:

b \geq a

На изображениях в статье не учитывается толщина картона.

Раскрой на одном листе картона

Раскрой развертка картонной коробки

Обязательное условие:

b \geq a

Размеры минимального листа картона рассчитываются по следующим формулам.

E = 2 (a + b) +d

F = c + a

Раскрой на двух листах картона

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

Раскрой развертка картонной коробки из двух половин

Обязательное условие:

b \geq a

Размеры минимального листа картона рассчитываются по следующим формулам.

G = a + b +d

F = c + a

Таблица для расчета раскроя

Пример расчета раскроя опубликован в Гугл Таблицах. Рассчитывается 3 варианта раскроя в зависимости от стороны расположения клапанов. Можете создать копию документа (Файл -> Создать копию) и подставить свои размеры коробки.

 

 

Ввод символа рубля с клавиатуры

В Линуксе можно настроить специальную клавишу Compose, которая упрощает ввод символов, которых нет на клавиатуре.

По умолчанию определен ввод многих символов, но пока среди них нет символа рубля ₽.

Чтобы вводить символ рубля комбинаций клавиш Compose дефис p (английская), запустите в терминале следующую команду.

echo -e 'include "%L"\n<Multi_key><minus><p>:"₽"' > ~/.XCompose

Эта команда создаст в домашней папке файл .XCompose с определенным содержимым. Ввод символа будет доступен только пользователю, которому принадлежит эта домашняя папка.

Если файл .XCompose уже существует, то следует использовать следующую команду.

echo -e '\n<Multi_key><minus><p>:"₽"' >> ~/.XCompose

Удачи!

Что происходит при выравнивании кода табуляцией

Среди программистов существует спор, что использовать для отступа: табуляцию или пробелы.

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

Следует различать отступы и выравнивание. Отступ (indent) используется, чтобы сместить начало строки. Выравнивание (alignment) используется внутри строки, чтобы сместить одну часть строки относительно другой.

Отступы можно делать и табуляцией, и пробелами, а выравнивание только пробелами.

Допустим, программист сделал выравнивание табуляцией шириной 4 пробела, а потом решил поменять ширину.

Ширина: 4 пробела (эталонное выравнивание)

int variable                = 1;
int superVariable           = 2;
int anotherSuperVariable    = 3;

Ширина: 2 пробела

int variable        = 1;
int superVariable     = 2;
int anotherSuperVariable  = 3;

Ширина: 3 пробела

int variable            = 1;
int superVariable       = 2;
int anotherSuperVariable   = 3;

Ширина: 8 пробелов

int variable                            = 1;
int superVariable                       = 2;
int anotherSuperVariable        = 3;

Как видно, выравнивание разваливается.

Иллюстрация табуляция для выравнивания кода в программировании

Сборка Qt Virtual Keyboard и добавление русской раскладки

Qt Virtual Keyboard Русская раскладка

Qt Virtual Keyboard — это библиотека предоставляющая виртуальную экранную клавиатуру. Она входит в библиотеку Qt начиная с Qt 5.7. Точнее, она и раньше входила, но была доступна только в коммерческой версии.

По умолчанию клавиатура из официальной сборки Qt поддерживает только английскую раскладку. Если нужны раскладки на других языках, то проект Qt Virtual Keyboard нужно пересобрать.

Далее приводится инструкция по сборке Qt Virtual Keyboard и добавлению русской раскладки в Линукс. Все действия выполняются в консоле. Для Виндовс инструкция не приводится, но она похожа.

Библиотека Qt должна быть установлена вместе с исходным кодом. Для этого при установке нужно отменить пункт Sources.

Установка исходного кода Qt

Создадим папку для сборки и перейдем в нее.

mkdir /tmp/build-qtvirtkb
cd /tmp/build-qtvirtkb

Создадим переменную, содержащую путь к папке, в которой установлен Qt.

QTDIR=/opt/Qt5.9.1/5.9.1

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

Сконфигурируем проект Qt Virtual Keyboard с помощью qmake.

$QTDIR/gcc_64/bin/qmake "CONFIG += lang-en lang-ru" $QTDIR/Src/qtvirtualkeyboard
 

Языки раскладок задаются в строке "CONFIG += lang-en lang-ru". Таким образом клавиатура будет поддерживать английскую и русскую раскладки. Полный список языков приведен в официальной документации. Если указать"CONFIG += lang-all", то клавиатура будет поддерживать все возможные языки.

Соберем проект с помощью make.

make

Сборка занимает некоторое время.

Следующая команда установит новую сборку. Нужно учесть, что будут внесены изменения в официальную сборку Qt. Она заменит файлы клавиатуры на те, которые получены во время новой сборки. Предыдущие файлы невозможно будет восстановить.

sudo make install

Готово. Теперь в клавиатуре будет русская раскладка.

Если нужно изменить раскладки, то нужно пересобрать проект следующими командами.

make distclean
$QTDIR/gcc_64/bin/qmake "CONFIG += lang-all" $QTDIR/Src/qtvirtualkeyboard
make
sudo make install

Первая команда нужна, чтобы очистить сборку.

EUROCONTROL ASTERIX Protocol. Category 002 (CAT002). Encoding Rules Table

This table is compiled according to EUROCONTROL ASTERIX CAT002, Part 2b, Monoradar Service Messages, Edition 1.0, 1997.11.01.

  • M stands for mandatory,
  • O for optional,
  • X for never present.
Item Message Type
001
North marker
002
Sector crossing
003
South marker
008
Activation of blind zone filtering
009
Stop of blind zone filtering
I002/000
Message Type
M M M M M
I002/010
Data Source Identifier
M M M M M
I002/020
Sector Number
X M X X X
I002/030
Time of Day
O O O O O
I002/041
Antenna Rotation Period
O O X X X
I002/050
Station Configuration Status
O O O X X
I002/060
Station Processing Mode
O O O X X
I002/070
Plot Count Values
O O X X X
I002/080
Warning/Error Conditions
O O O X X
I002/090
Collimation Error
O O X X X
I002/100
Dynamic Window — Type 1
X X X M X