Использование npm для запуска приложений Node.js

👁 133 просмотров

Существует множество способов запуска приложения Node.js. Какой из них  самый универсальный и подходит для любого приложения?

Давайте запустим приложение:

  • node app.js
  • coffee app.coffee
  • supervise -x ./node_modules/.bin/iced -e js,coffee,iced,jade,styl,css —no-restart-on exit app.iced
  • ./launch.js

Тьфу! И что происходит, когда вы переключаетесь между приложениями? Подождите, а кто будет контролировать: человек или супервизор? Нет, подождите, это приложение CoffeeScript со стандартной загрузкой JavaScript или это приложение express?

Давайте забудем об этой головной боли при помощи запуска через универсальный npm. Для этого нам нужен файл package.json в корне проекта.

Все пакеты npm содержат файл, обычно в корне проекта, который называется package.json— этот файл содержит различные метаданные, относящиеся к проекту. Этот файл используется для предоставления информации,что позволяет  npm идентифицировать проект, а также обрабатывать зависимости проекта. Он также может содержать другие метаданные, такие как описание проекта, версию проекта в определенном дистрибутиве, информацию о лицензии и даже данные конфигурации — все это может иметь жизненно важное значение как для npm, так и для конечных пользователей пакета. Обычно package.jsonфайл находится в корневом каталоге проекта Node.js.

Если нет данного файла, то стоит его сгенерировать через команду:

npm init

Далее открываем файл package.json и добавляем новый параметр с указанием скрипта для запуска:

{
  "name": "myNodeApp",
  "version": "1.0.0",
  "description": "My Node App",
  "main": "index.js",
  "dependencies": {
    "chromedriver": "^2.33.2",
    "nightwatch": "^0.9.16"
  },
  "devDependencies": {},
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "David Amirkhanov",
  "license": "ISC"
}

Заменяем «node index.js» на все, что вы используете для запуска вашего приложения. Сделайте это для каждого приложения, над которым вы работаете. В следующий раз, когда вам нужно запустить приложение, просто выполните следующее:

npm start

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

Настройка системы WEB — тестирования на основе headless chromium-browser, chromedriver, nightwatch и node.js на Linux дистрибутиве

👁 135 просмотров

Предисловие

WEB — тестирование — это объемная и неоднозначная сфера, которая может заключаться в решении задач не только в плане тестирования WEB — приложений, но и, к примеру, в плане построения роботов IoT и роботов работы с социальными сетями.

Возможно, что вам не нравится словосочетание «тестирование», возможно, отчасти, из-за того, что это словосочетание заключает в себе более важные вещи, которые, к примеру, позволят нам авторизироваться в Instagram, Facebook и совершать там ряд действий от нашего лица и в одно и то же время нудно заниматься наблюдением, как выполняется наш фронтенд, но тестирование имеет смысл и уже стандартизировано сообществом W3C и продолжает развиваться.

 

Описание задачи в двух словах

Какую задачу мы ставим, чтобы решить при помощи тестирования? Всего-то нужно, чтобы какая-то программа открывала браузер и там автоматически кликала ссылки, вбивала тексты и показывала, что получится или возвращала параметр результата, который нам нужен. И все это нужно сделать на Linux — дистрибутиве Ubuntu 16.04, у которого нет GUI, т.е. у нас только консоль и запустить привычный браузер, как на полноценном компьютере не получится.

Проблемы решения задачи тестирования

Скажете вы, что это же очень легко! Но увы, в процессе работы черт ногу сломит, пока вы войдете в курс дела, пока поймете, что актуально и что уже устарело и утратило поддержку, пока настроите и запустите первый тест и пока это внедрите в работу, почитая документацию к инструменту тестирования и это очень неоднозначная сфера, а неоднозначность порождает хаос актуальных и не актуальных теорий и методов.

Что нужно для решения тестирования без GUI?

Что нам нужно для современного тестирования:

  1. Headless Chromium Browser v 59 (chromium-browser) — безголовый браузер в консоли;
  2. Node.js (nodejs) — сервер JavaScript;
  3. WebDriver (chromedriver) — драйвер для обработки тестов на JavaScript и работы с chromium-browser посредством Node.js;
  4. Nightwatch.js (nightwatch) — известная библиотека для написания и запуска автотестов посредством Node.js от LinkedIn.

Установка на сервер

Напишем шаги для последовательной установки всех компонентов для тестирования.

 1). Установка cromium-browser. Перед установкой chromium-browser надо будет установить все необходимые для него зависимости, поэтому надо будет выполнить ряд действий.

Устанавливаем зависимости:

sudo apt-get -f install

Если у нас были первые попытки установки, но помещали отсутствие зависимостей, то будет хорошо, если удалить загруженные файлы в /var/cache/apt/archives запуском команды:

sudo rm /var/cache/apt/archives/chromium*

Теперь устанавливаем сами cromium-browser:

sudo apt-get install chromium-browser

Если потребуется удалить chrome-browser, то нао будет выполнить команду:

sudo apt-get purge chromium-browser

 

2). Установка nodejs. Как установить Node.js и всего методы установки подробно описано тут. Один из самых простых методов установки:

sudo apt-get update
sudo apt-get install nodejs

Также потребуется и менеджер пакетов, посредством которого надо будет установить chromedriver и nightwatch :

sudo apt-get install npm

Они нужны будут нам обработать тесты на JavaScript из Node.js.

 

3). Установка chromedriver. Этот драйвер выполняет роль WebDriver’а, предоставляющего API, к примеру, чтобы иметь возможность кликать на ссылки и вбивать тексты в текстовые поля и формы, для этого мы и будем использовать Chromedriver. Для установки chromedriver выполняем команду:

npm install chromedriver

 

4). Установка nightwatch.  Nightwatch.js — это библиотека для написания и запуска автотестов на JavaScript:

npm install nightwatch

Еще не забываем прописать путь к бинарнику nightwatch в path:

export PATH=$PATH:/home/parserApp/node_modules/nightwatch/bin

Схема работы тестирования

Коротко вся схема выглядит таким образом, что тесты на  Nightwatch.js отправляют запросы на Chromedriver, а Chromedriver обращается к Chrome Browser для исполнения тестов(заполнение полей форм и нажатие на ссылки):

 

Настройка и запуск первого теста

Конфигурационный файл Nightwatch.js умолчанию находится в папке node_modules/nightwatch/bin и берутся по умолчанию оттудаи для того, чтобы задать наши пользовательские настройки для Nightwatch.js нужно создать файл nightwatch.json в корне проекта и прописать туда всё необходимое, чтобы Chromedriver использовался напрямую (без Selenium и других сторонних вещей) и Chromium запускался в «headless» режиме:

{
  "src_folders": ["tests"], // путь к папке с тестами
  "output_folder": "reports",
  "custom_commands_path": "",
  "custom_assertions_path": "",
  "page_objects_path": "",
  "globals_path": "globals.js", // путь к файлу, в котором задаётся глобальный контекст для всех тестов

  "selenium": {
    "start_process": false // отменяем запуск Селениума, т.к. будем обращаться к Chromedriver напрямую
  },

  "test_settings": {
    "default": {
      "selenium_port": 9515, // номер порта Chromedriver по умолчанию ("selenium_" в имени поля — это пережиток прошлого)
      "selenium_host": "localhost",
      "default_path_prefix" : "",

      "desiredCapabilities": {
        "browserName": "chrome",
        "chromeOptions" : {
          "args" : ["--no-sandbox", "--headless", "--disable-gpu"], // специальные флаги для работы Хрома в headless-режиме
          "binary" : "/usr/bin/chromium-browser" // путь к исполняемому файлу Хрома
        },
        "acceptSslCerts": true
      }
    }
  }
}

Нужно обратить внимание на строку с globals.js. Внутри этого файла можно задать глобальный контекст для всех тестов. Пропишем туда, чтобы Chromedriver стартовал перед запуском всех тестов и прибивался в конце:

const chromedriver = require('chromedriver');

module.exports = {
  before: function(done) {
    chromedriver.start();

    done();
  },

  after: function(done) {
    chromedriver.stop();

    done();
  }
};

Теперь необходимо написать любой тест для проверки работоспособности системы тестирования. К примеру, нужно открыть google.com, поискать что-нибудь и проверить результаты поиска. Конечно, Nightwatch.js API предоставляет ещё кучу всяких методов для всевозможных проверок, но для начала нам хватит:

module.exports = {
  'Test google.com': function(browser) {
    const firstResultSelector = '#rso cite._Rm';

    browser
      .url('http://google.com', () => {
        console.log('Loading google.com...');
      })
      .waitForElementVisible('#lst-ib', 5000)
      .execute(function() {
        document.getElementById('lst-ib').value = 'Блог WebSofter!';
      })
      .submitForm('form')
      .waitForElementVisible(firstResultSelector, 5000)
      .getText(firstResultSelector, result => {
        browser.assert.equal(result.value, 'websofter.ru/');
      })
      .end();
      
  }
};

Запускаем через консоль по команде:

nightwatch --test google.js

Есть важное замечание. Во первых, если Node.js установлен через nvm, о надо активировать сессию через команду:

source ~/.profile

во вторых, для запуска теста необходимо создать в корне проекта package.json с данными проекта, а в виде запускаемого фала надо указать google.js через команду:

npm init

Далее уже выполняем команду запуска нашего теста:

nightwatch --test google.js

Результатом выше изложенного кода в файлах будет результат в консоли:

Т.е., мы заходим на главную сайта Google, вбиваем в поиск словосочетание «Блог WebSofter!» и в итоге сравнивается адрес нашего блога на наличие в определенных тегах на странице результата поиска.

Скачать рабочий пример из этой статьи можно по ссылке.

Заключение

Первоначально Nightwatch.js был ориентирован на работу с Selenium. Но сегодня она умеет работать с chromedriver напрямую.

Осторожно: безголовый режим Chrome доступен на Mac и Linux в v59 . Поддержка Windows входит в Chrome v60. Чтобы проверить, какая версия Chrome у вас есть, откройте chrome://version.

Безголовый Chrome поставляется в версии Chrome 59. Это способ запуска браузера Chrome в безголовой среде, т.е. в консоли без GUI. Подобным образом работал PhantomJS. Chrome привносит в командную строку все современные функции веб-платформы, предоставляемые Chromium и движком Blink.

Почему это полезно?

Безголовый браузер — отличный инструмент для автоматического тестирования и серверных сред, где вам не нужна видимая оболочка пользовательского интерфейса. Например, вы можете выполнить некоторые тесты на реальной веб-странице, создать PDF-файл или просто проверить, как браузер отображает URL-адрес. Дополнительно можно узнать по ссылке

 

Ссылки по теме

  1. «Getting Started with Headless Chrome»
  2.  «Nightwatch.js API reference»
  3. Хорошая презентация на тему Nightwatch.js
  4. Как настроить простую систему автотестов без Java и Selenium

 

 

Установка Vesta CP на дистрибутив Linux

👁 71 просмотров

Описание

Vesta CP — это свободное ПО и хорошая альтернатива платному ISPManager, которое предназначено для организация панели управления на голом VDS/VPS со всем необходимым инструментарием для запуска и управления WEB — проектами на PHP/MySQL.

Vesta CP обладает всеми возможностями для удобной и быстрой работы, без необходимости «ручной» правки конфигурационных файлов, конечно, если нужна тонкая настройка, то придется лезть в эти настройки. После инсталляции «из коробки» поддерживаются:

  • Apache+nginx в качестве вэбсервера;
  • DNS-сервер;
  • Почтовый сервер, включая настройку DKIM, спамфильтров и антивируса;
  • Стабильная версия PHP;
  • Система управления базами данных MySQL 5.5;
  • Встроенные функции работы с резервными копиями;
  • Планировщик задач (cron);
  • Мониторинг нагрузки сервера;
  • Быстрый, многоязычный интерфейс.

 

Установка Vesta CP на Ubuntu

Процесс инсталляции панели очень прост и выполнить его под силу даже новичку. Для начала, нужно определиться с операционной системой — Vesta CP успешно работает на Centos, Ubuntu и Debian. В данном случае установим на Ubuntu 16.

Итак, вы заказали VPS/VDS или выделенный сервер и получили параметры доступа к нему — IP-адрес и пароль суперпользователя root. С помощью любого ssh-клиента (пользователи Windows обычно выбирают PuTTY) подключаемся к нашему серверу и выполняем следующие команды:

curl -O http://vestacp.com/pub/vst-install.sh
bash vst-install.sh

Первой командой скачиваем скрипт установки, а второй выполняем установки на основании сценария в скрипте установки.

Vesta самостоятельно инсталлирует необходимые серверные приложения и по времени займет до 15 минут, конечно, в реале 2-3 раза меньше. По окончании установки панель выдаст сообщение о готовности:

Congratulations, you have just successfully installed the Vesta Control Panel

You can login in Vesta with following credentials:
    username: admin
    password: XXXXXXXX
    https://1.2.3.4:8083

Для входа в панель нужно набрать адрес своего сервера с портом 8083 и вбить логин admin с паролем, который высветится по окончании. Эти же данные будут отправлены на почту, которую вы введет в процессе установки.

Установка, апгрейд и переустановка Node.js на Ubuntu

👁 261 просмотров

Введение

Node.js — это JavaScript платформа для общего назначения, которая позволяет пользователям быстро построить сетевые программы. На этой платформе при помощи JavaScript достигается цель построения как фронтенд, так и бэкэнд.

В данном гайде показывается несколько способов установки Node.js на Ubuntu 16.04 сервер.

Требования

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

Установка стабильной версии(Distro-Stable) Node.js на Ubuntu

Ubuntu 16.04 содержит версию Node.js в своих репозиториях по умолчанию, которые могут быть использованы для обеспечения последовательного взаимодействия с несколькими системами. На момент написания статьи версия в репозиториях — v4.2.6. Это будет не последняя версия, но она должна быть довольно стабильной и должна быть достаточной для быстрого экспериментирования с языком, но, возможно, что эта версия нам не подойдет, если требуется использоваться современные фишки или функции Node.js.

Чтобы получить эту версию, нам просто нужно использовать диспетчер пакетов apt. Сначала мы должны обновить наш локальный индекс пакета, а затем установить из репозиториев:

sudo apt-get update
sudo apt-get install nodejs

Если данная версия пакета Node.js в репозиториях Ubuntu соответствует вашим потребностям, то это все, что вам нужно сделать для установки. В большинстве случаев вы также захотите установить npm, который является менеджером пакетов Node.js. Вы можете сделать это, набрав:

sudo apt-get install npm

Этот менеджер позволит нам легко устанавливать модули и пакеты для использования с Node.js.

Из-за конфликта с другим пакетом исполняемый файл из репозиториев Ubuntu называется nodejs вместо node. Помните об этом при запуске операций сервера.

Но, если мы хотим, чтобы  команда nodejs была запущена и через команду node, надо будет сделать символическую ссылку. И есть несколько методов это сделать:

  • Вам нужно вручную создать символическую ссылку /usr/bin/node. Ярлык для совместимых с bash оболочек:
sudo ln -s `which nodejs` /usr/bin/node
  • Или, если вы используете нестандартные оболочки, просто скопируйте путь, который вы найдете по команде which nodejs:
sudo ln -s /usr/bin/nodejs /usr/bin/node
  • Возможно, что вышеизложенные оба метода могут вызвать конфликты имен, когда ссылаем команду node на nodejs. И для решения этого есть третий способ:
sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10

Это первый и, думаю, самый легкий способ установки Node.js на Ubuntu 16.04, но не самый гибкий, если, к примеру, мы хотим установить другую версию, а не Distro-Stable, которая валяется в репозиториях Ubuntu давненько.

 

 

Установка Node.js на Ubuntu 16.04, используя PPA

Данный метод позволяет установить Node.js, используя более гибкий порядок. Это позволяет выбрать ту версию, которая подходит для нашего проекта. Это очень важно, если в проекте будут использоваться последние функции Node.js или пакеты, которые не поддерживают работу в Node.js старой версии.

Но есть вероятность, что самая последняя версия Node.js может не работать в Ubuntu нашей версии, поэтому надо это учитывать и не пытаться устанавливать нестабильную или самую последнюю версию.

Данный метод, который может помочь нам получить более новую версию Node.js, является добавление из PPA (Personal Package Archive, Персональный Пакетный Архив), поддерживаемый NodeSource. Отсюда можно подгрузить более современную версию Node.js, чем официальные репозитории Ubuntu, и позволяет нам выбирать между Node.js v4.x (более старая долгосрочная версия поддержки, поддерживаемая до апреля 2017 года), v6. x (более поздняя версия LTS, которая будет поддерживаться до апреля 2018 года) и Node.js v7.x (текущая, активно развиваемая версия).

Во-первых, вам нужно установить PPA, чтобы получить доступ к его содержимому. Для этого необходимо убедиться, что мы находимся в своем домашней директории и используем curl, чтобы подгрузить скрипт установки для нашей предпочтительной версии. Ниже мы сейчас устанавливаем версию 7.x:

cd ~
curl -sL https://deb.nodesource.com/setup_7.x -o nodesource_setup.sh

Мы можем проверить содержимое этого скрипта с помощью команды редактирования текстового документа nano (или вашего предпочтительного текстового редактора):

nano nodesource_setup.sh

Скрипт установки Node.js надо запустить под sudo:

sudo bash nodesource_setup.sh

PPA будет добавлен в нашу конфигурацию, и наш локальный кеш пакетов Ubuntu будет обновлен автоматически. После запуска скрипта установки из nodeource мы можем установить пакет Node.js таким же образом, как мы это делали в первом случае:

sudo apt-get install nodejs

Пакет nodejs содержит бинарный файл nodejs, а также менеджер пакетов npm, так что нам не нужно устанавливать npm отдельно. Однако для того, чтобы некоторые npm пакеты работали (например, те, которые требуют компиляции кода из исходного кода), нам необходимо установить пакет build-essential:

curl — это инструмент для загрузки или передачи файлов или данных с сервера или на сервер с использованием FTP, HTTP, HTTPS, SCP, SFTP, SMB и других поддерживаемых протоколов в Linux или Unix-подобной системе. Можно легко установить и использовать команду curl на Ubuntu Linux, используя команду apt или команду apt-get, чтобы использовать curl. Для установки данного инструмента необходимо выполнить команду

sudo apt install curl

 

 

Установка Node.js на Ubuntu, используя NVM

Альтернативой установке Node.js через apt и PPA является использование специально разработанного инструмента, называемого nvm «Node.js version manager»(Менеджер Версий Node.js).

Используя nvm, мы можем установить несколько автономных версий Node.js, которые позволят нам легче управлять своей средой. Он предоставит вам доступ по требованию к новейшим версиям Node.js, но также позволит вам настроить таргетинг на предыдущие версии, от которых зависит ваше приложение.

Для начала нам нужно будет получить пакеты программного обеспечения из наших репозиториев Ubuntu, которые позволят нам создавать исходные пакеты. Скрипт nvm будет использовать эти инструменты для создания необходимых компонентов:

sudo apt-get update
sudo apt-get install build-essential libssl-dev

После установки пакетов необходимых условий мы можем загрузить сценарий установки nvm со страницы проекта GitHub . Номер версии может отличаться, но в целом мы можем скачать этот скрипт установки при помощью curl:

curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh -o install_nvm.sh

После скачки мы можем проверить скрипт установки при помощи команды редактирования nano:

nano install_nvm.sh

После проверки, если все нормально, запускаем этот скрипт при помощи команды bash:

bash install_nvm.sh

Команда выше установит необходимые инструменты для работы в подкаталог нашего домашнего каталога ~/.nvm. Он также добавит необходимые строки в файл ~/.profile для работы.

Чтобы получить доступ к функциям nvm, нам нужно будет снова выйти и снова войти в систему или можно выполнить команду ниже, чтобы текущая сессия узнала об изменениях:

source ~/.profile

Теперь, когда мы установили nvm, мы можем установить изолированные версии Node.js.

Чтобы узнать версии Node.js, доступные для установки, мы можем ввести:

nvm ls-remote

Это выведет весь список возможных к установке версий Node.js

Output
...
v5.8.0
v5.9.0
v5.9.1
v5.10.0
v5.10.1
v5.11.0
v6.0.0
v7.0.0

Как вы можете видеть, самая новая версия на момент написания этой статьи — v7.0.0. Мы можем установить его, набрав:

nvm install 7.0.0

Обычно, nvm переключается на использование последней установленной версии. Мы можем явно сообщить nvm, чтобы использовать ту версию, которую мы только что загрузили, набрав:

nvm use 7.0.0

Когда мы устанавливаем Node.js с помощью nvm, вызывается исполняемый файл node. Мы можем увидеть версию, которая в настоящее время используется оболочкой, набрав:

node -v

Это выведет что-то на подобие:

Output
v7.0.0

Если у нас несколько версий Node.js, мы можем увидеть, что установлено, набрав:

nvm ls

Если мы хотим по умолчанию использовать одну из версий, мы можете ввести команду:

nvm alias default 7.0.0

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

nvm use default

Каждая версия Node.js будет отслеживать свои собственные пакеты и иметь npm возможность управлять ими.

Мы можем с помощью npm установить пакеты в ./node_modules каталог проекта Node.js, используя обычный формат. Например, для express — модуля:

npm install express

Если мы хотим установить его глобально (чтобы сделать его доступным для других проектов с использованием той же версии Node.js), мы можете добавить флаг -g:

npm install -g express

Это установит пакет в ~/.nvm/node_version/lib/node_modules/package_name.

Установка в глобальном масштабе позволит нам запускать команды из командной строки, но нам нужно будет связать пакет с нашей локальной сессией, чтобы вызвать его из программы:

npm link express

Мы можем узнать больше о доступных нам параметрах с help из nvm, набрав:

nvm help

 

Апгрейд Node.js через удаление и переустановку новой версии

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

sudo apt-get purge nodejs
sudo apt-get autoremove

Есть и более легкий способ, который заменяет эти команды:

sudo apt-get purge --auto-remove nodejs

 

Заключение

Как вы можете видеть, есть несколько способов начать работу с Node.js на вашем сервере Ubuntu 16.04. Ваши обстоятельства будут определять, какой из вышеуказанных методов является наилучшей идеей для ваших обстоятельств. Хотя упакованная версия в репозитории Ubuntu является самым простым методом, но метод nvm определенно намного более гибкий.

Сниппеты AVR. Настройка портов I/O для реакции на нажатие кнопки

👁 53 просмотров

Допустим, есть банальная задача написания кода для реагирования на нажатие кнопки, которая подключена к ножке микроконтроллера A. После нажатия на кнопку сигнал нажатой появится на ножке B и включится лампочка.

Схема подключения микроконтроллера

Код на ассемблере

; project.asm
;
; Created: 23.11.2017 16:49:01
; Author : WebSofter
;

.list
.def temp = R16			;Определяем переменный регистр
.cseg					;Устанавливаем текущую рабочую память

;Настриваем PORT A
ldi temp, 0x00			;Записываем константу для DDRA
out DDRA, temp			;В порт управления записываем 0. Будет работать на ввод
ldi temp, 0xff			;Записываем константу для PORTA
out PORTA, temp			;A порт вывода записываем 1. Будет полдключен внутренний резистор
;Настриваем PORT B
ldi temp, 0xFF			;Записываем константу для DDRB
out DDRB, temp			;В порт управления записываем 1. Будет работать на вывод

;Организуем бесконечный цикл чтения сигнала нажатия
main:					;Метка цикла
	in temp, PINA		;Читаем сигналы с PIN
	out PORTB, temp		;Записываем в порт на вывод
rjmp main				;Операция перехода к метке

 

Код на C/C++

/*
 * GccProject.c
 *
 * Created: 23.11.2017 21:39:37
 * Author : WebSofter
 */ 

#include <avr/io.h>


int main(void)
{
    //Настрояка порта A
	DDRA = 0x00;//Установка напрвления на ввод
	PORTA = 0xFF;//Подключение внутреннего резистора
	//Настрояка порта B
	DDRB = 0xFF;//Устновка направления на вывод
	PORTB = 0xFF;//Начальная установка
	
    while (1) //Бесконечный цикл
    {
		PORTB = PINA;//Записываем нажатый пин из A в B
    }
}

 

Система команд ассемблера для Atmel AVR

👁 138 просмотров

Предисловие

Подобных страниц, описывающих систему команд данной замечательной архитектуры микропроцессора очень много в сети Интернет. Поэтому не хотелось бы создать очередной обычный «велосипед», но наш «велосипед» будет особенным. Особенностью данной страницы будет то, чтобы вы не утруждались нажимать на ссылки на сторонние ресурсы и не утруждались по крупинкам собирать недостающие части информации по теме. Это очень удобно, если читаете через экран мобильного устройства или планшета.

Регистр статуса (SREG)

SREG: Регистр статуса
C: Флаг переноса
Z: Флаг нулевого значения
N: Флаг отрицательного значения
V: Флаг-указатель переполнения дополнения до двух
S: NЕV, Для проверок со знаком
H: Флаг полупереноса
T: Флаг пересылки, используемый командами BLD и BST
I: Флаг разрешения/запрещения глобального прерывания
Регистры и операнды
Rd: Регистр назначения (и источник) в регистровом файле
Rr: Регистр источник в регистровом файле
R: Результат выполнения команды
K: Литерал или байт данных (8 бит)
k: Данные адреса константы для счетчика программ
b: Бит в регистровом файле или I/O регистр (3 бита)
s: Бит в регистре статуса (3 бита)
X, Y, Z: Регистр косвенной адресации (X=R27:R26, Y=R29:R28, Z=R31:R30)
P: Адрес I/O порта
q: Смещение при прямой адресации (6 бит)

I/O регистры

RAMPX, RAMPY, RAMPZ: Регистры связанные с X, Y и Z регистрами, обеспечивающие косвенную адресацию всей области СОЗУ микроконтроллера с объемом СОЗУ более 64 Кбайт

Стек

STACK: Стек для адреса возврата и опущенных в стек регистров
SP: Указатель стека

Флаги

Флаг, на который воздействует команда
0 Очищенный командой Флаг
1 Установленный командой флаг
Флаг, на который не воздействует команда

Описание команд

ADC - Add with Carry, Сложить с переносом

Описание:
Сложение двух регистров и содержимого флага переноса (С), размещение результата в регистре назначения Rd.

Операнды:

Rd, Rr
Операция:

(i) Rd ← Rd + Rr + C
Синтаксис Операнды Счетчик программы
(i) ADC Rd, Rr 0 ≤ d ≤ 31, 0 ≤ r ≤ 31 PC ← PC + 1

16-разрядный код операции:

0001 11rd dddd rrrr

Булевые выражения регистра статуса (SREG):

I T H S V N Z C
H Rd3•Rr3 + Rr3 + R3 + R3•Rd3
Устанавливается если есть перенос из бита 3, в ином случае очищается
S N⊕V, Для проверок со знаком
V Rd7•Rr7•R7 + Rd7•Rr7•R7
N R7
Устанавливается если в результате установлен MSB, в ином случае очищается
Z Rd7•Rr7•R7•R7•R7•Rd7
Устанавливается если результат $00, в ином случае очищается
C Rd7•Rr7 + Rr7 + R7 + R7•Rd7
Устанавливается если есть перенос из MSB результата, в ином случае очищается
R (Результат) соответствует Rd после выполнения команды

Пример:

           ;СложитьR1 : R0 с R3 : R2
add r2, r0 ;Сложить младший байт
adc r3, r1 ;Сложить старший байт с переносом

w Слов:
1 (2 байта)
Циклов:
1

ADD - Add without Carry, Сложить без переноса

Описание:
Сложение двух регистров без добавления содержимого флага переноса (С), размещение результата в регистре назначения Rd.

Операнды:

Rd, Rr
Операция:

(i) Rd ← Rd + Rr + C
Синтаксис Операнды Счетчик программы
(i) ADC Rd, Rr 0 ≤ d ≤ 31, 0 ≤ r ≤ 31 PC ← PC + 1

16-разрядный код операции:

0001 11rd dddd rrrr

Булевые выражения регистра статуса (SREG):

I T H S V N Z C
H Rd7•Rr7•R7 + Rd7•Rr7•R7
Устанавливается если в результате операции образуется переполнение дополнения до двух, в ином случае очищается
S N⊕V, Для проверок со знаком
V Rd7•Rr7•R7 + Rd7•Rr7•R7
N R7
Устанавливается если в результате установлен MSB, в ином случае очищается
Z R7•R6•R5•R4•R3•R2•R1•R0
Устанавливается если результат $00, в ином случае очищается
C Rd7•Rr7+Rr7•R7+R7•Rd7
Устанавливается если есть перенос из MSB результата, в ином случае очищается
R (Результат) соответствует Rd после выполнения команды

Пример:

add r1,r2   ; Сложить r2 с r1 (r1=r1+r2)
adc r28,r28 ; Сложить r28 с самим собой
              (r28=r28+r28)

w Слов:
1 (2 байта)
Циклов:
1

ADIW - Add Immediate to Word, Сложить непосредственное значение со словом

Описание:
Сложение непосредственного значения (0-63) с парой регистров и размещение результата в паре регистров. Команда работает с четырьмя верхними парами регистров, удобна для работы с регистрами указателями.

Операнды:

Rd, K
Операция:

(i) Rdh:Rdl ← Rdh:Rdl + K
Синтаксис Операнды Счетчик программы
(i) ADIW Rdl, K dl ∈ {24,26,28,30}, 0 ≤ K ≤ 63 PC ← PC + 1

16-разрядный код операции:

1001 0110 KKdd KKKK

Булевые выражения регистра статуса (SREG):

I T H S V N Z C
S N⊕V, Для проверок со знаком
V Rdh7 R15
N R15
Устанавливается если в результате установлен MSB, в ином случае очищается
Z R15•R14•R13•R12•R11•R10•R9•R8•R7•R6•R5•R4•R3•R2
Устанавливается если результат $0000, в ином случае очищается
C R15•Rdh7
Устанавливается если есть перенос из MSB результата, в ином случае очищается
R (Результат) соответствует Rdh:Rdl после выполнения команды (Rdh7 — Rdh0 = R15 — R8, Rdl7 — Rdl0 = R7 — R0)

Пример:

adiw r24, 1  ; Сложить 1 с r25:r24
adiw r30, 63 ; Сложить 63 с Z указателем (r31 : r30)

w Слов:
1 (2 байта)
Циклов:
2

 

Продолжение следует…

Запуск программы Android на Windows через командную строку

👁 139 просмотров

Есть моменты, когда нет необходимости использовать IDE Android Studio для запуска скачанного или построенного на компьютере apk-файла и нужно быстро проверить его работоспособность запустив на подключенном через USB устройстве либо на эмуляторе, поставляемый с Android Studio SDK. Для этого, нам необходимо, в первую очередь, выполнить следующие шаги:

  1. Установить Android Studio с SDK;
  2. Добавить в переменную path путь до папки C:\Users\WebSofter\AppData\Local\Android\sdk\tools;
  3. Добавить в переменную path путь до папки C:\Users\WebSofter\AppData\Local\Android\sdk\platform-tools.

Далее нам будут доступны из командной строки 2 команды:

  1. adb — общая команда разработки пакета SDK;
  2. emulator — команда работы с виртуальными эмуляторами.

 

1. Установка Android apk -файла на реальное устройство

Сперва нам нужно подключить мобильное устройство к компьютеру через USB и через команду в CMD

adb devices

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

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

Теперь, чтобы установить на определенное устройство из списка apk-файл, нам необходимо ввести ключ установки, путь до apk и название устройства из списка. В данном случае, команда будет такая

adb -s 44bb94b57d82 install employee-directory.apk

После этой команды в командной строке будет сообщение об удачной установке на ваше Android-устройство

А в самом устройстве будет уже установленное apk-приложение.

Если в списке устрйоств вист только одно устройство , то можно укорочить команду

adb install path_to_apk

Дополнительная информация по команде adb будет по ссылке на официальном ресурсе https://developer.android.com/studio/command-line/adb.html

2. Установка Android apk -файла на виртуальное устройство

Перед установкой нам необходимо отключить аппаратную виртуализацию. Это требование Android Studio для удачного запуска своего эмулятора

Для этого, выполняем в командной строке команду

bcdedit /set hypervisorlaunchtype off

После этого перезапускаем компьютер и идем дальше.

Для начала посмотрим список доступных для нас виртуальных эмуляторов в системе. Для этого в командной строке выполняем команду

emulator -list-avds

Это вернет нам список уже созданных или существующих по умолчанию эмуляторов

Запустим первый в списке эмулятор под названием Phone через команду

Тут очень важный момент, возможно, что это связано с внутренним багом Android SDK, но, если запустить команду emulator вне директории C:\Users\WebSofter\AppData\Local\Android\sdk\emulator\, то есть возможность получить ошибку на подобие

C:\Users\WebSofter>emulator -avd Phone
[3420]:ERROR:android/android-emu/android/qt/qt_setup.cpp:28:Qt library not found at ..\emulator\lib64\qt\lib
Could not launch 'C:\Users\WebSofter\..\emulator\qemu\windows-x86_64\qemu-system-i386.exe': No such file or directory

Это произойдет, даже если мы добавили этот путь в переменную path, поэтому, чтобы запустить эту команду в штатном режиме надо зайти в папку C:\Users\WebSofter\AppData\Local\Android\sdk\emulator\ и там ее выполнить.

emulator -avd Phone

После данной команды запуститься процесс выполнения запуска эмулятора

А на экране вы увидите запущенный эмулятор

Чтобы запустить эмулятор в автономном режиме, при котором он бы не закончил работу после выхода из CMD можно выполнить команду

start emulator.exe -avd Phone

Теперь, когда мы смогли запустить наш виртуальный эмулятор, то давайте еще подключим через USB и реальное устройство и попытаемся вывести в список их в виде доступных для запуска приложений устройств через команду

adb devices

Это у нас выведет список всех устройств, на которые можно установить apk файл

Так как на реальном устройстве 44bb94b57d82 мы уже проверяли установку в первой части статьи, то на этот раз установим apk — файл на эмулятор emulator-5554 командой

adb -s emulator-5554 install employee-directory.apk

В итоге, программа установится на эмулятор

и можем найти в списке установленных программ

и запустить

На этом все.

 

 

Решение проблем с запуском Visual Studio Emulators for Android

👁 121 просмотров

Прежде, чем воспользоваться решениями из этой статьи следует учесть, что это не полноценные решения, так как эмуляторы Android в составе Visual Studio — это довольно глючные ПО и баги могут быть совсем иного характера, начиная от проблем с виртуализацей вашего ПК и кончая с глюками и конфликтами самих эмуляторов.

1. Ошибка отключенной виртуализации

Первая проблема, которая может возникнуть, это проблема, связанная с включением виртуализации в BIOS с ошибкой запуска:

Exit Code: HypervisorNotRunning when running Visual studio android emulator

Чтобы исправить эту ошибку необходимо удостовериться, что процессор поддерживает аппаратную виртуализацию и далее запустить командную строку с правами администратора. Запустив необходимо выполнить код включения аппаратной виртуализации:

bcdedit /set hypervisorlaunchtype auto

И перезапускаем систему Windows и пробуем.

2. Ошибка нехватки памяти

Данная ошибка связана с нехваткой оперативной памяти и сопровождается таким диалогом

Эмулятору не удалось проверить, работает ли виртуальная машина: 
В системе не хватает памяти, чтобы запустить эмулятор, занимающий 
2048 МБ оперативной памяти для запуска. Закройте другие приложения 
и запустите эмулятор повторно. Если это не помогает, следуйте 
инструкциям в следующей статье базы знаний: 
https://support.microsoft.com/en-us/help/2911380/-not-enough-memory-error-message-and-windows-phone-8-emulator-does-not

Для решения переходим по данной статье, где говорится, что необходимо редактировать параметр MemoryReserve ветки реестра на элементе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization  . Т.е. для начала запускаем редактор реестра командой Win + R, введя команду regedit

Далее находим нужную ветку

 

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

И перезапускаем систему Windows и пробуем.